Multi-Stage buildMulti-Stage 포스팅Docker 이미지의 목적은 실행이지, 빌드에 있지 않다. 컴파일이나 빌드 관련 명령어는 제외하자과거에는 도커 이미지 생성 시 프로그램 빌드 후 도커 이미지 생성현재에는 이미 프로그램 빌드가 마쳐진 결과물만 가지고 (COPY) 도커 이미지 생성혹시라도 도커 이미지 내에서 프로그램 빌드(컴파일)을 한다면 멀티 스테이지 도입이 시급Java의 경우 `/gradlew clean build`, JS인 경우 `npm install`Java인 경우 `build` 디렉토리에 쌓인 `.class` 바이트코드 사이즈가 너무 크고 (.JAR 파일을 COPY해서 사용하는 이유)JS의 경우 `node_nodule` 사이즈가 너무 크다.도커 이미지의 사이즈는 크면 클수록 ..
분류 전체보기
https://docs.docker.com/build/building/multi-stage/ Multi-stageLearn about multi-stage builds and how you can use them to improve your builds and get smaller imagesdocs.docker.com 공식 문서를 번역하면서 공부한 것이라 오역이 있을 수 있습니다.Use multi-stage buildsMulti-stage build는 이미지 빌드와 최종 결과물 사이를 깔끔하게 분리하여 최종 이미지 사이즈를 줄어준다. Dockerfile 명령어를 여러 단계로 나누어 Dockerfile의 결과물이 애플리케이션을 실행하는 데 필요한 파일만 포함하도록 하자multi-stage는 빌드 단계를 ..
Build contextLearn how to use the build context to access files from your Dockerfiledocs.docker.com docker buildx builddocker build 위 두 명령어를 수행하면 Dockerfile과 context로부터 Docker 이미지가 만들어진다. Build Context가 뭔데?`docker build` 명령어를 실행했을 때 접근 가능한 파일의 집합이다. `build` 명령에서 특정 위치를 인자로 넘겨서 build에 사용할 context를 지정할 수 있다.아래 명령어 같은 경우 `.` 현재 디렉토리를 기준으로 context를 생성해서 사용하겠다는 뜻 -> 현재 작업 디렉토리를 build context라고 한다. D..
Dockerfile overviewLearn about Dockerfiles and how to use them with Docker Images to build and package your softwaredocs.docker.com Docker는 Dockerfile에서 명령어를 읽어 이미지를 빌드한다. Dockerfile은 소스코드를 빌드하기 위한 명령어가들어 있는 텍스트 파일이다. Dockerfile에 사용되는 명령어`FROM ` : 이미지의 기준이 되는 것을 정의`RUN ` : 현재 이미지 위의 새 레이어에서 모든 명령을 실행하고 결과를 커밋.`WORKDIR `: `RUN`, `CMD`, `ENTRYPOINT`, `COPY`, `ADD` 명령어에 대한 작업 디렉터리를 설정'`COPY `: ``..

Docker 사용 시 마주할 용어docker image(이미지) : Docker 격리 정의 단위Dockerfile: Docker 격리 정의 서술 (Instruction)Docker Container(컨테이너): Docker 격리 동작 단위 = 격리된 공간에서 실행중인 Docker 이미지Docker Engine(= API + CLI + Docker Deamon) : Docker 이미지를 구동 및 관리하기 위한 엔진Docker Engine 위에 이미지를 올리고 Run 구동 시 독립적인 Docker Container 실행Host 호스트 = Node 노드 = Instance 인스턴스 = Server 서버: Docker Engine 구동Host는 다수의 Container를 갖는다.Node는 다수의 Containe..

CacheImprove your build speed with effective use of the build cachedocs.docker.com Docker Image 는 매 Instruction 마다 layer로 구성되며 이 중간 과정을 Cache해 놓는다. How the Build Cache works도커 빌드 캐시를 이해하면 더 빠른 이미지를 생성하는 도커 파일을 작성할 수 있다. 아래 예시는 C 언어로 작성된 작은 도커 파일이다.# syntax=docker/dockerfile:1FROM ubuntu:latestRUN apt-get update && apt-get install -y build-essentialsCOPY main.c Makefile /src/WORKDIR /src/RUN make..

CD: AWS EC2 생성 후 내부 접속하여 CI 로 만든 Docker 이미지 실행개발자 대신 Github Action이 직접 EC2에 접근하여 도커 이미지를 컨테이너로 실행아래 과정을 거쳐서 Github Action을 자동화 해줘야한다.1. github action 에게 접근하고 조작할 수 있는 권한주기 -> IAM 을 통해서 부여2. github action 이 EC2 서버에 들어가기 위한 방화벽 설정3. EC2 shell 에 접근하기 위해 key pair 사용하지 않고 IAM 으로 접근해서 image pull, run 자동화1. AWS IAM 설정: Github Actions 가 EC2 에 접근할 계정 생성IAM: AWS 서비스에 대한 접근 권한을 가진 사용자를 생성하는 서비스Github Acti..

문제Docker 이미지를 github action에서 생성 후 자동으로 Docker Hub에 올리도록 자동화를 하였다.그리고 Ec2에서 이미지를 pull하려니까 접근 권한 거부 에러가 떳다. 해결`/var/run/docker.sock` 에 권한을 부여해주면된다.sudo chmod 666 /var/run/docker.sock 이미지가 잘 받아와지는걸 확인할 수 있다.

Docker 격리 정의 시 : 단일 / 다중 이미지 정의하나의 OS 위 다양한 컨테이너를 조합하여 어플리케이션 구동 가능어플리케이션 = 컨테이너 조합 (컨테이너는 격리된 공간에서 프로세스가 동작하는 기술)단일 컨테이너 어플리케이션 관리: Dockerfile 통한 단일 이미지 구성 및 구동다중 컨테이너 어플리케이션 관리: Docker-Compose 통한 다수 이미지 구성 및 구동Docker Compose 내 다중 컨테이너 사이에서의 network 도커 안에서 컨테이너끼리 network 통신하기 위해 (1) User-defined Bridge, (2) Hostname 2가지가 있음. docker-compose.yml 파일 내 `ports:` 옵션만 준 경우 Spring 에서 MySQL 사용시 어떤 포트 사용..