-
Docker image build & Dockerfile도커 | 쿠버네티스 2022. 10. 29. 16:36
1. 도커 이미지(Docker image)
chroot :
파일을 격리하여 독립된 공간을 생성
# example directory tree root ├── sub1 │ ├── file1 │ └── file2 ├── sub2 │ └── file1 └── sub3 --> root ├── sub1 │ ├── file1 │ └── file2 ├── root │ └── file1 └── sub3
namespace :
pid, mnt, net, ipc, uts, user, cgroup, time 등의 설정을 통해 독립된 공간을 생성
cgroup :
자원을 제한, 할당
Union Mount :
레이어를 통한 이미지 구축
2. 베이스 이미지
Image registry
Image repository에서 개인에게 할당된 container image 저장공간
Image repository
기업에서 운영되는 container image 저장공간
1. Docker hub
2. AWS Marketplace
base image 사용
https://hub.docker.com/_/centos
# command line docker run --name centos centos:7
# Dockerfile FROM centos:7 # 베이스 이미지로 centos:7 사용
3. Docker 명령어
이미지를 통해 컨테이너 생성
docker run --name <container name> <option> <image name:tag> example : docker run --name web -it centos:7
컨테이너로 새로운 이미지 생성
docker commit --change='CMD ["/usr/sbin/httpd", "-DFOREGROUND"]' <container name> <image name>
로컬의 파일을 컨테이너로 복사
docker cp <file name> <container name>:<file path in container> example : docker cp index.html web:/usr/share/nginx/html/index.html
# 반대로 컨테이너의 파일을 로컬로 복사하는 것도 가능
컨테이너의 read write 레이어의 변경사항에 대해 확인
docker diff {컨테이너명} C : 변경 A : 추가 commend's result example : C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/fastcgi_temp
4. Dockerfile: FROM / ADD/COPY/RUN
# example FROM ubuntu:latest ADD sub_app.tar / COPY main_app /main_app RUN apt-get update \ && apt-get install -y java-11-amazon-corretto.x86_64 \ && chmod +x main_app \ && apt-get clean CMD ["/main_app"] EXPOSE 80
FROM : base image를 설정
ADD : 로컬에 있는 파일을 컨테이너에 추가, 만약 tar 등 압축파일을 추가할 경우 압축해제
COPY : 로컬에 있는 파일을 컨테이너에 복사
RUN : 컨테이너가 만들어질 때 주어진 명령어 자동으로 실행
CMD : 컨테이너가 실행될 때 사용할 명령어
EXPOSE : 열어줄 포트를 입력, 포트를 열어주는 것은 아님
5. 도커 이미지의 레이어
Dockerfile에 적혀있는 명령의 개수에 따라 레이어 수가 결정된다.
만약 여러 명령을 하나로 연결하여 실행할 경우 레이어 수를 줄일 수 있다.
레이어가 많고 작음을 상황에 따라 적절하게 사용할 필요가 있다.
많은 Dockerfile이 사용되고 서로 공유할 수 있는 레이어가 많을 경우 레이어를 분리하여 사용하는 것이 좋을 것 같다.
#example # version 1 FROM ubuntu:latest COPY main_app /main_app RUN apt-get update RUN apt-get install -y java-11-amazon-corretto.x86_64 RUN chmod +x main_app RUN apt-get clean CMD ["/main_app"] EXPOSE 80 # version 1의 레이어 | FROM | | COPY | | RUN | | RUN | | RUN | | RUN | | CMD | # version 2 FROM ubuntu:latest COPY main_app /main_app RUN apt-get update \ && apt-get install -y java-11-amazon-corretto.x86_64 \ && chmod +x main_app \ && apt-get clean CMD ["/main_app"] EXPOSE 80 # version 2의 레이어 | FROM | | COPY | | RUN | | CMD |
'도커 | 쿠버네티스' 카테고리의 다른 글
[K8s] StatefulSet, Ingress, Autoscaler (0) 2023.02.23 [K8s] 컨트롤러 - DaemonSet, Job, CronJob (0) 2023.01.24 [K8s] 컨트롤러 - Replication Controller, ReplicaSet, Deployment (0) 2023.01.24