관리 메뉴

솜씨좋은장씨

[Docker] docker commit 명령어 사용하는 방법! 본문

Programming/Docker

[Docker] docker commit 명령어 사용하는 방법!

솜씨좋은장씨 2022. 1. 28. 22:28
728x90
반응형

서버에 올라가있는 도커 컨테이너 이미지 속 라이브러리를 업데이트를 해야할 때 업데이트를 하는 방법은

 

1. 업데이트 된 버전으로 다시 설치하고 도커 이미지를 다시 말아서 다시 올리기

2. docker exec -it [컨테이너명] /bin/bash 또는 docker exec -it [컨테이너명] /bin/sh 로 도커 컨테이너에 접속한 뒤

     해당 라이브러리만 지웠다가 다시 설치하고 나온 뒤에 docker restart [컨테이너명] 해주기

 

위와 같이 2가지 방법이 있습니다.

 

1번의 경우에는 서버를 내렸다가 올려도 변경한 버전이 바뀌지 않고 계속 유지가 되지만

2번의 경우에는 별도의 작업을 진행해주지 않으면 서버가 내려갔다가 올라갔을때

처음에 이미지를 생성할 때 설치했던 버전으로 다시 돌아가서 서버가 내려갔다가 올라올 때 마다

다시 업데이트를 해주어야하는 번거로움이 있습니다.

 

2번의 방법에서 서버를 재부팅해도 컨테이너에서 수정했던 사항을 그대로 유지하도록 하는 방법에 대해서 공유합니다.

👨🏻‍💻 컨테이너 접속하고 작업하기

$ docker exec -it [컨테이너명] /bin/bash

2022.01.17 - [docker] - [Docker] OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown 해결 방법!

위와 같은 에러 발생 시에는 아래의 명령어 사용

$ docker exec -it [컨테이너명] /bin/sh

위와 같은 방법으로 컨테이너에 접속하여 필요한 작업을 진행합니다.

* 필요한 작업? - 라이브러리 버전 바꾸기, 이미지 내부에 있는 코드 수정하기 등등

 

작업이 끝나면 

$ exit

exit 명령어로 컨테이너에서 나옵니다.

👨🏻‍💻 조금 전 변경한 사항으로 새로운 이미지 만들기 ( docker commit )

조금 전에 도커 컨테이너에 접속하여 수정한 사항을 반영한 새로운 도커 이미지를 만드는 작업입니다.

$ docker commit [컨테이너명] [원하는 이미지명:태그]

여기에는 docker 명령어 중에서 docker commit 명령어를 활용합니다.

 

내가 조금 전 접속해서 수정 작업을 한 컨테이너명을 docker commit 다음에 넣어주고

 

그 다음에는 새로 만드는 이미지의 이름과 태그를 적어주면 됩니다.

 

만약

내가 접속해서 수정 작업을 진행한 컨테이너명 -> qas-api_consumer 

새로 만들기를 원하는 이미지명 -> qas-api

새로 만드는 이미지에 붙이고 싶은 태그 -> 0.04

위와 같다고 한다면

$ docker commit qas-api_consumer qas-api:0.04

위와 같이 실행해주면 됩니다.

 

잠시 기다렸다가 실행이 완료 되었을 때

$ docker images

위의 명령어로 이미지 목록을 확인하여 내가 방금 생성한 이미지가 잘 존재하는지 확인해봅니다.

REPOSITORY    TAG          IMAGE ID       CREATED         SIZE
qas-api       0.04         698558b0ca05   22 hours ago    1.21GB
spell_check   nl42-0.04    4b6507466d88   4 days ago      1.21GB

위와 같이 목록에 잘 보인다고 하면 잘 생성된 것 입니다.

👨🏻‍💻 docker-compose 파일에서 이미지 이름 수정하기

마지막으로 docker-compose에서 바뀐 이미지를 실행할 수 있도록 이미지 명을 수정해주어야합니다.

version: '3'

services:
  app:
    image: qas-api:0.03
    container_name: qas-api_consumer
    ports:
    - "14241:14241"
    network_mode: host
------------------------------------ 이하 생략 ------------------------------------

기존에 위와 같이 qas-api:0.03 으로 이미지 명이 되어있었다면 

image: qas-api:0.03 -> image: qas-api:0.04

이를 내가 새로 만든 이미지 명으로 바꾸어 줍니다.

version: '3'

services:
  app:
    image: qas-api:0.04
    container_name: qas-api_consumer
    ports:
    - "14241:14241"
    network_mode: host
------------------------------------ 이하 생략 ------------------------------------

위와 같이 변경한 이후에

$ docker-compose -f docker-compose down
$ docker-compose -f docker-compose up -d

위의 명령어로 컨테이너를 내렸다가 올려주면 됩니다.

 

이렇게 하면 

2. docker exec -it [컨테이너명] /bin/bash 또는 docker exec -it [컨테이너명] /bin/sh 로 도커 컨테이너에 접속한 뒤

     해당 라이브러리만 지웠다가 다시 설치하고 나온 뒤에 docker restart [컨테이너명] 해주기

 

이 방법을 사용하더라도 서버가 재부팅 되었을 때 내가 컨테이너에 들어가서 바꾸었던 내용이 그대로 유지됩니다.

 

읽어주셔서 감사합니다.

Comments