도커/개념 및 실습

06장-1, 이미지 제작 및 업로드

Jaden Park 2021. 6. 3. 01:31

 

이미지 태그

  • 이미지를 업로드 할 때 이름이 중요. 하지만, 이미지의 이름을 변경하는 기능은 없음
  • 태그 기능을 사용하여 이미지를 가리키는 이름을 하나 추가하는 형태
  • 이미지를 업로드 하려는 목적이라면 태그를 지정할 때 "허브ID/저장소이름:태그" 형태를 유지하는 것이 좋음.

docker tag

[root@docker ~]# docker tag --help

Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
  • 태그는 리눅스의 하드 링크를 생성하는 것과 비슷하며, 기능 또한 그러하다.

centos:latest 이미지에 JadenPark/docker:centos 태그를 부여

[root@docker ~]# docker tag centos:latest JadenPark/docker:centos
[root@docker ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
...
centos            latest    300e315adb2f   5 months ago   209MB
JadenPark/docker     centos    300e315adb2f   5 months ago   209MB

이미지 업로드

  • 이미지를 업로드 하려면 먼저 저장소에 로그인을 해야함.
  • 로그인한 후에 push 명령으로 업로드를 할 수 있음

docker login

[root@docker ~]# docker login --help

Usage:  docker login [OPTIONS] [SERVER]
  • docker login 명령으로 저장소에 로그인할 수 있음.
  • 서버를 지정하지 않으면 도커 허브가 기본 값
  • 프라이빗 이미지 저장소의 주소를 지정하면 해당 저장소에 로그인
[root@docker ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: JadenPark ( * 사용자 아이디 *)
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


[root@docker ~]# docker logout
Removing login credentials for https://index.docker.io/v1/

docker push

[root@docker ~]# docker push --help
Usage: docker push [OPTIONS] NAME[:TAG]
  • docker push 명령을 사용하여 저장소에 이미지를 업로드 할 수 있음
  • 이미지를 업로드 할 때 반드시 docker login 명령으로 로그인한 사용자의 아이디와 이미지 이름의 앞의 값이 같아야 함.
  • 업로드된 이미지는 도커 허브에서 일정시간 흐른 뒤 확인할 수 있음

JadenPark/docker:centos 이미지를 도커 허브에 저장하는 명령

[root@docker ~]# docker push JadenPark/docker:centos
The push refers to repository [docker.io/JadenPark/docker]
2653d992f4ef: Pushed 
centos: digest: sha256:dbbacecc49b088458781c16f3775f2a2ec7521079034a7ba499c8b0bb7f86875 size: 529
참고. denied: requested access to the resource is denied
  1. 로그인하지 않아서 발생한 경우
  2. 이미지의 user name 과 docker hub에 가입된 ID가 일치하지 않는 경우
    • "허브ID/저장소이름:태그" 재확인

이미지 제작

  • 생성된 컨테이너에서 이미지를 생성
  • 컨테이너의 파일 시스템을 추출하여 이미지를 생성

docker commit

[root@docker ~]# docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  • docker commit 명령은 생성된 컨테이너를 기반으로 이미지를 생성

이미지를 제작하기 위해 호소트의 /etc/services 파일을 os1 컨테이너의 /tmp 디렉토리에 복사

[root@docker ~]# docker run --name os1 -itd centos
3ea385fd35503c3b3db4dee2a08d7b620b897ad3c767e7a3d13ddaff10c89821

[root@docker ~]# docker cp /etc/services os1:/tmp

docker commit 명령으로 Jaden/docker:commit 이미지를 생성

[root@docker ~]# docker commit os1 JadenPark/docker:commit
sha256:10e3ee235468422de7b48ac64faf2082422920e3a3198d74a257e2e73dc2ee34

[root@docker ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
JadenPark/docker      commit    10e3ee235468   56 seconds ago   210MB
JadenPark/docker      centos    300e315adb2f   5 months ago     209MB
centos                7         8652b9f0cb4c   6 months ago     204MB

docker commit 명령으로 이미지를 생성하면 이미지의 레이어가 하나 더 추가됌

[root@docker ~]# docker inspect JadenPark/docker:commit

...
            "Layers": [
                "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859",
                "sha256:a6fb8eb7ddf655a3f54f7e4f958548d5da75760ac4b14dc0b5584f7e6376608a"
            ]
...

docker export

[root@docker ~]# docker export --help

Usage:  docker export [OPTIONS] CONTAINER
  • docker export 명령으로 컨테이너의 파일 시스템을 추출하여 아카이브 파일로 생성할 수 있음
  • docker export 명령을 사용할 때 반드시 -o 옵션을 함께 사용함.
  • 그렇지 않으면 아카이브 파일이 생성되지 않음
[root@docker ~]# docker export -o export.tar os1

# 컨테이너에 존재했던 파일들을 알 수 있음
[root@docker ~]# tar tf export.tar
...

docker import

[root@docker ~]# docker import --help

Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  • docker import 명령은 export로 추출된 아카이브 파일을 이미지화함.

export.tar 파일을 이미지로 생성 후 확인

[root@docker ~]# docker import export.tar JadenPark/docker:import
sha256:6cd17a8f78f19cf11f8ea0cc890a2c96dd644cfae362a500f8b61ec604e6755e

[root@docker ~]# docker inspect tom3k/docker:import  | grep -i -A 6 layer
            "Type": "layers",
            "Layers": [
                "sha256:8c9c56706a3841b75a14e578db68f716d94e8da1578ffeaafb785a7df55c6e78"
            ]
        },
        "Metadata": {
            "LastTagTime": "2021-06-02T19:37:43.029653422+09:00"
        }
  • import 된 이미지를 inspect로 살펴보면 commit과 다르게 대부분의 값이 비어있는 것을 알 수 있음
  • 또한 레이어도 하나로 통합되는데 centos:latest 이미지도 하나였지만 레이어의 hash 가 달라진 것도 알 수 있음

'도커 > 개념 및 실습' 카테고리의 다른 글

07장, 프라이빗 이미지 저장소  (0) 2021.06.04
06장-2, Dockerfile  (0) 2021.06.04
05장-2, 컨테이너의 통신  (0) 2021.06.02
05장-1, 도커 네트워크 유형  (0) 2021.06.02
04장, 도커 볼륨  (0) 2021.06.02