본문 바로가기
개발/개발공부

Container Image / 컨테이너 이미지, Kubernetes, Docker, Dockerfile

by 치킨개발자 2023. 1. 11.
728x90

Container Image


컨테이너 이미지는 root filesystem이미지 설정 정보로 저장

즉 이미지는 root filesystem에 복사되어 사용되는 것이고, Dockerfile과 같은 이미지 build관련 설정 명령어들로 이루어지는 것

  - Dockerfile

이미지 build 관련 명령어들을 저장

아래 표에 간단하게 명령어들을 정리해봤다.

명령어 동작
FROM Base Image를 지정하는 것
FROM alpine:3.10과 같이 사용
ADD 파일을 이미지에 복사하여 추가
ADD test.zip / 보통 압축 해제할 때 사용
COPY ADD와 비슷한 기능을 함, 복사
COPY test.sh /copy-test.sh
RUN shell 커맨드를 사용한다고 보면 됨
apt-get update 커맨드 실행
ENV 환경변수를 설정할때 사용
ENV NODE_ENV production 
환경변수 NODE_ENV를 production으로 설정한다는 뜻
EXPOSE 어느 포트로 맵핑하여 사용할건지 설정
EXPOSE 8080 시 8080포트를 이용하여 외부에 공개한다는 뜻
ENRTYPOINT 이미지 실행 커맨드
ENTRYPOINT
["python", "main.py"
]
CMD 이미지 실행 시 파라미터 설정
CMD ["-env", "test"] 
앞서 ENTRYPOINT와 CMD가 합쳐져서 커맨드 + 파라미터로 실행

https://docs.docker.com/engine/reference/builder/

더 많은 내용은 docker 공식 문서 확인 필요

 

Dockerfile을 통하지 않고도

docker run -e NODE_ENV=development

이런 식으로 env설정을 명시적으로 설정할 수도 있음

앞서 예시에서 본 것 처럼 NODE_ENV가 Dockerfile에 이미 존재해도 명령어로 재설정 됨

 

Image Build


Docker와 containerd의 과도기라고 생각하고, containerd에서도 Docker image를 사용한다는 가정하에 기본을 공부

Dockerfile의 각각 명령은 하나의 filesystem layer를 구성

Build된 이미지는 컨테이너 레지스트리에 저장

docker hub site image
Docker Hub alpine 이미지 (https://hub.docker.com/_/alpine)

이런식으로 github과 비슷한 Docker hub도 존재

Image push / pull등의 기능을 지원

# docker image pull
@ubuntu1804:~# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
a9eaa45ef418: Pull complete
Digest: sha256:f271e74b17ced29b915d351685fd4644785c6d1559dd1f2d4189a5e851ef753a
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

#docker image list
@ubuntu1804:~# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       latest    04eeaa5f8c35   42 hours ago   7.46MB

#docker run with interactive mode
@ubuntu1804:~# docker run -it alpine
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var

이런식으로 사진에 보인 alpine image를 pull 받고, 확인 및 interactive mode로 실행할 수 있음

본인이 만든 프로젝트와 Dockerfile을 통해서라면 docker pull 대신 docker build를 통해 이미지 생성 및 실행 가능

#build
$ docker build -t [생성할 이미지 이름] [Dockerfile 경로]

 

추가 보안사항으로 체크해야될 것도 존재

  - Dockerfile 출처

  - FROM에 사용되는 base image 신뢰도

  - USER명령어에 사용될 유저 권한 -> non-root 추천

  - RUN명령어가 바뀐다면 점검 필요

  - volume mount시 /etc, /bin과 같은 디렉토리는 사용하지 않도록 확인

  - setuid비트가 설정된 파일은 포함X

  - 코드 최소화

  - Immutable 지향

 

 

반응형

댓글