위 그림을 참고하면 Docker가 어떤 구조로 작동하는지 이해하는데 도움이 된다. 이미지 조작에 사용되는 부분으로는 아래와 같은 것들이 있다.
docker search [옵션] <검색 키워드>
옵션 | 설명 |
---|---|
--no-trunc | 결과를 모두 표시 |
--limit | n건의 검색 결과를 표시 |
--filter=stars=n | 즐겨찾기의 수(n이상)를 지정 |
# centos에 대해서 15건의 검색 결과 표시
docker search centos --limit 15
docker image pull [옵션] 이미지명[:태그명]
# CentOS의 이미지 취득
docker image pull centos:7
#CentOS의 모든 이미지 취득
docker image pull -a centos
# Ubuntu:latest 이미지 취득
docker image pull ubuntu:latest
# 텐서플로의 URL을 지정하여 이미지 취득
docker iamge pull gcr.io.tensorflow/tensorflow
docker iamge ls [옵션] [리포지토리명]
옵션 | 설명 |
---|---|
-all, -a | 모든 이미지를 표시 |
--digests | 다이제스트를 표시할지 말지 |
--no-trunc | 결과를 모두 표시 |
--quiet, -q | Docker 이미지 ID만 표시 |
옵션 | 설명 |
---|---|
REPOSITORY | 이미지 이름 |
TAG | 이미지 태그명 |
IMAGE ID | 이미지 ID |
CREATED | 작성일 |
SIZE | 이미지 크기 |
docker iamge ls --digests
docker image ls --quiet
docker image inspect [이미지]
docker image inspect hello-world:latest
: hello-world 이미지 상세 정보 표시
특정 정보를 취득하고 싶을 때
--format="{{ .정보}}"
# OS 정보 취득
docker image inspect --format="{{ .OS}}" centos:7
# image 정보 취득
docker image inspect --format="{{ .ContainerConfig.Image}}" centos:7
이미지 태그에는 식별하기 쉬운 버전명을 붙이는 것이 일반적이다.
<Docker Hub 사용자명>/이미지명:[태그명]
예를 들어 사용자명 : ghdghkgud인 사용자가 이미지명 : test, 태그명 : 1.0이라 했다면
ghdghkgud/test:1.0
태그는 이렇게 된다.
docker help tag
에서 tag 사용법을 확인해 보면
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
이렇게 사용한다고 나와있다.
ununtu:latest를 이용해서 두개의 tag를 만들어 보자
docker tag ubuntu:latest abcde:fghi
docker tag ubuntu:latest ghdghkgud/test:ubuntu
이렇게 보이는 것처럼 ubuntu:latest를 가지고 두개의 tag를 만들었는데 REPOSITORY와 TAG는 다 다른데 IMAGE ID가 셋다 같은걸 볼 수 있다.
이는 셋 모두 실체가 똑같다는 것을 의미한다. 이미지 자체를 복사하거나 이름을 바꾼 것이 아니라 이미지에 별명(tag)를 붙인 것이다. Linux의 Hard Link와 비슷하다고 생각하면 좋겠다.
이제 tag 설정을 끝낸 이미지를 hub.docker.com에 업로드 해보자.
Docker 리포지토리에 업로드를 하려면 docker login 명령어를 이용해 로그인을 해야한다.
docker login [옵션] [서버]
이렇게 hub.docker.com에 회원가입한 아이디, 비밀번호를 입력하면 된다.
업로드를 위해선 반드시 <Docker Hub 사용자명>/이미지명:[태그명]
형식으로 업로드 해야한다.
docker image push 이미지명[:태그명]
지금 내 레포지토리에 이렇게 test,test2가 존재한다 test3를 여기서 미리 만들지 않아도 퍼블릭 레포지토리를 만들거라면 이미지 업로드할때 ghdghkgud/test3:ubuntu 이렇게 해주면 자동으로 test3 레포지토리가 만들어진다.
이렇게 push에 성공하고 다시 내 레포지토리를 확인해보면
test3가 추가된걸 볼 수 있다.
docker image rm [옵션] 이미지명 [이미지명]
이미지명은 REPOSITORY 또는 IMAGE ID를 지정한다.
옵션 | 설명 |
---|---|
--force, -f | 이미지를 강제로 삭제 |
--no-prune | 중간 이미지를 삭제하지 않음 |
docker image rm ghdghkgud/test3:ubuntu
docker image rm ubuntu:latest
어떤 컨테이너가 이미지를 사용중이라면 --force 또는 -f 옵션을 사용해야지 이미지를 삭제할 수 있다. 하지만 이미지를 사용중인데 삭제한다면 삭제한 이미지를 사용중이던 컨테이너의 이후 동작을 보장할 수 없다. 일반적으로 사용중인 이미지를 지워선 안된다.
docker image prune [옵션]
옵션 | 설명 |
---|---|
--all, -a | 사용하지 않는 이미지를 모두 삭제 |
--force, -f | 이미지를 강제로 삭제 |
docker image prune -a
docker logout [서버명]