이번 포스팅에서는 간단하게 도커 컨테이너 빌드하는 방법에 대해 정리하도록 한다.
컨테이너 빌드 순서
컨테이너 빌드하는 실행 순서는 다음과 같다.
- 디렉터리를 준비하여 이미지에 포함시킬 파일들을 모음
- *Dockerfile을 작성
- 컨테이너에서 실행할 애플리케이션 코드를 작성하고 유닛 테스트를 실행
- 이미지를 빌드
- 컨테이너를 실행하고 동작을 확인
* Dockerfile: 도커 이미지를 빌드하는 스크립트 파일로써, 다음과 같은 내용을 담고 있다.
- 베이스 이미지의 repository
- 설치할 패키지
- 애플리케이션 코드와 설정 파일
- 컨테이너 기동 시 실행될 명령어
1. 작업 파일 만들기
컨테이너를 빌드하기 위해서 먼저 작업 파일을 만든다. 예제에서 작업 파일 이름은 'Step03'으로 만들었다.
$ mkdir Step03
2. Dockerfile 작성하기
다음으로 Dockerfile을 생성하고, Dockerfile안에 베이스 이미지(alpine), 이미지에 포함시킬 파일(message), 컨테이너에 실행될 명령어(figlet)들을 작성한다.
$ vim Dockerfile
명령어들에 대한 설명은 다음과 같다.
FROM alpine:latest
FROM 명령어로 베이스 이미지를 지정한다. 베이스 이미지란 이미지를 만들 때 바탕이 되는 이미지를 의미한다. 이미지가 로컬에 없으면 도커 허브에서 다운로드한다. alpine은 5MB 남짓한 리눅스의 기본적 커멘드만 설치되어있는 경량 리눅스 이미지이다.
RUN apk update && apk figlet
RUN은 컨테이너에서 실행할 명령어를 지정한다. 명령어의 뜻은 alpine의 패키지 매니저를 업데이트하고 figlet이란 커맨트를 설치한 것이다 figlet은 아스키 아트를 출력하는 커멘드다.
ADD ./message /message
ADD로 컨테이너에 배치할 파일이나 디렉터리를 지정한다. 현재 디렉터리에 있는 message라는 파일을 컨테이너의 루트 디렉터리에 배치한다.
CMD cat /message | figlet
CMD로 컨테이너가 기동한 직후에 실행하는 커맨드를 지정한다. 'cat message'의 결과를 figlet 커맨드의 표준 입력으로 전달한다.
3. Dockerfile에 저장할 message 만들기
다음의 명령어를 이용하여 message파일에 'DEVLOS'라는 메시지를 기록한다.
$ echo "Hello World" > message
$ cat message
4. 이미지 빌드
이제 다음의 명령어를 이용하여 생성된 도커 파일을 이용하여 이미지를 빌드한다.
$ docker build --tag hello:1.0 .
주의할 점은 점(.) 앞에 반드시 빈칸을 넣는 것이다. 마지막 . 의 의미는 도커 파일의 경로를 지정하기 위한 것이다.
5. 이미지 생성 확인
다음의 명령어를 이용하여 빌드된 이미지를 확인한다.
$ docker image ls
6. 이미지를 실행해보기
이제 만들어진 이미지를 통해 docker container를 실행해 보도록 한다.
다음의 명령어를 이용하여 실행한다.
$ docker run hello:1.0
이렇게 6개의 단계로컨테이너를 실제로 만들어 보았다. 항상 Docker hub에 만들어져 있는 이미지를 이용해서 프로젝트를 진행하다가 Dockerfile을 이용하여 컨테이너를 생성해보니 감회가 새롭다.
실제로 프로젝트에 사용되는 도커 파일은 요구사항에 따라 더욱 복잡하고 많은 커맨드를 사용한다.
책에서 이야기한 대로, 이미지에는 운영체제와 패키지가 이미 모두 포함되어 있으므로 배포 시 추가적인 시간이 발생하지 않아 짧게 사용하고 폐기가 가능하다. 애플리케이션에 변경사항이 생기면 Dockerfile을 조금 수정하여 이미지를 다시 만들면 되기 때문이다. 이런 특징은 다음과 같이 운영상의 장점으로 작용한다고 한다.
- 프로젝트에 새롭게 참가한 개발자가 개발 및 실행 환경에 대해 학습해야 할 시간과 노력을 줄임
- 소프트웨어의 의존 관계를 컨테이너에 담아서 실행 환경 사이의 이동을 쉽게 해 줌
- 서버 관리나 시스템 관리의 부담을 줄임
- 개발 환경과 운영 환경의 차이를 줄여서 지속적 개발과 릴리즈를 쉽게 해 줌
- 같은 이미지를 사용하는 컨테이너 수를 늘림으로써 쉽게 처리 능력을 높일 수 있음
참고자료
[1] 15단계로 배우는 도커와 쿠버네티스 | 타카라 마호 | 2020.10 | 링크
'클라우드 컴퓨팅 & NoSQL > Docker' 카테고리의 다른 글
Docker Image 사이즈 줄이기 (1) | 2023.04.09 |
---|---|
[도커(Docker)] 도커 컴포즈(Docker compose) 사용법 (0) | 2021.04.17 |
도커(Docker) docker run <image>의 실행순서 (0) | 2021.04.09 |
도커(Docker)를 사용하는 이유 (0) | 2021.04.08 |
[Docker] Container 를 사용하는 이유 (0) | 2021.03.24 |