Docker - Docker image 만들기 (commit 명령어 사용)
이전 포스팅에서 docker의 생성과 실행을 다뤄봤다면, 직접 docker image를 만들어보자. 이번 포스팅에서는 commit 명령어를 사용해서 docker image를 만들 것이다
Docker의 동작 순서 및 방법
1. docker hub에서 이미지를 pull 받아서 내 컴퓨터에 다운로드한다.
2. 다운로드한 image를 run 명령어로 실행한다.
3. 이때 매번 run 시키면 각각 독립적인 container가 생성된다.
4. 각 컨테이너 안에서 수정사항들이 생기면 각각의 컨테이너 안에서만 저장이 된다. image에는 영향을 주지 않는다.
5. 내가 수정한 container에 commit 명령어를 내리면 그 컨테이너가 새로운 이미지가 된다.
6. 내가 새로 만든 image를 기반으로 다시 run 시키면 새로운 컨테이너가 생성된다.
7. 이렇게 내가 새로 만든 image를 push 해서 docker hub와 같은 레지스트리에 업로드하면 전 세계 누구나 내가 만든 이미지를 다운로드할 수 있다.
가상 시나리오
1. ubuntu 이미지를 다운로드하여서 run 시키고 생성된 container 이용해서 잘 사용하다가 형상관리를 하고 싶을 때 설치된 git 이 없음
2. 이때 프로젝트에 따라 어디서는 PHP, 어디서는 Python, 다른데선 Nodejs가 필요할 상황 발생
3. 이럴 때 현재 container에 git을 설치하고 git이 설치된 container를 commit 해서 새로운 image 만들기
- 이 이미지는 ubuntu 위에 git이 설치된 이미지
5. 이렇게 생성된 이미지를 run 해서 container를 만들고 각각 필요한 걸 설치
6. 결론적으로, git을 공통적으로 갖고 있는 image에 PHP/python 등 각각의 개발환경에 맞는 걸 설치해서 좋은 도구를 장만할 수 있다
실습
1. ubuntu image 설치
docker pull ubuntu
2. container 설치/실행하자마자(-it) 터미널에 명령어 실행(bash)하고 싶음
- name은 my-ubuntu
docker run -it --name my-ubuntu ubuntu bash
3. container 안에 git 설치
- 이때 설치된 git은 해당 my-ubuntu container에만 설치됨 (각각의 컨테이너는 독립적)
# apt 최신상태로 업데이트
apt update;
# git 설치
apt install git
4. 이 container를 기반으로 파생된 image를 생성하고 싶다
- my-ubuntu : 해당 컨테이너를 기반으로 image를 생성한다
- egoing: Repository
- ubuntu-git: 태그 명
docker commit my-ubuntu egoing:ubuntu-git
5. image 생성 확인
docker images
6. container를 기반으로 image 생성
# 1번 terminal
docker run -it --name nodejs egoing:ubuntu-git bash
apt update && apt install nodejs
nodejs
# 2번 terminal
docker run -it --name python egoing:ubuntu-git bash
apt update && apt install python
python
Docker가 동작하는 원리가 궁금하면 참고하기 좋은 블로그: https://bit.ly/3h88wLK
출처: https://youtu.be/RMNOQXs-f68?si=Hfp51IWJ4XmQonUy
'Docker' 카테고리의 다른 글
[Docker] docker run httpd 명령어 쳤을때 AH00558 경고 나올때 (0) | 2023.10.22 |
---|---|
[Docker] Docker의 이해 - Docker hub로 이미지 공유하기 (push) (2) | 2023.10.22 |
[Docker] Docker의 이해 - Docker image 만들기 (Dockerfile & build) (2) | 2023.10.21 |
[Docker] Docker의 이해 - Docker Compose (1) | 2023.10.21 |
[Docker] Docker의 이해 - CLI 명령어 (2) | 2023.10.20 |