IT/서버

Docker Commit & Build

진진Yang 2022. 2. 5. 16:27
반응형

도커 Commit & Build

 

도커 커밋은 실행 중인 컨테이너를 백업하는 용도로 많이 사용되며 도커 빌드는 Dockerfile을 기준으로 새로운 이미지를 생성할때 많이 사용된다. 

 

 

도커 Commit

 

도커허브를 통해 이미지를 다운받은 다음 run을 통해 실행하면 컨테이너가 실행된다 이때 컨테이너간의 공간이 독립적이기 때문에 run 명령어로 여러 컨테이너를 실행시킬 수 있다. 

 

이후 개발자가 컨테이너에 작업을 하면 오직 해당 컨테이너에만 수정한 로직이 반영되기 이를 커밋을 통해 이미지로 만들고 싶은 것이다. 

그럼 그 이미지를 run하여 여러 컨테이너로 실행할 수도 있고 push를 통해 도커허브와 같은 레지스트리에 올려 여러 사용자가 함께 사용할 수 있게 할 수도 있다.

 

이제 ubuntu를 다운받아 실행시킨 후 그 컨테이너에 git을 설치해서 이미지화 할 것이다.

이후 각각 프로젝트에 맞춰 php, python, nodejs 개발 도구를 설치해서 개발 환경을 맞춘 컨테이너를 가고자 한다.

$ docker pull ubuntu:20.04 -- 우분투 이미지 다운로드
$ docker images -- 우분투 이미지가 다운로드 받아졌는지 확인
$ docker run -it --name my-ubuntu ubuntu bash -- -it 옵션을 통해 이미지가 실행되면서 바로 해당 컨테이너의 쉘 실행, --name 옵션을 통해 우분투 컨테이너 실행 네임 설정
(docker ps -- 컨테이너 실행 여부 확인)
$ apt update && apt install git -- 우분투 컨네이터에 git을 apt를 통해 설치 (apt 업데이트 반드시 필요)
(설치한 git은 오직 실행한 컨테이너 안에만 존재하고 host와 다른 컨테이너에는 존재하지 않음)
$ exit -- 실행한 컨테이너의 bash 탈출
$ docker commit my-ubuntu egoing:ubuntu-git -- commit 명령어로 my-ubuntu 컨테이너를 이미지화 시킴 이때 egoing라는 레파지토리에 ubuntu-git 태그로 이미지 생성
$ docker images -- 생성된 이미지 확인
(egoing 레파지토리에 ubuntu-git이라는 태그로 이미지가 생성됨을 확인할 수 있음)
------------
--이후 ubuntu-git 이미지를 run하여 php, python, nodejs를 설치한 컨테이너를 생성해보자 ~ !!

위와 같은 방법으로 컨테이너에 직접 들어가서 환경을 구성할 경우 다른 사용자는 해당 컨테이너가 어떻게 구성되어있고 어떻게 만들어졌는지 확인할 수가 없다.

 

그러므로 더 좋은 방법으로 Dockerfile이라는 약속된 파일명의 파일을 만들어서 컨테이너를 구성할 수 있다.

FROM ubuntu:20.04
<!-- RUN 명령어가 실행될때마다 레이어가 발생함으로 && 연산자를 통해 두개의 명령을 같이 실행하도록 하는걸 권장 -->
RUN apt upate && apt install -y git (-y 옵션으로 설치여부를 묻는 질문에 Y로 skip)

위와 같이 Dockerfile을 작성한 후 docker build -t egoing:ubuntu-git2 .(Dockerfile이 저장되어있는 디렉토리 경로 기재) 로 도커 명령어를 실행하면 egoing 레파지토리에 ubuntu-git2라는 이미지가 생성되어 있을 것이다. 

 

이 방법은 Dockerfile을 기반으로 이미지가 생성됨으로 해당 이미지가 어떻게 만들어졌는지를 한번에 파악할 수 있다.

 

응용버전 

우분투에 파이썬을 선택하고 host의 index.html 파일을 복사한 뒤 파이썬의 내장 웹서버를 실행하는 Dockfile을 만들어보자 

FROM ubuntu:20.04
<!-- RUN 명령어가 실행될때마다 레이어가 발생함으로 && 연산자를 통해 두개의 명령을 같이 실행하도록 하는걸 권장 -->
RUN apt upate && apt install -y python3 (-y 옵션으로 설치여부를 묻는 질문에 Y로 skip)
<!-- WORKDIR 명령어는 해당 폴더가 없는 경우 폴더 생성을 하고 cd 명령어로 해당 폴더로 이동하도록 함 -->
<!-- 이후 RUN 명령어로 명령할 경우 /var/www/html 폴더에서 실행됨 -->
WORKDIR /var/www/html
<!-- COPY 명령어를 통해 호스트에 있는 index.html 파일을 /var/www/html 폴더에 복사함 -->
COPY ["index.html","."]
<!-- CMD 명령어를 통해 컨테이너에 명령어를 실행 시킬 수 있음 대괄호에 실행할 명령어와 콤마를 통해 옵션들을 넣을 수 있음 -->
<!-- -u 옵션은 현재 상태랑 로그가 화면에 출력, -m 옵션을 통해 http.server 모듈 실행 -->
CMD ["python3","-u","-m","http.server"]

Dockerfile 실행은 

docker build -t web-server-build;

docker rm --force web-server;

docker run -p 8888:8000 --name web-server web-server-build;

 

(RUN과 CMD의 차이는 RUN은 빌드가 실행될 때의 명령어, CMD는 컨테이너가 실행될 때의 명령어이다.)

 

참고동영상

https://www.youtube.com/watch?v=0kQC19w0gTI

반응형