2 minute read

도커 이미지 다루기 : 이미지 빌드

1. 이미지 구조

도커 이미지 01

  • step 1. OS 이미지를 먼저 깔아 놓는다. (ubuntu)
  • step 2. 그 위에 Was or DBMS 와 같은 Base 프로그램 이미지를 깔아 놓는다. (nginx)
  • step 3. 그 위에 구현 소스를 깔아 놓는다. (web app)
  • step 4. 위 단계 까지의 컨테이너를 이미지로 빌드 한다.
  • steo 5. 빌드된 이미지를 컨테이너로 실행한다. 3단계의 까지 빌드된 이미지는 기본 값으로 구성되고 그 이후 부터 새로운 Read -Write 레이어가 생성되며 변경 내용을 쌓아 올릴 수 있다. -> 이후 부터 무한반복 가능


도커 이미지 정보 확인 명령어

```bash

    ## docker 이미지 목록 확인
    docker images

    ## docker 이미지의 상세 정보 확인
    docker image inspect [이미지]

```

2. Dockerfile 없이 이미지 생성

  • 기존의 컨테이너 기반으로 새로운 이미지를 생성할 수 있다.

    # docker commit [OPTION] CONTAINER [REPOSITORY[:TAG]]
    
    docker commit -a fastcampus ` 
    # 누가 이 이미지의 변경 점을 만들었는지 변경점 설정
    -m "First Commit" ubuntu my_ubuntu:v1 
    # unbuntu 컨테이너의 현재 상태를 my_ubuntu:v1 이라는 이름으로 이미지 생성

ex) docker commit -a chrisna2 -m “first Commit” my_ubuntu theuniverseiswithme:20221114

    // docker image inspect theuniverseiswithme:20221114
    "Layers": [
                "sha256:f4462d5b2da2985f37409c9b257afd2b9fb82356ce4e43e804ee34214242e34a", //ubuntu:focal
                "sha256:aec536ccdaf0968f873d00381c3cbbf8dc2f22dc6460eed2f6fcfefa7f5e3cb8" // my_ubuntu 컨테이너의 read & write layer 변경 내용
    ]

막간 팁

  • docker에서 컨테이너를 인터랙티브로 연결 후 나올때 나오는 방법
    • exit : 컨테이너를 나올때 실행되는 컨테이너를 종료
    • ctrl + p + q : 이미 실행되는 컨테이너를 그대로 둔체 컨테이너를 나옴 (이걸 사용해야 함)

3. Dockerfile 이용하여 이미지 생성

  • 위와 같은 명령어가 아닌 Dockerfile을 이용하여 이미지를 빌드할 수 있다.
    # [지시어] [인자값] 구성
    FROM node:12-alpine
    RUN apk add --no-cache python3 g++ make
    WORKDIR /app
    COPY ...
    RUN yarn install --production
    CMD ["node", "src/index.js"]

  • 위와 같이 Dockerfile 준비가 되면 호스트 창에 build 명령을 통해 이미지로 빌드를 진행 할 수 있다.
# docker build [OPTION] PATH
# ./ 호스트 디렉토리를 빌드 컨텍스트로 my_app:v1 이미지 빌드 (Dockerfile 이용) 
$ docker build -t my_app:v1 ./ # -t : tag 옵션

# ./ 호스트 디렉토리를 빌드 컨텍스트로 my_app:v1 이미지 빌드 (example/MyDockerfle 이용)
# 어느 경로 및 이름에 상관없이 Dockerfile 은 생성이 가능하다.
$ docker build -t my_app:v1 -f example/MyDockerfile ./

4. 빌드 컨텍스트

  • 도커 빌드 명령 수행 시 현재 디렉토리를 “빌드 컨텍스트”라고 한다.
  • Dockerfile로부터 이미지 빌드에 필요한 정보를 도커 데몬에게 전달하기 위한 목적이다.

5. .dockerignore

  • 해당 경로에 파일이 너무 많거나 빌드할때 필요 없는 파일들을 무시하기 위한 파일

6. docker image 명령어

# 도커 이미지 목록 확인
$ docker images 

# 도커 이미지 dockerfile을 통해 빌드 (옵션 값이 없으면 명령을 치는 디렉토리에 dockerfile 보유 필요)
$ docker image build

# 이미지의 history 이력 확인
$ docker image history

# 이미지 나열
$ docker image ls

# 사용하지 않는 이미지 제거
$ docker image prune

# 레지스트리에서 이미지 또는 저장소 가져오기
$ docker image pull

# 이미지 또는 저장소 가져오기
$ docker image push

# 하나 이상의 이미지 제거
$ docker image rm

# 도커 이미지 제거
$ docker rmi 

# 모든 도커 이미지 제거
$ docker rmi $(docker images -q)

# Source_Image를 참조하는 Target_image 태그 설정
docker image tag

Categories:

Updated:

Comments