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된 이미지는 컨테이너 레지스트리에 저장
이런식으로 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 지향
댓글