본문 바로가기
docker & kubernetes

컨테이너 사용법 5 | Docker&Kubernetes 학습 28

by 그갸거겨 2024. 12. 1.
728x90
반응형
컨테이너로 이미지를 만들어보자.
이 방법은 컨테이너를 다른 환경에 복제하기 위해 사용된다.
컨테이너로 이미지를 만드는 방법
  • 이미 존재하는 컨테이너를 이용하면, 누구나 쉽게 이미지를 만들 수 있다.
  • commit 명령어로 기존 컨테이너를 이미지로 변환하거나, Dockerfile 스크립트로 이미지를 만드는 방법이다.

1. commit 명령어로 컨테이너를 이미지로 만들기

  • 컨테이너만 있으면 명령어 한 번으로 이미지를 만들 수 있어 간편하다.
  • 하지만, 이미지를 만들려면 컨테이너를 먼저 만들어야 한다.
  • 기존 컨테이너를 복제하거나 이동해야 할 때 편리하다.
  • 자주 사용되는 명령어 예: docker commit 컨테이너_이름 새로운_이미지_이름

2. Dockerfile 스크립트로 이미지 만들기

  • Dockerfile 스크립트를 작성하고 이 스크립트를 빌드해 이미지를 만드는 방법이다.
  • Dockerfile은 오직 이미지 만드는 용도 말곤 없다.
  • dockerfile 스크립트에는 토대가 될 이미지나 실행할 명령어 등을 기재한다.
    • 편집은 메모장 같은 텍스트 에디터를 사용한다.
  • 이 스크립트 파일을 호스트 컴퓨터의 이미지 재료가 들어있는 폴더에 넣는다.
  • 재료 폴더에는 스크립트 파일 외에도, 컨테이너에 넣을 파일들을 함께 둔다.
    • 만들어질 이미지를 통해, 생성될 컨테이너에 넣을 파일들
  • 자주 사용되는 명령어 예: docker build -t 생성할_이미지_이름 재료_폴더_경로

Dockerfile 스크립트 예

01 FROM 이미지_이름

02 COPY 원본_경로 대상_경로

03 RUN 리눅스_명령어

04 ...

  • FROM 뒤에 이미지 이름을 기재, 그 뒤로는 파일 복사 또는 명령어 실행 등 컨테이너를 대상으로 할 일을 기술한다.
  • Dockerfile 스크립트에 사용되는 주요 인스트럭션 중 초보자는 FROM, COPY, RUN 정도만 알아도 충분하다.
인스트럭션 내용
FROM 토대가 되는 이미지를 지정
ADD 이미지에 파일이나 폴더를 추가
COPY 이미지에 파일이나 폴더를 추가
RUN 이미지를 빌드할 때 실행할 명령어를 지정
CMD 컨테이너를 실행할 때 실행할 명령어를 지정
ENTRYPOINT 컨테이너를 실행할 때 실행할 명령어를 강제 지정
ONBUILD 이 이미지를 기반으로 다른 이미지를 빌드할 때 실행할 명령어를 지정
EXPOSE 이미지가 통신에 사용할 포트를 명시적으로 지정
VOLUME 퍼시스턴시 데이터를 저장할 경로를 명시적으로 지정
ENV 환경변수를 정의
WORKDIR RUN, CMD, ENTRYPOINT, ADD, COPY에 정의된 명령어를 실행하는 작업 디렉터리를 지정
SHELL 빌드 시 사용할 셸을 변경
LABEL 이름이나 버전, 저작자 정보를 설정
USER RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹을 지정
ARG docker build 명령어를 사용할 때 입력받을 수 있는 인자를 선언
STOPSIGNAL docker stop 명령어를 사용할 때 컨테이너 안에서 실행 중인 프로그램에 전달되는 시그널을 변경
HEALTHCHECK 컨테이너 헬스체크 방법을 커스터마이징
commit 명령어로 컨테이너를 이미지로 직접 변환해보자.
의미는 없으나, 연습으로 아파치 컨테이너 그대로를 이미지로 변환한다.

실습 내용

생성할 이미지 정보 및 명령어

항목
컨테이너 이름 apa00ex22
새로 만들 이미지 이름 ex22_original1
  • 컨테이너를 이미지로 변환하는 명령어: docker commit apa00ex22 ex22_original1

0. 아파치 컨테이너 준비

  • 터미널 창에 입력할 명령어: docker run --name apa00ex22 -d -p 8092:80 httpd

1. 컨테이너를 변환해 새로운 이미지 생성

  • commit 명령어를 사용해 apa00ex22 컨테이너로부터 새로운 이미지를 만들자
  • 터미널 창에 입력할 명령어: docker commit apa00ex22 ex22_original1

2. 이미지가 생성됐는지 확인

  • 터미널 창에 입력할 명령어: docker image ls

Dockerfile 스크립트로 이미지를 직접 만들어보자.

실습 내용

새로 만들 이미지의 정보 및 명령어

항목
기반 이미지 이름 httpd
새로 만들 이미지 이름 ex22_original2
재료 폴더의 경로(Windows) C:\Users\사용자명\Documents\apa_folder
재료 폴더의 경로(macOS) /Users/사용자명/apa_folder
재료 폴더의 경로(linux) /home/사용자명/apa_folder
  • Dockerfile 스크립트로 이미지 밀드 명령어: docker build -t ex22_original2 재료_폴더_경로
  • Dockerfile 스크립트의 내용
인스트럭션
FROM httpd
COPY index.html /usr/local/apache2/htdocs
  • 복사할 원본 경로는 상대 경로로 작성가능하여, 꼭 C:\Users\~ 로 시작하는 절대경로가 아니여도 된다.

1. 재료 폴더에 넣을 재료 준비

  • apa_folder 생성하고, 이 폴더 안에 index.html 파일을 배치한다.

2. Dockerfile 스크립트 작성

  • 아래 예제와 같이, Dockerfile 스크립트를 작성한다.(메모장 같은 텍스트 에디터 이용, linux는 nano에디터 이용)
  • 파일 이름은 Dockerfile, 확장자는 없앤다.
  • Dockerfile 작성 예(Windows/macOS/Linux 공용)
    • 01 FROM httpd
    • 02 COPY index.html /usr/local/apache2/htdocs

3. build 명령어로 이미지 빌드

  • 터미널 창에 입력할 명령어
    • Windows: docker build -t ex22_original2 C:\Users\사용자명\Documents\apa_folder
    • macOS: docker build -t ex22_original2 /Users/사용자명/Documents/apa_folder
    • Linux: docker build -t ex22_original2 /home/사용자명/Documents/apa_folder

4. 이미지가 생성됐는지 확인

  • image ls 명령어로 이미지가 생성됐는지 확인한다.

5. 뒷정리

  • 이미지 삭제: docker image rm ~~~
  • 이미지 목록 확인: docker image ls

 

 

이미지를 옮기는 방법
    - 컨테이너는 먼저 이미지로 변환하지 않으면 옮기거나 복사할 수 없다.
    - 하지만 이미지 역시 이미지 상태 그대로는 옮기거나 복사할 수 없다.
    - 따라서 도커 레지스트리를 통하거나 save를 사용해 tar 포맷으로 도커 엔진의 관리 영역 밖으로 내보내야 한다.
    - 이렇게 되면, 파일은 호스트 컴퓨터의 파일 시스템에 생성되고, 다시 도커 엔진에 가져오려면 load 명령어 사용!
    - tar 파일 생성: docker save -o 파일_이름.tar 이미지_이름
728x90