- 
                            
                            Docker image build & Dockerfile도커 | 쿠버네티스 2022. 10. 29. 16:36
1. 도커 이미지(Docker image)

출처 : https://www.netapp.com/blog/containers-vs-vms/ chroot :
파일을 격리하여 독립된 공간을 생성
# example directory tree root ├── sub1 │ ├── file1 │ └── file2 ├── sub2 │ └── file1 └── sub3 --> root ├── sub1 │ ├── file1 │ └── file2 ├── root │ └── file1 └── sub3namespace :
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

docker hub : 출처 : https://hub.docker.com/search?q= 2. AWS Marketplace

AWS Marketplace 출처 : https://aws.amazon.com/marketplace/search/results?ref_=header_nav_dm_container base image 사용
centos - Official Image | Docker Hub
DEPRECATION NOTICE This image is no longer supported/maintained (non-EOL tags last updated November 16, 2020, docker-library/official-images#9102; see also https://www.centos.org/centos-linux-eol/ and docker-library/docs#2205). Please adjust your usage acc
hub.docker.com
https://hub.docker.com/_/centos

출처 : https://hub.docker.com/_/centos 
출처 : 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_temp4. 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 80FROM : 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