이전 시간에 도커파일을 이용하여 이미지를 생성하는 방법에 대하여 알아보았습니다. 이번 시간에는 작업 중이던 컨테이너에서 컨테이너의 현재 상태와 파일 시스템 변경사항을 포함하는 이미지를 생성하는 방법인 'commit'에 대하여 기록하겠습니다.
도커파일을 이용한 이미지 생성은 아래에 링크를 작성해 두었습니다.
목차
commit 명령
예시
commit 명령
도커파일을 이용하여 이미지를 생성하는 경우 모든 상황에 대하여 기록하고 빌드 컨텍스트를 생성하는 등 많은 작업이 필요로 합니다. 또한 이미 많은 작업을 해 둔 컨테이너와 같은 상태의 이미지를 필요로 하는 경우 지금까지의 작업을 모두 기억하지 못할 수 있습니다. 이럴 때 'commit'을 이용하여 현재 컨테이너의 상태와 동일한 컨테이너를 생성할 수 있는 이미지를 생성할 수 있습니다. 이를 통하여 현재 컨테이너의 상태를 백업용으로 활용할 수 있습니다.
명령어
명령어는 아래와 같이 작성할 수 있습니다.
docker commit [옵션] [컨테이너 이름 또는 ID] [새 이미지 이름:태그]
주요 옵션
-a, --author : 이미지의 작성자를 지정합니다. 작성자 정보는 이미지 메타데이터에 포함되며 어떤 사람이 commit 한 것인지 식별하는 데 사용됩니다.
docker commit -a "rainbowbear" testcontainer testcommit:v1
-c, --change : 이미지를 빌드할 때 실행될 명령어를 입력합니다. 도커파일의 CMD와 같은 지시문을 작성합니다.
docker commit -c "CMD [./myapp]" testcontainer testcommit:v1
-m, --message : commit에 대한 설명 또는 메시지를 추가합니다. 작성자와 같이 메시지는 메타데이터에 포함됩니다.
docker commit -m "테스트용 이미지 생성" testcontainer testcommit:v1
예시
이미지를 생성하기 전에 가지고 있는 이미지부터 확인하였습니다.
현재 총 6개의 이미지를 가지고 있다는 것을 확인할 수 있었습니다.
컨테이너 생성
이미지를 생성하기 위하여 'commit'할 컨테이너를 먼저 생성하여야 합니다.
저는 'ubuntu20.04'를 이용하여 'testContainer'라는 이름을 가진 컨테이너를 생성하였습니다.
ubuntu 내에 'test'라는 폴더를 생성하고 'test.txt'라는 파일에 내용을 입력해 두었습니다.
commit 사용
컨테이너를 빠져나와 이미지를 생성하기 위하여 'commit'하였습니다. 저는 아래와 같은 명령어를 입력하였습니다.
docker commit -a "rainbowbear" -m "created by commit" testContainer test/testimage:1.0
이미지가 생성되면 위의 예시에서 볼 수 있듯 이미지 아이디를 보여줍니다. 'docker images'를 이용하여 이미지를 확인하면 생성된 것을 확인할 수 있습니다.
메타데이터 확인
'commit'을 할 때 입력한 옵션이 적용되었는지 확인하기 위하여 아래의 명령어를 통하여 메타데이터를 확인하였습니다.
docker inspect test/testimage:1.0
위의 명령어를 입력하면 많은 내용의 정보가 나옵니다. 그중 옵션으로 입력된 내용만 캡처하였습니다.
이미지로 컨테이너 생성하기
'commit'을 이용하여 생성한 이미지로 다시 컨테이너를 생성하여 동일한 상태를 가지는지 확인하도록 하겠습니다.
아래의 명령어를 이용하여 컨테이너를 생성하였습니다.
docker run -it --name checkContainer test/testimage:1.0
확인 결과 'test'폴더와 폴더 속의 'test.txt'가 올바른 내용으로 존재하는 것을 확인하였습니다.
이러한 방법으로 현재 작업 중인 컨테이너를 공유하여야 하거나 전달하여야 하는 경우 'commit'을 이용하여 이미지로 만들어 전달할 수 있고 특정 상황에서 백업을 위하여 이미지를 생성할 수 있습니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] 도커 컴포즈 활용하기 (YAML 작성) (0) | 2023.09.18 |
---|---|
[Docker] 도커파일과 이미지생성 (0) | 2023.09.16 |
[Docker] Docker 포트 설정과 브릿지 네트워크 생성, 연결 (0) | 2023.09.09 |
[Docker] Docker 볼륨 이해하기 (데이터 공유, 관련 명령) (0) | 2023.09.08 |
[Docker] Docker(도커) 시작하기 (설치, 기본 명령어, Docker desktop) (0) | 2023.09.08 |