[docker] 컨테이너 응용 - 컨테이너 이미지 생성 By starseat 2023-01-26 11:03:12 server/oss Post Tags # 컨테이너 이미지 만드는 법 - 이미 존재하는 컨테이너를 이용하면 쉽게 생성 가능 - 처음부터 새롭게 생성하는 것은 숙련자도 쉽지 않음. - 컨테이너 복제시엔 `docker commit` 커맨드를 사용해 이미지로 변환 후 `docker save` 커맨드로 이미지 파일 추출로 복사 - 이미지를 만드는 방법에는 `commit` 커맽드로 기존 컨테이너를 이미지로 변환하는 방법과 `Dockerfile` 스크립트를 사용해 이미지를 만드는 방법이 있음. ## commit 커맨드로 컨테이너를 이미지로 변환 - 준비된 컨테이너가 있으면 간편하게 이미지 생성 가능 - 기존 컨테이너를 복제하거나 이동해야 할 때 편리 ```text docker commit {컨테이너 이름} {새로운 이미지 이름} ``` ## Dockerfile 스크립트로 이미지 만들기 - `Dockerfile` 스크립트 작성 후 빌드해 이미지를 만드는 방법 - `Dockerfile` 스크립트에는 토대가 될 이미지나 실행할 명령어 등을 기재 - 빌드 커맨드 예 ```text docker build -t {생성할 이미지 이름} {재료 디렉토리 경로} ``` - Dockerfile 예 ```text FROM {이미지 이름} COPY {원본 경로} {대상 경로} RUN {실행 리눅스 명령} ... ``` - 주요 Dockerfile 인스트럭션 | 인스트럭션 | 내용 | | -- | -- | | **FROM** | 토대가 되는 이미지 지정 | | ADD | 이미지에 파일이나 디렉터리 추가 | | **COPY** | 이미지에 파일이나 디렉터리 추가 (복사) | | **RUN** | 이미지 빌드시 실행할 명령어 지정 | | CMD | 컨테이너 실행시 실행할 명령어 지정 | | ENTRYPOINT | 컨테이너 실행시 실행할 명령어 **강제** 지정 | | ONBUILD | 이 이미지를 기반으로 다른 이미지를 빌드할 때 실행할 명령어 지정 | | EXPOSE | 이미지가 통신에 사용할 포트를 명시적으로 지정 | | VOLUME | 퍼시스턴시 데이터를 저장할 경로를 명시적으로 지정 | | ENV | 환경변수 정의 | | WORKDIR | RUN, CMD, ENTRYPOINT, ADD, COPY 에 정의된 명령어를 실행하는 작업 디렉터리 지정 | | SHELL | 빌드 시 사용할 Shell 지정 | | LABEL | 이름이나 버전등 정보 설정 | | USER | RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹 지정 | | ARG | docker build 커맨드를 사용할 때 입력받을 수 있는 인자 선언 | | STOPSIGNAL | docker stop 커맨드를 사용할 떄 컨테이너 안에서 실행 중인 프로그램에 전달되는 시그널 변경 | | HEALTHCHECK | 컨테이너 헬스체크 방법 커스터마이징 | ## 사용 예 ### commit 커맨드 사용 예 - 아파치 컨테이너 준비 ```text docker run --name apa000ex01 -d -p 8092:80 httpd ``` - 컨테이너를 이미지로 변환 ```text docker commit apa000ex01 apa000newimg01 // apa000ex01 : 컨테이너 이름 // apa000newimg01 : 새로 만들 이미지 이름 ``` - 이미지 생성 확인 ```text docker image ls ``` ### Dockerfile 예 - 정보 | 항목 | 값 | | -- | -- | | 기반 이미지 | httpd | | 새로 만들 이미지 | newimg01 | | 대상 디렉터리 | /home/tester/apa_dir | - Dockerfile 작성 ```text FROM httpd COPY index.html /usr/local/apache2/htdocs ``` - 이미지 빌드 ```text docker build -t newimg01 /home/tester/apa_dir ``` - 이미지 확인 ```text docker image ls ``` ## (추가) 이미지를 옮기는 방법 - 컨테이너는 이미지로 변환하지 않으면 옮기거나 복사할 수 없음 - 이미지 역시 이미지 상태 그대로는 옮기거나 복사할 수 없으므로 도커 레지스트리를 통하거나 `save` 커맨드를 사용해 `tar` 포맷으로 도커 엔진의 관리 영역 밖으로 내보내야 함. - 파일은 호스트 컴퓨터의 파일 시스템에 생성됨. - 파일을 다시 도커 엔진에 가져오려면 `load` 커맨드 사용 ```text docker save -o {파일 이름}.tar {이미지 이름} ``` # 출처 - [그림과 실습으로 배우는 도커 & 쿠버네티스](https://wikibook.co.kr/dkkb/) Previous Post [docker] 컨테이너 응용 - 볼륨 마운트 Next Post [docker] 컨테이너 응용 - 컨테이너 개조