이미지 태그
- 이미지를 업로드 할 때 이름이 중요. 하지만, 이미지의 이름을 변경하는 기능은 없음
- 태그 기능을 사용하여 이미지를 가리키는 이름을 하나 추가하는 형태
- 이미지를 업로드 하려는 목적이라면 태그를 지정할 때 "허브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
- 로그인하지 않아서 발생한 경우
- docker hub 에 회원가입 후 진행
- 이미지의 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 |