티스토리 뷰
이번 포스팅에서는 도커 이미지 스냅샷 생성 과정에 대해 살펴보겠습니다.
지난 시간까지 도커 폐쇄망 구축 및 도커 내부 저장소 설치 과정 및 이미지 백업 / 롤백 과정에 대해 살펴보았습니다.
해당 포스팅은 아래를 참고하시기 바랍니다.
[Spring Boot] Spring Boot Structure
기동 중인 도커 컨테이너에 파일 복사하기
1) Docker Container 기동 및 Hi.html 파일 복사
지난 시간에 Apache를 이용한 Docker 이미지를 생성하고 Hello.html 파일을 적용하는 과정에 대해 살펴보았습니다.
이번에는 생성 된 이미지를 기동한 상태로 사용 중에 변경 사항이 발생되어 이미지에 추가로 파일을 적용하거나, 설정을 변경하거나, 소프트웨어를 설치하거나 등의 이유로 내부 컨테이너로 파일을 복사하여 운영하고자 할 경우 어떻게 해야 하는지 살펴보는 시간이 될 것입니다.
a) docker run & docker ps -a 확인
[root@nrson ~]# docker run -dit --name my-running-app -p 8090:80 192.168.56.107:9090/privatedockereg/my-apache2:latest
d82ff474b64ca3112fff000c45c5c3680dc35978695bb6011701d4e62243b313
[root@nrson ~]# docker exec -it ^C
[root@nrson ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d82ff474b64c 192.168.56.107:9090/privatedockereg/my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:8090->80/tcp my-running-app
[root@nrson ~]#
위와 같이 docker run을 이용하여 Docker Container를 기동합니다. docker ps 명령어로 도커 컨테이너 기동상태를 확인합니다.
b) docker cp
[root@nrson public-html]# cat Hi.html
Hi!
[root@nrson public-html]# docker cp Hi.html my-running-app:/usr/local/apache2/htdocs/
[root@nrson public-html]#
다음으로 Hi.html 파일을 작성하여 docker cp를 이용한 Docker Container 특정 위치로 파일을 복사합니다.
c) docker exec (docker container 내부 접속)
[root@nrson ~]# docker exec -it d82ff474b64c /bin/bash
root@d82ff474b64c:/usr/local/apache2# cd htdocs/
root@d82ff474b64c:/usr/local/apache2/htdocs# ls -la
total 8
drwxr-xr-x 1 root root 24 Jul 17 05:58 .
drwxr-xr-x 1 www-data www-data 18 Jul 10 15:22 ..
-rw-r--r-- 1 root root 7 Jul 17 04:26 Hello.html
-rw-r--r-- 1 root src 45 Jun 11 2007 index.html
root@d82ff474b64c:/usr/local/apache2/htdocs# ls -la
total 12
drwxr-xr-x 1 root root 21 Jul 19 00:44 .
drwxr-xr-x 1 www-data www-data 32 Jul 10 15:22 ..
-rw-r--r-- 1 root root 7 Jul 17 04:26 Hello.html
-rw-r--r-- 1 root root 4 Jul 19 00:44 Hi.html
-rw-r--r-- 1 root src 45 Jun 11 2007 index.html
root@d82ff474b64c:/usr/local/apache2/htdocs#
복사가 완료되면 다음과 같이 docker exec로 도커 컨테이너에 접속을 수행합니다.
복사 명령어인 docker cp를 사용하기 전에는 해당 경로에 Hi.html 파일이 존재하지 않았고, 명령어 수행 후 Hi.html 파일이 /usr/local/apache2/htdocs 하위에 복사된 것을 확인할 수 있습니다.
복사가 완료되었으면, 직접 화면을 호출해 보도록 하겠습니다.
위와 같이 Hi.html이 정상적으로 호출되는 것을 볼 수 있습니다.
d) docker container 빠져나오기
위의 경우 애플리케이션을 적용하기 위한 방안으로 정적 파일이라 별다른 작업 없이 복사가 완료되었는지만 확인한 후 Docker Container를 빠져 나옵니다. 이때 유의해야 할 점은 exit나 Ctrl + C 등으로 빠져나오게 되면 Apache Process가 다운되며, Docker Container Process가 종료되게 되므로 다음과 같이 수행하여 빠져나와야 합니다.
Ctrl + p + q
도커 컨테이너 스냅샷 생성
현재 기동 중인 도커 컨테이너는 docker commit 명령어로 스냅샷을 생성할 수 있습니다.
명령어 옵션은 다음과 같습니다.
docker commit -p CONTAINER_ID IMAGE
→
[root@nrson ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d82ff474b64c 192.168.56.107:9090/privatedockereg/my-apache2:latest "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:8090->80/tcp my-running-app
[root@nrson ~]#
위와 같이 docker ps -a로 현재 기동 중인 상태의 Docker Container를 확인하고 CONTAINER_ID와 IMAGE를 아래와 같이 매칭 시켜 스냅샷을 생성합니다.
docker commit -p d82ff474b64c 192.168.56.107:9090/privatedockereg/my-apache2-hi:latest
[root@nrson ~]# docker commit -p d82ff474b64c 192.168.56.107:9090/privatedockereg/my-apache2-hi:latest
sha256:10f4cecc2acbf6e1592ac6aa6738e78df4c4b1fe256bea522c235ba917c70003
[root@nrson ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.56.107:9090/privatedockereg/my-apache2-hi latest 10f4cecc2acb 17 seconds ago 154 MB
192.168.56.107:9090/privatedockereg/my-apache2 latest d7376096de75 42 hours ago 154 MB
192.168.56.107:9090/privatedockereg/httpd latest ee39f68eb241 5 days ago 154 MB
docker.io/httpd latest ee39f68eb241 5 days ago 154 MB
[root@nrson ~]#
생성이 완료되었으며, docker images 명령어로 신규로 생성한 my-apache2-hi Local Reposiroty가 생성되었는지 확인합니다.
생성이 완료되었으면 아래와 같이 Docker Private Registry or Docker Public Registry에 해당 이미지를 push 합니다.
[root@nrson ~]# docker push 192.168.56.107:9090/privatedockereg/my-apache2-hi:latest
The push refers to a repository [192.168.56.107:9090/privatedockereg/my-apache2-hi]
b5ed9ff9622b: Pushed
cfb6da81464a: Layer already exists
635721fc6973: Layer already exists
bea448567d6c: Layer already exists
bfaa5f9c3b51: Layer already exists
9d542ac296cc: Layer already exists
d8a33133e477: Layer already exists
latest: digest: sha256:6a990e55564e5efae09bda7c5d84826cf81898335a58aa2ab0b12570ab2028f1 size: 1781
[root@nrson ~]#
도커의 경우 위와 같이 변경된 스냅샷만 변동이 발생하여 나머지 Layer는 그대로 유지되고 변동된 부분의 스냅샷만 Pushed 되는 상태로 Repository에 업로드 되게 됩니다.
마지막으로 Nexus3 Docker Private Registry에 접속하여 Push 상태를 확인해 보도록 하겠습니다.
이를 기반으로 전체적인 복사 및 스냅샷 과정은 다음과 같습니다.
이상으로 도커 컨테이너 스냅샷 생성 과정에 대한 포스팅을 마치겠습니다.
사실 이와 같은 작업은 사전 Dockerfile을 잘 작성하여 수행할 수 있으나, 사용 도중 부득이하게 변동이 이뤄날 경우 유지해야 하는 데이터가 있거나, 셋팅한 정보를 잃고 싶지 않거나 등등 도커 컨테이너 자체를 스냅샷 뜨고 싶을때 유용하게 사용할 수 있을 듯 합니다.
'③ 클라우드 > ⓓ Docker' 카테고리의 다른 글
[Docker Registry] Docker Image를 활용한 Local Registry 구축 (4) | 2019.08.27 |
---|---|
[Docker Performance Monitoring] docker stats (0) | 2019.08.26 |
[Docker] 폐쇄망에 Docker 구축하기 (3) | 2019.05.21 |
[Docker] Docker Image 관리 가이드 (0) | 2018.10.26 |
[Docker Issue] 2. Dockerfile로 Image 생성 시 오류 (add failed stat /var/lib/docker/tmp/ no such file or directory) (0) | 2018.10.15 |
- Total
- Today
- Yesterday
- API Gateway
- 마이크로서비스 아키텍처
- k8s
- SWA
- TA
- aws
- Architecture
- git
- 마이크로서비스
- JEUS6
- JEUS7
- 쿠버네티스
- kubernetes
- wildfly
- nodejs
- Da
- openstack token issue
- 오픈스택
- Docker
- aa
- SA
- apache
- jeus
- openstack tenant
- OpenStack
- node.js
- MSA
- JBoss
- webtob
- 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |