도커 이미지 태그 설정과 도커 로그인 및 로그아웃
Docker Login & Logout 부분부터 이어서 해보겠습니다.
도커 태그(tag)는 원본 이미지에 참조 이미지 이름을 붙이는 명령입니다. 사용법은 다음과 같습니다.
docker tag 원본 이미지[:태그] 참조 이미지[:태그]
태그 설정은 새로운 참조명을 붙이는 작업이므로 이미지 ID는 변경되지 않습니다.
Example
- 이미지 ID에 세부 정보(OS, 버전 등)를 붙여 태그 지정:
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 13 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
httpd latest 721aa0022a96 3 months ago 178MB
toby@tobykakao:~$ docker image tag b2c2ab6dcf2e debian-httpd:1.0
- 이미지 이름[:태그]에 세부 정보를 붙여 태그 지정:
toby@tobykakao:~$ docker image tag httpd:latest debian-httpd:1.0
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 13 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
debian-httpd 1.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
- 저장소와 함께 태그 지정하여 도커 허브에 업로드 준비:
toby@tobykakao:~$ docker image tag httpd:latest debian-httpd:2.0
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 13 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
debian-httpd 1.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
- 별칭으로 태그 설정
toby@tobykakao:~$ docker image tag httpd:latest daehyunbigbread/httpd:3.0
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 13 days ago 139MB
nginx latest 048e09038596 3 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
debian-httpd 1.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
터미널에서 Docker login을 통해 Docker Hub에 원격 접속
- 접속 해제는 docker logout
toby@tobykakao:~$ docker login
USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u '
Your one-time device confirmation code is: NSTQ-GQQW
Press ENTER to open your browser or submit your device code here: <https://login.docker.com/activate>
Waiting for authentication in the browser\\u2026
WARNING! Your password will be stored unencrypted in /home/toby/.docker/config.json.
Configure a credential helper to remove this warning. See
<https://docs.docker.com/engine/reference/commandline/login/#credential-stores>
Login Succeeded
- Docker hub에 이미지 업로드 (push)
toby@tobykakao:~$ docker push daehyunbigbread/httpd:3.0
The push refers to repository [docker.io/daehyunbigbread/httpd]
c3e85bca3483: Mounted from library/httpd
dd7b9677cc6d: Mounted from library/httpd
02895f09033b: Mounted from library/httpd
5f70bf18a086: Mounted from library/httpd
622b52428873: Mounted from library/httpd
f0f039847c08: Mounted from library/httpd
3.0: digest: sha256:83e42f7ecc4f9c56898cab648ab11a4a5d61aa36e0131f636781146815172255 size: 1572
- Docker hub에 저장소에 업로드된 이미지 다운로드 (pull)
toby@tobykakao:~$ docker pull daehyunbigbread/httpd:3.0
3.0: Pulling from daehyunbigbread/httpd
Digest: sha256:83e42f7ecc4f9c56898cab648ab11a4a5d61aa36e0131f636781146815172255
Status: Image is up to date for daehyunbigbread/httpd:3.0
docker.io/daehyunbigbread/httpd:3.0
- 이제 Docker Hub에서 업로드한 이미지를 확인해 보겠습니다.
일반적으로 본인의 베이스 이미지에 특정 애플리케이션을 서비스와 코드 등을 포함해 컨테이너로 실행한 경우, docker commit 명령을 통해 컨테이너를 이미지로 저장할 수 있습니다. 이렇게 저장된 이미지를 본인의 도커 허브 저장소에 업로드하고 지속적으로 활용할 수도 있고, 팀 간 이미지 공유도 할 수 있습니다.
도커 허브 사이트에서 제공하는 저장소에 호스트에서 생성한 이미지 및 보유하고자 하는 이미지를 업로드하려면 docker login 명령을 통해 호스트에서의 접속이 이루어져야 합니다. Docker Hub를 접속하는 방식은 기본적으로 2가지 방식을 사용해 볼 수 있습니다.
1. Docker Login
첫번째 방법은 Docker Login 입니다. 한번 해보겠습니다. 로그인 시 아래와 같이 입력합니다:
- Username: 본인 아이디 입력
- Password: 본인 암호 입력
로그인이 성공하면 Login Succeeded 메시지가 출력됩니다.
toby@tobykakao:~$ docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /home/toby/.docker/config.json.
Configure a credential helper to remove this warning. See
<https://docs.docker.com/engine/reference/commandline/login/#credential-stores>
Login Succeeded
로그인 정보 저장 확인
로그인 정보는 /home/[사용자명]/.docker/config.json 파일에 암호화되지 않은 상태로 저장됩니다.
$ cat ~/.docker/config.json
{
"auths": {
"<https://index.docker.io/v1/>": {
"auth": "aAdgdfgsf3DsaD3SDZwfaMSD87dfs="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.12 (linux)"
}
}
현재 접속 사용자 조회
$ docker info | grep Username
Username: [사용자명]
로그아웃
docker logout을 실행하면 config.json 파일의 auth 값이 삭제되며, docker info에서도 사용자명이 제거됩니다.
2. Access Token 이용
두번째 방법은 hub.docker.com 사이트에서 제공하는 Access Token을 이용하는 것입니다. 사용 방법은 다음과 같습니다.
- hub.docker.com에 로그인합니다.
- 본인 계정을 클릭하면 [Account Setting]이 나옵니다.
- 좌측 메뉴중 [Security]를 선택합니다.
- [Personal Access Tokens]의 [Generate Access Token]을 선택합니다.
- 임의의 값을 입력하고 Generate를 누르면 아래와 같은 방법이 제시됩니다.
- 2번에 Access Token을 복사해서 사용합니다.
- 한번 복사된 Access Token을 한번 사용해 보겠습니다.
toby@tobykakao:~$ vi .access_token
- 액세스 토큰 파일을 생성하고, 별도의 암호 입력 없이 액세스 토큰을 이용하여 로그인합니다.
toby@tobykakao:~$ cat .access_token | docker login --username daehyunbigbread --password-stdin
WARNING! Your password will be stored unencrypted in /home/toby/.docker/config.json.
Configure a credential helper to remove this warning. See
<https://docs.docker.com/engine/reference/commandline/login/#credential-stores>
Login Succeeded
- 생성된 Access Token의 [Edit]을 선택해 보면 마지막 사용 메뉴가 [Active]로 되어 있습니다.
- 이 값을 [Inactive]로 변경 후 재접속을 해보면 접속 거부됨을 확인할 수 있습니다.
$ docker logout
Removing login credentials for <https://index.docker.io/v1/>
$ cat .access_token | docker login --username daehyunbigbread --password-stdin
Error response from daemon: Get <https://registry-1.docker.io/v2/:> unauthorized: incorrect username or password
도커 이미지 파일로 관리
docker image save 명령은 도커 원본 이미지의 레이어 구조까지 포함한 복제를 수행하여 확장자 tar 파일로 이미지를 저장합니다.
이 명령은 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령입니다.
- 도커 허브로부터 이미지를 내려받아 내부망으로 이전하는 경우
- 신규 애플리케이션 서비스를 위해 Dockerfile로 새롭게 생성한 이미지를 저장 및 배포해야 하는 경우
- 컨테이너를 완료(commit)하여 생성한 이미지를 저장 및 배포해야 하는 경우
- 개발 및 수정한 이미지 등
네트워크 제한 등으로 도커 허브를 이용하지 못하는 경우 이미지 이전과 배포를 위해 로컬에 저장된 이미지를 파일로 저장하거나 불러올 수 있습니다.
# 도커 이미지를 tar 파일로 저장
docker image save [옵션] <파일명> [image명]
# docker save로 저장한 tar 파일을 이미지로 불러옴
docker image load [옵션]
이미지를 다운로드해서 파일로 저장하고 불러오는 과정을 살펴보겠습니다.
예제: MySQL 이미지 다운로드, 저장, 확인
- MySQL 5.7 이미지 다운로드 및 확인:
toby@tobykakao:~$ docker pull mysql:8
8: Pulling from library/mysql
8b4274ea61c5: Pull complete
08ba006fa9b4: Pull complete
92a1aa4ee2ea: Pull complete
df48654477e3: Pull complete
a3bc7a62e19a: Pull complete
46b702880054: Pull complete
8f3688c019d3: Pull complete
612ab3e6f2e4: Pull complete
5b399be0ddb3: Pull complete
8149d82fe4db: Pull complete
Digest: sha256:bda6ee1f3ae5ebb3cbe9b995c9645ffbd36d7dbda3bd4b4d2ffa43d997073074
Status: Downloaded newer image for mysql:8
docker.io/library/mysql:8
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 2 weeks ago 139MB
mysql 8 07b15f39a8d0 2 weeks ago 600MB
nginx latest 048e09038596 4 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
- 다른 MySQL 이미지 사용: arm64를 지원하는 다른 MySQL 기반 이미지를 사용할 수 있습니다. 예를 들어, mariadb는 MySQL과 호환되며 arm64 지원이 더 잘 되어 있습니다.
toby@tobykakao:~$ docker pull mariadb:latest
- 다중 아키텍처 지원 이미지를 사용하도록 설정: 도커에서 --platform 옵션을 사용하여 amd64 버전을 명시적으로 지정할 수 있습니다. 단, 이 방법은 amd64 에뮬레이션을 필요로 하므로 성능이 낮아질 수 있습니다.
toby@tobykakao:~$ docker pull --platform linux/amd64 mysql:5.7
도커 이미지 tar 파일로 저장 및 불러오기
이미지 저장: docker image save 명령을 사용하여 mysql:8 이미지를 test-mysql8.tar 파일로 저장합니다.
toby@tobykakao:~$ docker image save mysql:8 > test-mysql8.tar
toby@tobykakao:~$ ls -lh test-mysql8.tar
-rw-rw-r-- 1 toby toby 590M Oct 31 01:17 test-mysql8.tar
tar 파일 내용 확인: tar 명령의 옵션인 tvf를 사용하여 tar 파일의 내용을 확인할 수 있습니다.
- tvf(t(list), v(verbose), f(file))를 이용해 묶인 파일 내용을 확인할 수 있습니다. 이미지 레이어들의 다이제스트값으로 만들어진 디렉토리 파일입니다.
toby@tobykakao:~$ tar tvf test-mysql8.tar
drwxr-xr-x 0/0 0 2024-10-14 22:21 blobs/
drwxr-xr-x 0/0 0 2024-10-31 01:17 blobs/sha256/
-rw-r--r-- 0/0 6512 2024-10-14 22:21 blobs/sha256/07b15f39a8d08f52383c96251e6cadf7d1015c0cf77b75114f659cd8fb02139b
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/0d6dfd4b13e2922c08bd37a712da526b69ddb47d3f627a952c6a735f1fc7a982
-rw-r--r-- 0/0 17408 2024-10-14 22:21 blobs/sha256/16ced4dbe6074b9ba69f37db7dc61fe4d85376a9511ead84dccfd80dc72c9ba8
-rw-r--r-- 0/0 1772 1970-01-01 00:00 blobs/sha256/19592b390b0af9453b5171c3e57422a640aa89f3148a3e55bd1d2bb7c11871a1
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/37b0a1c9bd71873e6f4ce416e0f7d2d4779d7f3d29a778990efe2a4bc35e07f1
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/3a3b1d4077945032c307118bef003f773ca28c636e191d3618ddd499c3751082
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/3fdea9ae3575d4febad2f5aa7f2483851246123fd628a4c03f4f92719cf264e0
-rw-r--r-- 0/0 401 2024-10-14 22:21 blobs/sha256/40b4233ce374847ac60d2698a03490badef3b86cb6707ad20cd56c02a7152d25
-rw-r--r-- 0/0 1061 2024-10-14 22:21 blobs/sha256/425f247fdd3ba37a146698b551edd4d8eb725e8db4981eb1c38d6ed191c2c61f
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/5c4f9a6296eb8df53e0e71703d4c01ec906b5062819ec4ca8d5ab8e2dcb0a7f3
-rw-r--r-- 0/0 338249216 2024-10-14 22:21 blobs/sha256/7023eae83959d4863938235260f5d76afe66e8bf8c64303dd2aa9d73cf32b1a3
-rw-r--r-- 0/0 119646720 2024-10-14 22:21 blobs/sha256/724bf980a5d9acf94cd8803441a43140eef1faa650aa965bf9c691f6d2f9e97d
-rw-r--r-- 0/0 2406400 2024-10-14 22:21 blobs/sha256/78deb413c9bba482d76456df8311b0f1cf1b61ba23bd84ef177e064e4f656f6f
-rw-r--r-- 0/0 3072 2024-10-14 22:21 blobs/sha256/9039485b287a5ca1a8af1946519c2ff0aa2e0d38a5d7257f202b4f74852c475c
-rw-r--r-- 0/0 141234176 2024-10-14 22:21 blobs/sha256/9fb702689741fa51b22b04c5a77beca08a50832189b1fb9dd55168efa7174fc5
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/a52f0fd0e1542c6d28683446c8cf62c74100831390649b02465c2a64ae50a3d8
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/c4982f5931cec9d4f7541e4eb1ce91b1e4ad7924ea14c5348a3fbf52c4bed1d9
-rw-r--r-- 0/0 3072 2024-10-14 22:21 blobs/sha256/c76d8730f1255a017d80bb98d25f7603199812ad48c256c590c46fd1fa1c94f6
-rw-r--r-- 0/0 11264 2024-10-14 22:21 blobs/sha256/c8be8b1b0c7a46916e846f4afffefd5a5f0e942f75e5af443d0a4d2fcb38a5dc
-rw-r--r-- 0/0 477 2024-10-14 22:21 blobs/sha256/da6f9a2fe3f4b6a3e3001bde208cdbdecf5acb5855612bafbc83cb577404a3dc
-rw-r--r-- 0/0 6656 2024-10-14 22:21 blobs/sha256/de51580e3f80499a90c502060cabbb52a9ccb33d4fa3a3192f11b1f8db9048cd
-rw-r--r-- 0/0 16169472 2024-10-14 22:21 blobs/sha256/e5eb4da91418d588dd2f6e04fb3e030ee126f0a16fcc8d9356a857e38ceb45a5
-rw-r--r-- 0/0 352 2024-10-31 01:17 index.json
-rw-r--r-- 0/0 3208 1970-01-01 00:00 manifest.json
-rw-r--r-- 0/0 31 1970-01-01 00:00 oci-layout
-rw-r--r-- 0/0 83 1970-01-01 00:00 repositories
- 다시 불러오는 실습 → 이미지 삭제 후 다시 불러오기: 이미지를 삭제하고 저장된 tar 파일을 이용해 이미지를 다시 불러옵니다.
toby@tobykakao:~$ docker image rm mysql:8
Untagged: mysql:8
Untagged: mysql@sha256:bda6ee1f3ae5ebb3cbe9b995c9645ffbd36d7dbda3bd4b4d2ffa43d997073074
Deleted: sha256:07b15f39a8d08f52383c96251e6cadf7d1015c0cf77b75114f659cd8fb02139b
Deleted: sha256:564095bf23debd62f1504bbe0c819949462dd31448ca1c940cb13c53a4e6969c
Deleted: sha256:828be284518c414b574cdb3f65c5833b2fadf8b5c3cd3139668b5cb95ec16e7d
Deleted: sha256:3bd80a737b4c508d8446a7e0ce015c908a0d59bbe31c18b175e2c05100277cd8
Deleted: sha256:37b754207ae8ff210fc90763fe60791ada0da02b979050fa2198d2367df89710
Deleted: sha256:f041810b085833d841a758eb04e8c85d01c33ea3b82649dbdeb2f3bf5c780809
Deleted: sha256:d204432c68bbf71d889e1ff670df9e55d40a7e0e76ea7a39b28495a6ed0ed645
Deleted: sha256:8a5558323b9502d685f62fce931d880b325a21c1bd6a8b44f79a212ff492de88
Deleted: sha256:a3700f56b3f2a7e3c0158211b60a6d4ce38f8bef9dca5ad8ae24a0d89b6c4006
Deleted: sha256:e53fbdf5a215d4d7affb9f0dd84581de932646c4b3c468365e2ff68e209458ca
Deleted: sha256:724bf980a5d9acf94cd8803441a43140eef1faa650aa965bf9c691f6d2f9e97d
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 2 weeks ago 139MB
nginx latest 048e09038596 4 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
이미지 로드: docker image load 명령으로 tar 파일의 내용을 이미지로 불러옵니다.
toby@tobykakao:~$ docker image load < test-mysql8.tar
724bf980a5d9: Loading layer 119.6MB/119.6MB
c8be8b1b0c7a: Loading layer 11.26kB/11.26kB
78deb413c9bb: Loading layer 2.406MB/2.406MB
e5eb4da91418: Loading layer 16.17MB/16.17MB
de51580e3f80: Loading layer 6.656kB/6.656kB
c76d8730f125: Loading layer 3.072kB/3.072kB
9fb702689741: Loading layer 141.2MB/141.2MB
9039485b287a: Loading layer 3.072kB/3.072kB
7023eae83959: Loading layer 338.2MB/338.2MB
16ced4dbe607: Loading layer 17.41kB/17.41kB
Loaded image: mysql:8
이미지 확인: 이미지를 정상적으로 불러왔는지 확인합니다.
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest d36fff645336 2 weeks ago 139MB
mysql 8 07b15f39a8d0 2 weeks ago 600MB
nginx latest 048e09038596 4 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
httpd latest 721aa0022a96 3 months ago 178MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
docker import 사용:docker import를 사용하여 tar 파일을 새로운 이미지로 가져올 수도 있습니다.
toby@tobykakao:~$ cat test-mysql8.tar | docker import - mysql8:1.0
sha256:257c7d00682b75b455c100e9a7ca37316529880eae319991e1017e8b78f1389f
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql8 1.0 257c7d00682b 4 seconds ago 618MB
debian latest d36fff645336 2 weeks ago 139MB
mysql 8 07b15f39a8d0 2 weeks ago 600MB
nginx latest 048e09038596 4 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
httpd latest 721aa0022a96 3 months ago 178MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
도커 이미지 tar 파일 압축하여 용량 줄이기
docker image save 명령에 gzip 옵션을 추가하여 tar 파일의 용량을 줄일 수 있습니다.
toby@tobykakao:~$ docker image save mysql:8 | gzip > test-mysql8zip.tar.gz
toby@tobykakao:~$ ls -lh test-mysql8zip.tar.gz
-rw-rw-r-- 1 toby toby 158M Oct 31 01:26 test-mysql8zip.tar.gz
압축 후 약 300MB 정도 용량이 감소된 것을 확인할 수 있습니다. 압축된 파일을 불러오는 방법은 동일합니다.
모든 이미지를 하나의 파일로 저장하기
쉘 스크립트 변수를 사용하여 모든 이미지를 하나의 파일로 저장할 수 있습니다.
$ docker image save -o all_image.tar $(docker image ls -q)
$ ls -lh all_image.tar
-rw------- 1 hylee hylee 1.2G May 7 17:16 all_image.tar
도커는 docker image save와 같이 이미지를 파일로 관리하는 여러 방법을 제공합니다. 또한, 컨테이너를 파일로 관리하는 docker export/import와 컨테이너를 이미지로 생성하는 docker commit도 활용할 수 있습니다.
Docker Image 삭제
도커 허브를 통해 다운로드한 이미지는 종류에 따라 용량이 다릅니다. 작게는 수 메가바이트부터 크게는 수 기가바이트가 넘는 것도 있습니다 이미지를 계속 다운로드하게 되면 로컬 서버의 저장 용량을 많이 차지하여 공간 문제를 야기하기도 합니다. 이런 문제를 해결하기 위해 앞서 배운 docker image save를 통해 이미지를 백업하거나 주기적으로 업무에 사용하는 이미지와 사용하지 않는 이미지를 구분하여 관리하고, 불필요한 이미지는 삭제하는 것이 좋습니다.
하나 이상의 도커 이미지를 삭제하는 방법은 다음과 같습니다.
정식 명령은 docker image rm이고, 단축 명령으로 docker rmi를 제공합니다.
docker image rm [옵션] <이미지 이름[:태그] | 이미지 ID>
docker rmi [옵션] <이미지 이름[:태그] | 이미지 ID>
도커 이미지는 현재 사용 중인 컨테이너가 없으면 바로 삭제된다. 태그가 있는 이미지 원본은 태그된 이미지와 상관없이 삭제할 수 있습니다.
Example
삭제 테스트를 위해 ubuntu:14.04 이미지를 다운로드합니다.
toby@tobykakao:~$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
d1a5a1e51f25: Pull complete
75f8eea31a63: Pull complete
a72d031efbfb: Pull complete
Digest: sha256:64483f3496c1373bfd55348e88694d1c4d0c9b660dee6bfef5e12f43b9933b30
Status: Downloaded newer image for ubuntu:14.04
docker.io/library/ubuntu:14.04
toby@tobykakao:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql8 1.0 257c7d00682b 6 minutes ago 618MB
debian latest d36fff645336 2 weeks ago 139MB
mysql 8 07b15f39a8d0 2 weeks ago 600MB
nginx latest 048e09038596 4 weeks ago 197MB
busybox latest 63cd0d5fb10d 4 weeks ago 4.04MB
daehyunbigbread/httpd 3.0 721aa0022a96 3 months ago 178MB
debian-httpd 2.0 721aa0022a96 3 months ago 178MB
httpd latest 721aa0022a96 3 months ago 178MB
ubuntu 14.04 55b7b4f7c5d6 2 years ago 187MB
이미지 삭제 시 latest 버전을 제외한 나머지는 반드시 태그명을 명시해야 한다.
toby@tobykakao:~$ docker image rm ubuntu
Error response from daemon: No such image: ubuntu:latest
toby@tobykakao:~$ docker image rm ubuntu:14.04
Untagged: ubuntu:14.04
Untagged: ubuntu@sha256:64483f3496c1373bfd55348e88694d1c4d0c9b660dee6bfef5e12f43b9933b30
Deleted: sha256:55b7b4f7c5d6a56a3ccb5e93538311838599b65e746a07a0d90cb729e3559df7
Deleted: sha256:1d77723fd9062baa98c1f1f138bea5bda3d6eb956dcbad8626687568dad1fd01
Deleted: sha256:c5501973c9648791d99895779daa35bfd0b9d0442a0fda53e9af9bc73e8bca62
Deleted: sha256:59199d90878e4fda42bcd8a43bfe3ecd964265b2008746c6b18ae3d6ca659033
이미지 ID를 이용한 이미지 삭제 시, 다른 태그 참조로 인한 오류 발생.
toby@tobykakao:~$ docker image rm b2c2ab6dcf2e
Error response from daemon: conflict: unable to delete b2c2ab6dcf2e (must be forced) - image is referenced in multiple repositories
태그가 지정된 모든 httpd 관련 이미지 모두 삭제 (-f 옵션 사용).
toby@tobykakao:~$ docker image rm -f b2c2ab6dcf2e
리눅스 쉘 스크립트의 변수 활용 방식을 활용하여 이미지 전체 삭제.
toby@tobykakao:~$ docker rmi $(docker images -q)
특정 이미지 이름이 포함된 것만 삭제.
toby@tobykakao:~$ docker rmi $(docker images | grep debian)
특정 이미지 이름이 포함된 것만 제외하고 모두 삭제.
toby@tobykakao:~$ docker rmi $(docker images | grep -v centos)
자주 사용하는 명령을 전역 alias로 적용하여 활용하면 편리하다.
toby@tobykakao:~$ vi .bashrc
alias cexrm='docker rm $(docker ps --filter "status=exited" -a -q)'
설정한 alias 적용하고 확인.
toby@tobykakao:~$ source .bashrc 또는 ~$ . .bashrc
$ alias
...
alias cexrm='docker rm $(docker ps --filter "status=exited" -a -q)'
컨테이너가 실행 중인 이미지를 삭제할 때 발생하는 오류 메시지:
toby@tobykakao:~$ docker image rm centos:7
Error response from daemon: conflict: unable to remove repository reference "centos:7" (must force) - container 3d942f937afd is using its referenced image b5b4d78bc90c
사용 중이지 않은 모든 이미지 제거하기
이미지는 컨테이너 구동을 위해 존재합니다. 로컬에 다운로드된 이미지 중 하나 이상의 컨테이너가 연결되지 않은 모든 이미지 제거를 위해 docker image prune 명령을 사용합니다.
- -filter 옵션을 이용하면 특정 기간이나 이미지 라벨을 지정하여 제거 대상 이미지를 선별할 수 있습니다.
- 사용 중이 아닌 모든 이미지 제거 (a 옵션).
toby@tobykakao:~$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
- 사용 중이 아닌 48시간 이전의 모든 이미지 삭제 (확인 없이 f 옵션).
toby@tobykakao:~$ docker image prune -a -f --filter "until=48h"
'☁️ Cloud' 카테고리의 다른 글
[Docker] Docker를 활용한 Ngnix Container 설정, 관리 & Docker hub 배포 (0) | 2024.11.09 |
---|---|
[Docker] Docker Container 명령어 (with Ngnix Container 실행) (0) | 2024.11.05 |
[Docker] Docker 명령어 활용 Part.1 (0) | 2024.10.31 |
[Cloud] Docker Installation Check (도커 설치 확인) (0) | 2024.10.11 |
[Cloud] Ubuntu에 Docker Community Edition (CE) 설치 (0) | 2024.10.08 |