위 그림을 참고하면 Docker가 어떤 구조로 작동하는지 이해하는데 도움이 된다. 이미지 조작에 사용되는 부분으로는 아래와 같은 것들이 있다.

  • 이미지를 Registry(ex. hub.docker.com)에서 다운로드/업로드
  • 컨테이너의 시작/정지 등

Docker 이미지 조작 명령어

docker search [옵션] <검색 키워드>

지정할 수 있는 주요 옵션
옵션설명
--no-trunc결과를 모두 표시
--limitn건의 검색 결과를 표시
--filter=stars=n즐겨찾기의 수(n이상)를 지정

# centos에 대해서 15건의 검색 결과 표시
docker search centos --limit 15

  • NAME : 이미지 이름
  • DESCRIPTION : 이미지 설명
  • STARS : 즐켜찾기 수
  • OFFICIAL : 공식 이미지(O/X)
  • AUTOMATED : Dockerfile을 바탕으로 자동 생성된 이미지(O/X)

이미지 다운로드(docker image pull)

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 image ls)

docker iamge ls [옵션] [리포지토리명]

지정할 수 있는 주요 옵션
옵션설명
-all, -a모든 이미지를 표시
--digests다이제스트를 표시할지 말지
--no-trunc결과를 모두 표시
--quiet, -qDocker 이미지 ID만 표시

docker image ls 명령 결과
옵션설명
REPOSITORY이미지 이름
TAG이미지 태그명
IMAGE ID이미지 ID
CREATED작성일
SIZE이미지 크기

docker iamge ls --digests

docker image ls --quiet

이미지 상세 정보 확인(docker iamge inspect)

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 image tag)

이미지 태그에는 식별하기 쉬운 버전명을 붙이는 것이 일반적이다.
<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 Hub에 로그인(docker login)

Docker 리포지토리에 업로드를 하려면 docker login 명령어를 이용해 로그인을 해야한다.
docker login [옵션] [서버]
이렇게 hub.docker.com에 회원가입한 아이디, 비밀번호를 입력하면 된다.

이미지 업로드(docker image push)

업로드를 위해선 반드시 <Docker Hub 사용자명>/이미지명:[태그명] 형식으로 업로드 해야한다.
docker image push 이미지명[:태그명]

지금 내 레포지토리에 이렇게 test,test2가 존재한다 test3를 여기서 미리 만들지 않아도 퍼블릭 레포지토리를 만들거라면 이미지 업로드할때 ghdghkgud/test3:ubuntu 이렇게 해주면 자동으로 test3 레포지토리가 만들어진다.
이렇게 push에 성공하고 다시 내 레포지토리를 확인해보면
test3가 추가된걸 볼 수 있다.

이미지 삭제(docker rm)

docker image rm [옵션] 이미지명 [이미지명]
이미지명은 REPOSITORY 또는 IMAGE ID를 지정한다.

지정할 수 있는 주요 옵션
옵션설명
--force, -f이미지를 강제로 삭제
--no-prune중간 이미지를 삭제하지 않음

docker image rm ghdghkgud/test3:ubuntu

docker image rm ubuntu:latest

  • Untagged : Hard Link처럼 같은 링크의 이미지 파일이 있는데, 그 이름만 제거
  • Deleted : 하드링크 1인 이미지, 할당 해제

어떤 컨테이너가 이미지를 사용중이라면 --force 또는 -f 옵션을 사용해야지 이미지를 삭제할 수 있다. 하지만 이미지를 사용중인데 삭제한다면 삭제한 이미지를 사용중이던 컨테이너의 이후 동작을 보장할 수 없다. 일반적으로 사용중인 이미지를 지워선 안된다.

docker iamge prune 명령

docker image prune [옵션]

지정할 수 있는 주요 옵션
옵션설명
--all, -a사용하지 않는 이미지를 모두 삭제
--force, -f이미지를 강제로 삭제

docker image prune -a

Docker Hub에서 로그아웃(docker logout)

docker logout [서버명]


References

profile
엔지니어 유망주의 곡괭이질

0개의 댓글