생활코딩 Docker

Docker (4)commit, -it

finepiz 2022. 2. 3. 14:34

===

강의요약

어떤 컨테이너의 상태를 여러 목적으로 재활용하고 싶을 때 commit을 활용

docker commit 컨테이너의이름 설정될이미지의이름(사용자/이미지이름:태그)

docker commit my-ubuntu egoing/ubuntu:ubuntu-git

->이미지가 만들어져

 

===

https://youtu.be/RMNOQXs-f68

 

===

도커를 사용하다보면 남의 이미지를 사용해서 나의 컨테이너를 만드는 방법을 아셨다면 나의 이미지도 만들어보고 싶다는 생각이 들지 않나요? commit 명령을 이용하면 내가 사용중인 컨테이너를 이미지로 만들 수 있습니다. 그렇게하면 나의 이미지로 컨테이너들을 만들 수 있고, docker hub와 같은 레지스트리로 push할수도 있습니다.

 

컨테이너를 기반으로 image를 만드는 commit

 

===

도커 동작 살펴보기

도커허브에서 필요한 이미지를 다운 받음 : pull

 

image가 내 컴퓨터에 저장, 이미지가 바로 실행되진 않고 container를 만듦 : run

 

container는 image가 실행된것, container안에서 파일을 수정한 것과 같은 활동을 하면 수정된 파일은 container안에만 저장이 된다. = image에는 영향을 미치지 않는다

 

또 run명령을 할 때마다 container가 새로 생성이 되는데 각각의 container는 다른 container와 완벽하게 독립돼 있기 때문에 여러분이 어떤 작업을 하면 그 container안에서만 일어난다는게 도커가 우리에게 제공하는 가장 중요한 혜택

 

이때쯤 나도 나의 이미지를 만들어서 그 이미지를 배포하고 싶다 어떻게?

 

내가 수정한 container에 commit명령을 내리면 그 container가 새로운 image가 된다

->이 image를 기반으로 run하면 container가 만들어지고, 여러 컨테이너를 만들어서 각자의 목적에 따라 사용할 수 있다

->그렇게 만든 image를 push해서 docker hub와 같은 registry에 업로드하시면 전세계의 누구나 여러분이 만든 이미지를 다운받을 수 있고 또는 팀원들만 받게 할 수도

 

===

시나리오 점검

 

ubuntu가 필요해서 pull로 image를 다운받았다

실행하기 위해 run했다, container가 만들어졌다

 

그리고 내가 할 프로젝트 모두에는 git이 필요하다 - 이럴거면 공통으로 되게 하는게 좋겠지?

그래서 git을 설치해서 image를 만듦, 그럼 이 image는 ubuntu위에 git이 설치돼 있는 image

 

내가 하고 있는 프로젝트에 따라 어떤 프로젝트는 PHP가 필요하고 어떤건 Python, 어떤건 Nodejs가 필요할수도

그럼 ubuntu+git이 설치돼있는 image로 container 3개를 만들어서 각각 PHP, Python, Nodejs를 설치함 - 이번엔 또 각각

이렇게 활용

git을 공통적으로 갖고 있는 image에 PHP, Python, Nodejs를 각각 깔아서 각각의 개발환경에 맞는 좋은 도구를 장만했다

▽이게 최선이구나? 어떤 컨테이너의 상태를 여러 목적으로 재활용하고 싶을 때 commit을 활용

 

===

docker pull ubuntu

: 받고

docker images

: 확인

docker run ubuntu

: 컨테이너만드는데 

docker run -it --name my-ubuntu ubuntu bash

*run 배울 때 docker run --name 만들컨테이너이름 이미지이름 여기에컨테이너안에서실행하고싶은명령어

: 이름주고, 컨테이너가 실행되자마자 터미널에서 명령을 실행하고 싶다, IMAGE의 이름 뒤에 컨테이너 안에서 실행하고 싶은 명령어를 주는것인데 bash는 명령을 실행하고 싶은것, -it는 지속하기((3)에서는 exec였는데 여긴 run이네)

 

이러면 컨테이너가 실행이 됐고 내가 컨테이너 안으로 들어간 상태

 + git이 안깔려있어서 ubuntu에서는 소프트웨어를 깔 때 apt update를 해서 apt라는것을 최신상태로 갱신해줘야해

apt update;

apt install git

지금 설치한 git은 컨테이너에만 설치됨

이때 git이 설치된 컨테이너를 여러목적으로 재활용하고 싶다면,

이 컨테이너를 기반으로 파생된 컨테이너를 만들고 싶다면

 

(다른 창에 가서 하는 중, 저 그림 위 아래 다른 커맨드창이다)

docker ps

: 실행되고 있는 컨테이너 목록을 보고 컨테이너를 새로운 이미지로 만든다

docker commit my-ubuntu egoing:ubuntu-git

: docker commit 컨테이너의이름 설정될이미지의이름(사용자/이미지이름:태그)

: egoing이라는 REPOSITORY에 ubuntu-git이라는 태그의 이미지가 생겼다고 표현

▽좀 간략하게 쓰셨다. egoing/ubuntu-git:1.0 자세하겐 이렇게 될 것

▽이미지가 아니고 컨테이너 이름이니까 그 컨테이너의 상태가 저장이 되겠구나

 

docker images

egoing이라는 REPOSITORY에 ubuntu-git이라는 TAG의 image가 생겼다

 

===

docker run -it --name nodejs egoing:ubuntu-git bash

: egoing:ubuntu-git 이미지를 기반으로 nodejs라는 이름의 컨테이너를 만들것

apt update && apt install nodejs

: 물어보는것에서 y누르고

 

그럼 컨테이너에 nodejs가 잘 설치된 상태

 

===

단점 : 이 이미지가 도대체 어떻게 만들어졌고, 그 안에 뭐가 있는지 알 수가 없다

체계적으로 이미지를 만들때는 Dockerfile이라는 약속된 이름의 파일을 만들고 그 내용에 씀. 명확하게 보인다.