본문 바로가기
도커&쿠버네티스

[도커/쿠버네티스] 2.3~2.4장 도커 이미지, 도커 파일(Dockerfile)

by bzerome240 2022. 1. 5.

 

 

2.3.1 도커 이미지 생성

docker commit 명령어

docker commit [OPTIONS] CONTATINER [RESPOSITORY[:TAG]]
ex) docker commit -a "alicek106" -m "my first commit" commit_test commit_test:first

-a : 이미지 작성자

-m : 커밋 메시지

 

ex) 컨테이너 내부에 first라는 이름의 파일 생성 후 커밋

docker run -i -t --name commit_test ubuntu:14.04
root@acc525940263:/# echo test_first! >> first
docker commit -a "alicek106" -m "my second commit" commit_test2 commit_test:second

docker images 명령어로 생성되었는지 확인

 

2.3.2 이미지 구조 이해

inspect

: 컨테이너 뿐만아니라 네트워크, 볼륨 이미지 등 모든 도커 단위의 정보를 얻을때 사용

docker inspect ubuntu:14.04
docker inspect commit_test:first
docker inspect commit_test:second

 

docker 히스토리

docker history commit_test:second

 

docker 이미지 삭제

docker rmi commit_test:first

댕글링 이미지 : docker rmi -f 로 강제로 삭제하면 docker 이미지의 이름이 none인 이미지

 

사용중이지 않은 댕글링 이미지 삭제

 docker image prune

 

2.3.3 이미지 추출

도커 이미지를 별도로 저장하거나 옮기는등 필요에 따라 이미지를 단일 바이너리 파일로 저장해야함.

이때 docker save 명령어를 사용해 파일을 추출할수있음

 

이미지 추출

 docker save -o ubuntu_14_04.tar ubuntu:14.04

 

추출된 이미지 로드

 docker load -i ubuntu_14_04.tar

 

import,export 명령어로 이미지 추출 및 저장

 docker export -o rootFS.tar mycontainer
 docker import rootFS.tar myimage:0.0

 

2.3.4 이미지 배포

이미지 배포하는 방법

  1. 도커 허브 이미지 저장소를 사용 (docker push,pull을 사용), 단 비공개 저장소에는 제한이있어 결제를 해야돰
  2. 도커 사설 레지스트리를 사용 (사용자가 직접 이미지 저장소 및 사용되는 서버, 저장공간 관리)

 

2.3.4.1 도커 허브 저장소

도커허브 (https://hub.docker.com)

: 도커가 공식적으로 제공하고있는 이미지 저장소 

- 누구나 이미지를 올리고 내려받을 수 있다.

 

 

docker tag

- 특정 이름의 저장소에 이미지를 올리려면 저장소 이름을 이미지 앞에 접두어로 추가해주어야함

ex) docker tag [기존의 이미지 이름][새롭게 생성될 이미지 이름]
docker tag my-image-name:0.0 alicek107/my-image-name:0.0

 

#docker 로그인/로그아웃 명령어
docker login/logout

#docker push 명령어
docker push alicek107/my-image-name:0.0

#docker pull 명령어
docker pull alicek107/my-image-name:0.0

 

2.3.4.2 도커 사설 레지스트리

도커 사설 레지스트리 생성

#도커 사설 레지스트리 생성
docker run -d --name myregistry -p 5000:5000 --restart=always registry:2.6
#컨테이너 정상작동 확인용 예시
curl localhost:5000/v2/

사설 레지스트리에 이미지 push

docker tag my-image0name:0.0 ${DOCKER_HOST_IP}:5000/my-image-name:0.0

 

 

2.4 Dokerfile

2.4.1 이미지를 생성하는 방법

Dockerfile

: 도커 이미지를 구성하기 위해 있어야할 패키지, 의존성, 소스코드 등을 하나의 file로 기록하여 이미지화 시킬 명령 파일

: 코드 형태의 텍스트 문서로, 이미지 제작 가능 (commit 보다는 dockerfile을 사용한다)

 

https://medium.com/swlh/understand-dockerfile-dd11746ed183

- 이미지 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 더 이상 새로운 서버가 추가되면 의존성 파일을 컴파일하고 이것 저것 설치할 필요가 없다.

👉 버전 관리 용이

👉 이미지 기능 파악 용이

👉 배포 자동화 가능

 

 

2.4.3 Dockerfile 빌드

2.4.3.1 이미지 생성

#빌드 명령어
docker build -t mybuild:0.0 ./

#컨테이너 실행
docker run -d -P --name myserver mybuild:0.0 

#컨테이너 확인
docker port myserver
docker images --filter "label=purpose=practice"
 

캐시를 이용한 이미지 빌드

#캐시도커파일 생성
vi Dockerfile2
FROM ubuntu: 14.03
MAINTAINER alicek106
LABEL "purpose"="practice"
RUN apt-get update

#위에만든 이미지 빌드
docker build -f Dockerfile2 -t mycache:0.0

    2.4.3.2 빌드 과정 살펴보기

    2.4.3.3 멀티 스테이지를 이용한 Dockerfile 빌드하기

 

 

2.4.4 기타 Dockerfile 명령어

    2.4.4.1 ENV, VOLUME, ARG, USER

    2.4.4.2 Onbuild, Stopsignal, Healthcheck, Shell

    2.4.4.3 ADD, COPY

    2.4.4.4 ENTRYPOINT, CMD

 

  • -FROM: 생성할 이미지의 베이스가 될 이미지 (이미지 이름:태그)
    DockerFile을 작성할때 반드시 한번이상 입력해야함
    사용하려는 이미지가 도커에 없다면 자동으로 pull
  • -ARG: 이미지 빌드 시점에서 사용할 변수 지정
  • -LABEL : 이미지에 메타데이터 추가
    메타데이터는 "키:값"의 형태로 저장되며 여러개의 메타데이터가 저장될수있다.
    확인은 docker inspect명령어로 확인
  • -RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어를 실행
  • -ADD : 파일을 이미지에 추가
    추가하는 파일은 Dockerfile이 위치한 디렉터리인 Context에서 가져온다.
  • -WORKDIR : 명령어를 실행할 디렉터리
    배시 셸에서 CD 명령어를 입력하는것과 같은 기능을함
  • -EXPOSE : Dockerfile의 빌드로 생성된 이미지에서 노출할 포트를 설정
  • -CMD : 컨테이너가 시작될 시 실행항 스크립트 또는 명령어를 설정
    Dockerfile에서 한번만 사용할수있다.
  • -ENTRYPOINT: 컨테이너가 시작될 시 실행항 스크립트 또는 명령어를 설정
  • -ENV: 컨테이너의 환경변수 지정
  • -VOLUME: 컨테이너의 볼륨 지정
  • -USER: 컨테이너의 사용자 지정

 

 

dockerfile 예시

FROM ubuntu:15.04       # 우분투 15.04 도커 이미지에서 레이어 생성
COPY . /app             # 도커 클라이언트의 현재 디렉토리를 생성
RUN make /app           # 빌드
CMD python /app/app.py  # 콘테이너에서 실행할 명령

 

FROM openjdk:11
ARG JAR_FILE=build/libs/app.jar
COPY ${JAR_FILE} ./app.jar
COPY pharmacy.csv ./
ENV TZ=Asia/Seoul
ENTRYPOINT ["java","-jar","./app.jar"]

 

 

 

2.4.5 Dockerfile로 빌드할 때 주의할 점

 

 


기타 참고하면 좋을 블로그 

 

도커이미지 잘 만드는 방법

 

조은우 개발 블로그

 

jonnung.dev

 

728x90
반응형

댓글