docker 교과서 Chapter 4
도커를 빌드 도구로 활용하기#
- 소프트웨어 빌드 도구로 활용 가능한 도커
- 빌드 과정이 복잡한 경우 중간에 사용하느 빌드 도구의 환경을 동일하게 맞추는 것도 어려울 수 있다. 이 경우 빌드 툴체인을 공유할 수 있다.
- 예를 들어 프로그램을 빌드 하기 위해 참여하는 링커, 컴파일러, 패키지 관리자, 런타임 환경 전부 도커파일 안에 정의할 수 있다.
- 빌드 도구와 도커 스테이징은 무슨 관계이지?
- 각 스테이지별로 사용하는 기반 이미지
FROM
이 다를수도 있다. 이 경우 기반 이미지를 한데 모아서 큰 기반 이미지를 만들어도 되지만 스테이징을 하여 관리할 수도 있다. - 각 단계별로 목적이 뚜렷한 경우 스테이징 할 수 있다. 빌드 스테이지, 테스트 스테이지 등과 같이 말이다. 이때 각 스테이징을 위해 사용하는 기반 이미지에 별칭을 붙일 수 있는데,
AS
키워드를 사용할 수 있다.AS
키워드로 정의한 스테이지 별칭은COPY --from=<stage>
에서 참조할 수 있다. 이전 스테이지의 산출물을 공유하지 않기 때문에 꼭COPY
명령어를 써주는 것 같다.
- 각 스테이지별로 사용하는 기반 이미지
RUN
인스트럭션은 컨테이너 안에서 실행할 명령어를 정의한다. 셸 스크립트로 작성한다.
flowchart TD
subgraph Build Stage
A[Input: diamol/base] --> B[RUN echo 'Building...' > /build.txt]
B --> C[Output: /build.txt]
end
subgraph Test Stage
D[Input: diamol/base + /build.txt from Build Stage] --> E[RUN echo 'Testing...' >> /build.txt]
E --> F[Output: /build.txt]
end
subgraph Final Stage
G[Input: diamol/base + /build.txt from Test Stage] --> H[CMD cat /build.txt]
H --> I[Output: /build.txt displayed]
end
C --> D
F --> G
- 빌드 서버는 소스코드와 도커파일을 가지고
docker build
를 하여 아티팩트가 포함된 이미지를 생성한다. - 배포서버는 아티팩트가 포함된 이미지를 pull 받아 단순히
doker run
을 한다. - 위 두 작업을 자동화 해주는 녀석이 CI (Continuous Integration) 인 것이다.
CMD와 ENTRYPOINT의 차이점이 뭔가요?#
Key Differences:#
- Overriding:
CMD
can be overridden by providing a command at the end ofdocker run
.ENTRYPOINT
cannot be overridden bydocker run
arguments (unless you explicitly use--entrypoint
).
- Intent:
- Use
CMD
for default, flexible commands that can be overridden. - Use
ENTRYPOINT
when you want a fixed command that will always run.
- Use
In summary, CMD
is better suited for default commands that can be changed, while ENTRYPOINT
is used for mandatory commands that should always be executed when the container starts.
도커 가상 네트워크#
도커 컨테이너끼리 통신을 주고받기 위해선 가상 네트워크 (로컬 네트워크)를 구축하고 그 안에 컨테이너들을 할당해주어야 한다. 그러면 그 안에서 가상 IP주소를 발급받게 되고 EXPOSE한 포트번호를 통하여 네트워크 통신을 하게 된다.
docker container network <docker-network-name>