티스토리 뷰

728x90
반응형

이번 포스팅에서는 도커 이미지 백업 및 롤백 과정에 대해 살펴보겠습니다.

지난 시간까지 도커 폐쇄망 구축 및 도커 내부 저장소 설치 과정에 대해 살펴보았습니다.

지난 포스팅은 다음을 참고하시기 바랍니다.

 

[Docker] 폐쇄망에 Docker 구축하기

[Spring Boot] git clone을 활용한 Spring Boot 프로젝트 repository 이관

[Spring Boot] gitlab & Eclipse 연동을 통한 Spring Boot 개발 프로젝트 구축

[Spring Boot] Spring Boot Maven Repo 구축(Nexus2 OSS 내부 저장소)

[Spring Boot] Spring Boot Maven Repo 연동(Nexus2 OSS 내부 저장소)

[Spring Boot] Spring Boot Structure

[Spring Boot] Nexus3 도커 레지스트리

도커 빌드

먼저 도커 이미지를 빌드해 보도록 하겠습니다.

지난 시간에 연결한 Nexus3 도커 레지스트리의 httpd 서버를 이용하여 Hello.html을 호출하는 과정을 먼저 살펴보겠습니다.

1. 도커 빌드

- Dockerfile 작성

[root@nrson httpd]# cat Dockerfile  
FROM httpd:latest  
COPY ./public-html/ /usr/local/apache2/htdocs  
[root@nrson httpd]#

도커 파일은 위와 같이 간단하게 작성하였습니다.

httpd:latest를 베이스 이미지로 하며, 현 public-html 디렉토리 하위를 apache default DocumentRoot인 /usr/local/apache2/htdocs로 복사하여 기동하는 과정입니다.

- Docker 빌드

[root@nrson httpd]# ls  
Dockerfile  my-apache2.tar  public-html  
[root@nrson httpd]# docker build -t 192.168.56.107:9090/privatedockereg/my-apache2:latest .  
Sending build context to Docker daemon 158.9 MB  
Step 1/2 : FROM httpd:latest  
 ---> ee39f68eb241  
Step 2/2 : COPY ./public-html/ /usr/local/apache2/htdocs  
 ---> d7376096de75  
Removing intermediate container a953f0af5e29  
Successfully built d7376096de75  
[root@nrson httpd]# 

 위와 같은 구성으로 docker build를 수행합니다. -t 태그 옵션으로 도커 레지스트리 경로를 지정해 주도록 합니다.

[root@nrson httpd]# docker images  
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE  
192.168.56.107:9090/privatedockereg/my-apache2   latest              d7376096de75        43 seconds ago      154 MB  
192.168.56.107:9090/privatedockereg/httpd        latest              ee39f68eb241        4 days ago          154 MB  
docker.io/httpd                                 latest              ee39f68eb241        4 days ago          154 MB  
[root@nrson httpd]#  

빌드가 정상적으로 완료되면 다음과 같이 docker images로 docker image를 확인할 수 있습니다.

2. custom apache httpd 기동 및 테스트  

다음으로 docker 기동 및 테스트 과정입니다.

[root@nrson httpd]# docker run -dit --name my-running-app -p 8090:80 192.168.56.107:9090/privatedockereg/my-apache2:latest  
d8411bb616f2b94aa044cf2d0f8c9f06c2d7434ef55d877dd6f0f7c6c999ef23  
[root@nrson httpd]# docker ps -a  
CONTAINER ID        IMAGE                                                  COMMAND              CREATED             STATUS              PORTS                  NAMES  
d8411bb616f2        192.168.56.107:9090/privatedockereg/my-apache2:latest   "httpd-foreground"   26 seconds ago      Up 18 seconds       0.0.0.0:8090->80/tcp   my-running-app  
[root@nrson httpd]#  

위와 같이 docker run 명령어로 해당 docker를 기동합니다.

정상적으로 기동이 완료되었는지 docker ps -a로 확인 후 아래와 같이 화면을 호출해 보도록 합니다.

위와 같이 public-html/Hello.html이 정상적으로 호출되면 Dockerfile을 사용한 빌드 및 기동이 완료된 것이라 판단할 수 있습니다.

3. custom apahce httpd push  

다음으로 앞서 살펴봤던 Nexus3 도커 레지슽트리 포스팅과 같이 해당 이미지를 push해 보도록 하겠습니다.

[root@nrson httpd]# docker images  
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE  
192.168.56.107:9090/privatedockereg/my-apache2   latest              d7376096de75        12 minutes ago      154 MB  
192.168.56.107:9090/privatedockereg/httpd        latest              ee39f68eb241        4 days ago          154 MB  
docker.io/httpd                                 latest              ee39f68eb241        4 days ago          154 MB  
[root@nrson httpd]# docker push 192.168.56.107:9090/privatedockereg/my-apache2:latest  
The push refers to a repository [192.168.56.107:9090/privatedockereg/my-apache2]  
cfb6da81464a: Pushed  
635721fc6973: Layer already exists  
bea448567d6c: Layer already exists  
bfaa5f9c3b51: Layer already exists  
9d542ac296cc: Layer already exists  
d8a33133e477: Layer already exists  
latest: digest: sha256:8b31bc5d617a1fe04a1711d816d8f083e73be76bd38eb0bd2838f00a799737db size: 1574  
[root@nrson httpd]#  

정상적으로 Push가 완료되면

다음과 같이 my-apache2 이미지도 업로드 된것을 확인할 수 있습니다.

Docker images backup

[root@nrson httpd]# docker save -o my-apache2.tar 192.168.56.107:9090/privatedockereg/my-apache2:latest  
[root@nrson httpd]# ls -la  
total 155216  
drwxr-xr-x 3 root root        65 Jul 17 02:13 .  
drwxr-xr-x 3 root root        19 Jul 17 00:24 ..  
-rw-r--r-- 1 root root        64 Jul 17 00:28 Dockerfile  
-rw------- 1 root root 158937088 Jul 17 02:13 my-apache2.tar  
drwxr-xr-x 2 root root        24 Jul 17 00:26 public-html  
[root@nrson httpd]# date  
Wed Jul 17 02:13:39 EDT 2019  
[root@nrson httpd]# docker ps -a  
CONTAINER ID        IMAGE                                                  COMMAND              CREATED             STATUS              PORTS                  NAMES  
bd92af630249        192.168.56.107:9090/privatedockereg/my-apache2:latest   "httpd-foreground"   8 minutes ago       Up 8 minutes        0.0.0.0:8090->80/tcp   my-running-app  
[root@nrson httpd]# docker stop bd92af630249;docker rm bd92af630249  
bd92af630249  
bd92af630249  
[root@nrson httpd]# docker images  
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE  
192.168.56.107:9090/privatedockereg/my-apache2   latest              d7376096de75        15 minutes ago      154 MB  
192.168.56.107:9090/privatedockereg/httpd        latest              ee39f68eb241        4 days ago          154 MB  
docker.io/httpd                                 latest              ee39f68eb241        4 days ago          154 MB  
[root@nrson httpd]# docker rmi 192.168.56.107:9090/privatedockereg/my-apache2:latest  
Untagged: 192.168.56.107:9090/privatedockereg/my-apache2:latest  
Untagged: 192.168.56.107:9090/privatedockereg/my-apache2@sha256:8b31bc5d617a1fe04a1711d816d8f083e73be76bd38eb0bd2838f00a799737db  
Deleted: sha256:d7376096de75a021b08eaab9410fb9764874ab529e178d1a0a7d3a3504048d26  
Deleted: sha256:970c3b3bfb83738fc7ce6ac40b1c51119db0e1e140e441e5ed4dd10d9d5ec755  
[root@nrson httpd]# docker ps -a  
doCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES  
[root@nrson httpd]# docker images  
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE  
192.168.56.107:9090/privatedockereg/httpd   latest              ee39f68eb241        4 days ago          154 MB  
docker.io/httpd                            latest              ee39f68eb241        4 days ago          154 MB  
[root@nrson httpd]#  

Docker 이미지를 백업 받는 방법은 간단합니다. docker save 명령어를 통해 다운 받을 수 있으며 테스트를 위해 백업 이후 기존에 기동 중이던 docker process를 stop하고 이미지를 삭제하도록 합니다.

Docker images rollback 

다음은 백업 받은 파일을 기반으로 도커 이미지를 롤백하는 과정입니다.

[root@nrson httpd]# docker load < my-apache2.tar  
cfb6da81464a: Loading layer [==================================================>] 4.096 kB/4.096 kB  
Loaded image: 192.168.56.107:9090/privatedockereg/my-apache2:latest  
[root@nrson httpd]# docker images  
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE  
192.168.56.107:9090/privatedockereg/my-apache2   latest              d7376096de75        18 minutes ago      154 MB  
docker.io/httpd                                 latest              ee39f68eb241        4 days ago          154 MB  
192.168.56.107:9090/privatedockereg/httpd        latest              ee39f68eb241        4 days ago          154 MB  
[root@nrson httpd]# 

롤백 과정역시 docker load라는 명령으로 손쉽게 진행할 수 있습니다.

로드가 완료되면 docker images로 복원된 이미지를 확인할 수 있습니다.

 

이번 포스팅에서는 도커 이미지를 빌드하고 커스텀 이미지를 백업 받고 롤백하는 과정에 대해 살펴보았습니다.

728x90
반응형