[Docker] 도커 이미지 다루기 : 이미지 빌드
도커 이미지 다루기 : 이미지 빌드
1. 이미지 구조
- 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
Comments