Net Eng

Docker 이미지 생성 본문

Cloud/Docker

Docker 이미지 생성

欲心 2024. 6. 18. 21:35

■ Docker CMD를 사용하여 이미지 생성

- docker commit CMD (Container → Image)

→ 용도 : 명령어를 사용한 이미지 제작

# docker commit CONTAINER IMAGE
# docker commit -a "Author' -m 'Message' CONTAINER IMAGE

 

[참고] 도커 이미지를 만드는 과정

 

(ㄱ) 베이스 이미지 다운로드

# docker pull ubuntu:18.04

 

(ㄴ) 컨테이너 기동 & 접속

# docker run -it --name myweb ubuntu:18.04

 

(ㄷ) 선수 패키지 설치 & 소스 코드 빌드

# apt-get update
# apt-get install default-jdk git
# git clone https://github.com/ID/REPO.git
.....
# ./gradlew build

 


(ㄹ) 스크립트 생성

# vi /start.sh
-------------------------------------
#!/bin/bash
jar -jar /home/.../login-service.jar
-------------------------------------
# chmod +x /startup.sh
# exit

 

(ㅁ) 컨테이너를 이미지로 생성

# docker commit -a 'Author' -m 'Message' meweb myweb-image

 

(ㅂ) 컨테이너 기동 & 확인

# docker run -d --name mynewweb -p 8080:8080 myweb-image

 

■ Docker export/import CMD

(용도) 컨테이너 분석

Docker export CMD (Container → Container.tar)

# docker export myweb > myweb.tar
# docker export myweb -o myweb.tar
	
# docker export myweb > myweb.tar
# tar xvf myweb.tar -C /app

# docker export myweb | tar xf - -C /app

 

□ Docker import CMD (Container.tar → Image)

# docker import myweb.tar myweb-image
# docker import http://docker2/myweb.tar myweb-image
$ sudo tar -c . | docker import - myweb-image

 

[참고] Docker export/import

# docker export myweb | tar xf - -C /myweb
# vi /myweb/* (수정)
# cd /myweb ; tar -c . | docker import - myweb-image

 

■ Docker save/load CMD

 

□ Docker save cmd

# docker save -o IMAGE.tar IMAGE

 

□ Docker load cmd

# docker load -i IMAGE.tar

 

■ Dockerfile를 사용하여 이미지 생성

# man dockerfile

 

□ Docker build CMD

# docker build -t app .
# docker build -t app --no-cache .
# docker build -t app -f Dockerfile2 .
# docker build -t app -f Dockerfile2 /root/docker

# docker build -t - . < docker.tar.gz
# cat docker.tar.gz | docker build -t - .

 

□ Dockerfile

 

Dockerfile reference

Find all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.

docs.docker.com

-------------------------------------------------------------------
FROM busybox
FROM busybox:1.0
FROM busybox:1.0@....
-------------------------------------------------------------------
RUN apt-get -y install git
RUN ["apt-get", "-y", "install", "git"]
-------------------------------------------------------------------
CMD nginx -g 'daemon off;'
CMD ["nginx", "-g", "daemon off;"]
-------------------------------------------------------------------
ENTRYPOINT nginx -g 'daemon off;'
ENTRYPOINT ["nginx", "-g", "daemon off;"]

[참고] CMD vs ENTRYPOINT
[참고] ENTRYPOINT + CMD
ENTRYPOINT ["TOP"]
CMD ["-d", "10"]
-------------------------------------------------------------------
WORKDIR /first/second/third

ENV WORKPATH /first/second
WORKDIR $WORKDIR
-------------------------------------------------------------------
ENV ABC=hello
ENV ABC=hello DEF=world
ENV GIH=$ABC
-------------------------------------------------------------------
USER user01
USER user01:user01
-------------------------------------------------------------------
COPY index.html /var/www/html
COPY ./html/ /var/www/html/

ADD src.tar /var/www/html
ADD http://internet/src.tar.gz /var/www/html
ADD home* /mydir/
-------------------------------------------------------------------
LABEL title="webapp"
LABEL author="Mr, Baik"
LABEL version="2.0"
-------------------------------------------------------------------
EXPOSE 80         # => EXPOSE 80/tcp
EXPOSE 80/tcp
EXPOSE 21 20
EXPOSE 53/udp
-------------------------------------------------------------------
VOLUME /var/log
VOLUME /var/log /was

VOLUME ["/var/log"]
VOLUME ["var/log", "/was"]
-------------------------------------------------------------------

 

■ 모범 사례 (Best Practice)

 

- 멀티스테이지 빌드

- Base Image 선택 (alpine, busybox)

- Image Layer 줄이기

- RUN apt-get update && \
    
    apt-get -y install apache2 PKG2 PKG2 \

→ Dockerfile 내에서 자주 변경 되는 내용 (RUN …)이 있다면 뒤에 배치한다.

'Cloud > Docker' 카테고리의 다른 글

Docker 컴포즈  (0) 2024.06.18
Docker 리소스 제한  (0) 2024.06.18
Docker 컨테이너 운용  (0) 2024.06.18
Docker 네트워크 관리  (0) 2024.06.18
Docker 볼륨 관리  (0) 2024.06.18