이번포스팅에서는 이미지에 대한 기본 내용을 다루겠습니다.
시작하기전에, 모든 도커 이미지와 컨테이너를 삭제하겠습니다. 헷갈릴수있으니까요!
먼저 컨테이너 전체 삭제!
[root@docker-master /]# docker rm -f $(docker ps -aq)
2bf8c98f110d
그다음 이미지도 모두 삭제하겠습니다!
[root@docker-master /]# docker rmi -f $(docker images -q)
Untagged: registry:2
Untagged: registry@sha256:8be26f81ffea54106bae012c6f349df70f4d5e7e2ec01b143c46e2c03b9e551d
Deleted: sha256:2d4f4b5309b1e41b4f83ae59b44df6d673ef44433c734b14c1c103ebca82c116
Deleted: sha256:36a83751a1193f6edf65d21f62fe7988394d562d71904ee20cb4aa72f14148bd
Deleted: sha256:c2588dfa0db64031c1c0683ed59a00ad0943889efb819bffd0455ae9b232016c
Deleted: sha256:6eb97e254200a2d82064e63977f84626e376256fe4d4c033a8b7817b2950071d
Deleted: sha256:7c6634cc9948baef3600559e298228a962bd9499cbbaf840d4d4889f5abaca2a
Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
이번 실습에서는 Image에 대한 내용을 다룰 예정입니다.
본격적으로 시작하기 전에 Docker Folw을 간략히 살펴볼게요 :)
1. Docker Image Pull : 이미지 다운로드
docker pull 명령어로 쉽게 도커 이미지를 외부 저장소에서 다운로드 합니다.
[root@docker-master /]# docker pull centos/httpd-24-centos7
Using default tag: latest
latest: Pulling from centos/httpd-24-centos7
75f829a71a1c: Pull complete
e2c4942f4189: Pull complete
f1498894b11c: Pull complete
da56c9694723: Pull complete
063ff8a1435c: Pull complete
09351523c1de: Pull complete
9a03c4ed0deb: Pull complete
17f560ff6bfd: Pull complete
Digest: sha256:df111e9031b838fa9b5c120b07cba0f23188a539e9be91e020b0a9f77d65ec9e
Status: Downloaded newer image for centos/httpd-24-centos7:latest
docker.io/centos/httpd-24-centos7:latest
이미지가 잘 저장되었는지 확인합니다.
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos/httpd-24-centos7 latest 24aec7b98d6b 3 days ago 344MB
2. Docker Image로 컨테이너 생성 및 확인
위에서 다운받은 이미지로 컨테이너를 실행시키겠습니다.
[root@docker-master /]# docker run --name httpd -d -p 8180:8080 centos/httpd-24-centos7
dc1351b75b8d9f63e0444f2a5e74f7f08f55011a593abd4108d24cad74419494
잘 실행중인지 확인합니다.
[root@docker-master /]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc1351b75b8d centos/httpd-24-centos7 "container-entrypoin…" 5 seconds ago Up 4 seconds 8443/tcp, 0.0.0.0:8180->8080/tcp httpd
3. 컨테이너를 이미지로 저장 : Docker Commit
commit 은 컨테이너를 이미지로 저장하는 명령어 입니다. :)
이번 단계에서는 현재 실행중인 컨테이너를 수정하고, commit 하여 새로운 버전의 컨테이너를 생성해보도록 하겠습니다.
자, 컨테이너 목록을 확인하고 위에서 실행한 컨테이너에 접속합니다.
[root@docker-master /]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc1351b75b8d centos/httpd-24-centos7 "container-entrypoin…" 4 minutes ago Up 4 minutes 8443/tcp, 0.0.0.0:8180->8080/tcp httpd
[root@docker-master /]# docker container exec -it httpd /bin/bash
index.html 파일을 생성합니다. :)
이제, 이 컨테이너는 This is Docker Test 라는 index.html을 반환하게 됩니다.
bash-4.2$ echo 'This is Docker Test' > /var/www/html/index.html
bash-4.2$ exit
exit
자, 이제 컨테이너를 중지하고, 커밋합니다.
* docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a = 작성자 지정
-m = 메시지 지정
[root@docker-master /]# docker container stop httpd
httpd
[root@docker-master /]# docker container commit -a 'mini' -m 'Add Index.html' httpd
sha256:d6422173cd696f5f2b3750cb7025d8962ea9a7ff493a55466b0058c1100884c4
이미지를 확인합니다. None 이라는 태그를 가진 이미지가 생성되었네요 :)
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d6422173cd69 6 seconds ago 344MB
centos/httpd-24-centos7 latest 24aec7b98d6b 3 days ago 344MB
4. Docker Image 태그
이미지에 태그를 달아야 합니다.
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> d6422173cd69 6 seconds ago 344MB
centos/httpd-24-centos7 latest 24aec7b98d6b 3 days ago 344MB
docker image tag 명령어를 통해 이미지에 태그를 달아줍니다 :)
* docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
이후에 이미지를 확인해보면, 태그가 정상적으로 설정된것을 볼 수 있습니다.
[root@docker-master /]# docker image tag 24aec7b98d6b 1mini2/myrepo:addIndex_v1
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1mini2/myrepo addIndex_v1 24aec7b98d6b 3 days ago 344MB
centos/httpd-24-centos7 latest 24aec7b98d6b 3 days ago 344MB
5. Docker registry에 Push/Pull 하기 (도커 허브 사용)
도커 허브에 접속하시고, 레포지토리를 생성합니다.
이 단계에서는 별도로 안내하지 않습니다 :)
docker login 명령어를 사용하여 도커 허브에 로그인 합니다.
[root@docker-master /]# docker login --username 1mini2
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
이제, 이 이미지를 도커 허브 레포지토리로 Push합니다.
[root@docker-master /]# docker image push 1mini2/myrepo:addIndex_v1
The push refers to repository [docker.io/1mini2/myrepo]
c6c197ea251d: Mounted from centos/httpd-24-centos7
be00ea727b88: Mounted from centos/httpd-24-centos7
4973b9e35e84: Mounted from centos/httpd-24-centos7
f4626fba958f: Mounted from centos/httpd-24-centos7
a317a6aa16e0: Mounted from centos/httpd-24-centos7
7da7d3716181: Mounted from centos/httpd-24-centos7
0b0618c6ced8: Mounted from centos/httpd-24-centos7
613be09ab3c0: Mounted from centos/httpd-24-centos7
도커 허브 접속 시 업로드된 이미지 확인 가능합니다.
이제 이 이미지를 다운로드 받아보겠습니다.
[root@docker-master /]# docker rmi -f $(docker images -q)
Untagged: 1mini2/myrepo:addIndex_v1
Untagged: 1mini2/myrepo@sha256:df111e9031b838fa9b5c120b07cba0f23188a539e9be91e020b0a9f77d65ec9e
Deleted: sha256:24aec7b98d6bc27d1a9af66958328cf4193c6f29b770b3005da1ae00baa13e61
도커 이미지 목록을 확인하겠습니다. 아무것도 없습니다.
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker pull 명령어를 사용하여 도커 허브에 업로드해두었던 이미지를 다운받습니다.
[root@docker-master /]# docker pull 1mini2/myrepo:addIndex_v1
addIndex_v1: Pulling from 1mini2/myrepo
75f829a71a1c: Already exists
e2c4942f4189: Already exists
f1498894b11c: Already exists
da56c9694723: Already exists
063ff8a1435c: Already exists
09351523c1de: Already exists
9a03c4ed0deb: Already exists
17f560ff6bfd: Already exists
Digest: sha256:df111e9031b838fa9b5c120b07cba0f23188a539e9be91e020b0a9f77d65ec9e
Status: Downloaded newer image for 1mini2/myrepo:addIndex_v1
docker.io/1mini2/myrepo:addIndex_v1
도커 이미지를 확인합니다.
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1mini2/myrepo addIndex_v1 24aec7b98d6b 3 days ago 344MB
6. Docker 이미지 저장(save) 및 사용 (load)
도커 컨테이너는 tar파일로 저장이 가능하며, 이렇게 tar로 저장하여 보관하고 다시 로드하여 사용할 수 있습니다.
헷갈리지 않게 먼저 디렉터리를 하나 만들고 그 안에서 작업하도록 하겠습니다.
[root@docker-master /]# mkdir /docker_images && cd docker_images/
도커 이미지 목록을 확인해봅니다.
[root@docker-master docker_images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1mini2/myrepo addIndex_v1 24aec7b98d6b 3 days ago 344MB
도커 이미지를 tar파일로 저장합니다.
* 명령어 : docker save [OPTIONS] IMAGE [IMAGE...]
[root@docker-master docker_images]# docker save -o myweb.tar 1mini2/myrepo:addIndex_v1
저장이 잘 되었는지 확인합니다.
잘 저장 되었네요 :)
[root@docker-master docker_images]# ls -al
합계 348232
drwxr-xr-x. 2 root root 23 9월 29 02:44 .
dr-xr-xr-x. 18 root root 262 9월 29 02:44 ..
-rw-------. 1 root root 356587008 9월 29 02:44 myweb.tar
자 이제 이 tar파일을 다시 이미지로 가져올 예정인데, 그 실습을 진행하기 전에!
도커 이미지를 전체 삭제해줍니다. 헷갈릴 수 있으니까요.
[root@docker-master docker_images]# docker rmi -f $(docker images -q)
Untagged: 1mini2/myrepo:addIndex_v1
Untagged: 1mini2/myrepo@sha256:df111e9031b838fa9b5c120b07cba0f23188a539e9be91e020b0a9f77d65ec9e
Deleted: sha256:24aec7b98d6bc27d1a9af66958328cf4193c6f29b770b3005da1ae00baa13e61
[root@docker-master docker_images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
자, 이제 docker load 명령어를 사용하여 tar파일을 이미지로 로드합니다.
[root@docker-master docker_images]# docker load -i ./myweb.tar
Loaded image: 1mini2/myrepo:addIndex_v1
잘 로드 되었는지 확인해봅니다.
[root@docker-master docker_images]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1mini2/myrepo addIndex_v1 24aec7b98d6b 3 days ago 344MB
7. Docker 이미지 & 컨테이너 삭제
모든 테스트가 마무리 되었습니다 :)
컨테이너를 정리해봅시다.도커 이미지와 컨테이너를 확인합니다.
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
1mini2/myrepo addIndex_v1 24aec7b98d6b 3 days ago 344MB
[root@docker-master /]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc1351b75b8d 24aec7b98d6b "container-entrypoin…" 28 minutes ago Exited (0) 23 minutes ago httpd
도커 이미지 전체 삭제를 docker rmi -f $(docker images) 명령어를 통해 진행합니다.
[root@docker-master /]# docker rmi -f $(docker images)
Untagged: 1mini2/myrepo:addIndex_v1
Deleted: sha256:24aec7b98d6bc27d1a9af66958328cf4193c6f29b770b3005da1ae00baa13e61
도커 컨테이너 전체 삭제를 docker rm -f $(docker ps -aq) 명령어를 통해 진행합니다.
[root@docker-master /]# docker rm -f $(docker ps -aq)
dc1351b75b8d
컨테이너와 이미지가 잘 삭제되었는지 확인합니다 :)
[root@docker-master /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@docker-master /]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES