Docker

Docker 이미지

쿠와와 2021. 1. 4. 17:10

모든 컨테이너는 이미지를 기반으로 생성되므로 이미지를 다루는 방법을 꼭 알고 있어야 한다. 

이미지의 이름을 구성하는 저장소, 이미지 이름, 태그를 잘 관리하는 것뿐만 아니라 이미지가 어떻게 생성되고 삭제되는지 이미지의 구조는 어떻게 돼 있는지 알아보자. 

 

도커는 기본적으로 도커 허브라는 중앙 이미지 저장소에서 이미지를 내려받는다. 기본적으로 

docker create, docker run, docker pull의 명령어로 만들고 검색하고 내려받는다. 

대부분이 이미 제공하거나 다른 사람들이 제공했기 때문에 APP 이미지를 직접 만들지 않아도 손쉽게 사용할 수 있다. 

 

내가 사용하고 싶은 이미지가 있는지

docker search (이미지) 명령어를 통해 찾아볼 수 있다. 

 

 

1. 도커 이미지 생성 

1. 컨태이너 생성, 변경

호스트) docker run -i -t --name commit_test ubuntu:14.04

내부) echo test_first! >> first

 

2. commit 

docker commit [옵션] 컨테이너name [레포지터리[:태그]]

ex)

docker commit -a "kuwhawha" -m "my first commit" commit_test commit_test:first

 

-a : 저자를 의미함

-m : commit 메시지 (부과설명)

 

3. 생성 확인

docker images 

 

 

2. 이미지 구조 이해 

docker inspect 명령어를 사용해 이지미에 대한 Layers를 확인해보자 

docker 

docker images 에서 이미지를 커밋할 때 컨테이너에서 변경된 사항만 새로운 레이어로 저장하고, 그레이어를 포함해 새로운 이미지를 생성하기 때문에 전체 이미지의 실제 크기는 ubuntu:14.04 + first + second가 되는 것이다. 

내가 직접 찍어서 화질이 안좋을 수 있다.

 

그럼 이제 도커 이미지를 삭제해보자.

먼저 삭제하기 전에는 도커를 먼저 멈춘 후에 삭제해주면 된다.

docker stop commit_test2 && docker rm commit_test2

docker rmi commit_test:first

 

하지만 이렇게 first를 삭제한다고 해도 진짜 사라지는 것은 아니다. -> 이유는 first를 사용하고 있는 second가 있기 때문이다. 단지 레이어에 부여된 이름만 삭제된 것이다. 

 

이제 second도 삭제해보자 

docker rmi commit_test:second -> 이 명령어는 second layer를 삭제하는 것이므로 ubuntu:14.04 layer는 삭제되지 않는다. 

 

 

3. 이미지 추출

도커 이미지를 별도로 저장하거나 옮기는 등 필요에 따라 이미지를 단일 바이너리 파일로 저장할 때가 있다.

docker save 를 사용해보자 ( 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있다. )

 

docker save -o ubuntu_14_04.tar ubuntu:14.04

 

추출된 이미지는 load 명령어로 다시 도커에 로드할 수 있다. 기존의 이미지와 완전히 동일한 이미지가 도커 엔진에 생성된다. 

 

docker load -i ubuntu_14_04.tar

 

위의 명령어들과 유사하게 export, import가 있다. 다만 export는 컨테이너의 파일시스템을 rat 파일로 추출하며 컨테이너 및 이미지에 대한 설정 정보를 저장하지 않는다. 

 

docker export -o rootFS.tar mycontainer 

docker import rootFS.tar myimage:0.0

 

이러한 단일 이미지로 저장하는 것은 효율적이지 못하다. 각각의 하위 layer 까지 동시에 추출하기 때문이다.

 

 

4. 이미지 배포

 

 

방법 1. 도커에서 공식적으로 제공하는 도커 허브 이미지 저장소를 사용한다. 

사용자는 docker push, docker pull만 하면 된다. 

단, 결제하지 않는다면 Private(비공개) 저장수의 제한이 있다. 

 

1. 회원가입 

2. Create a Repository 클릭 

3. 저장할 이미지의 이름과 간단한 설명 입력 

-> ID/저장소 이름 기억하기 

 

4. 저장소에 이미지를 올려보자. 

docker run -i -t --name commit_container1 ubuntu:14.04

 

기본적인 commit 명령어는 docker commit commit_container1 저장소이름:0.0 이다. 

그러나 아직 commit 이 되지 않을 것이다. 몇가지 조건이 있다. 

 

 - 특정 이름의 저장소에 이미지를 올리려면 저장소의 이름을 이미지 앞에 접두어로 추가해야 합니다. 

-> docker tag 명령어를 사용하면 이미지의 이름을 추가할 수 있습니다. 

docker tag [기존의 이미지 이름] [새롭게 생성될 이미지 이름] 

 

docker tag [저장소이름:0.0] [ID/저장소이름:0.0]

 

 - 로그인을 하지 않으면 생성한 저장소에 이미지를 올릴 수 있는 권한을 가질 수 없다. 

 

docker login 명령어로 로그인 하자. 

-도커 엔진에서 로그인한 정보는 /[계정명]/.docker/config.json 파일에 저장된다. 로그인 정보를 삭제하고 싶다면

docker logout 하자.

 

이제 그러면 진짜 push를 해보자.

docker push ID/저장소이름:0.0

 

그리고 이미지를 내려받는 명령어는 별도의 로그인이 필요하지 않고 

docker pull ID/저장소이름:0.0 을 입력하면 된다. 

 

 

-체계적인 조직 구성이 필요하다면 .....

생성될때 aliceorg로 조직 이름을 넣어 ID/저장소이름:0.0 대신 조직이름/저장소이름:0.0 을 사용할 수 있다. 

[Reposirories] 탭을 클릭해 조직에 소속되는 저장소를 만들 수 있고 각 Team의 [Permissions] 탭에 들어가 저장소에 대한 멤버의 권한을 다르게 부여할 수 있다. 

 

 

방법 2. 도커 사설 레지스트리를 사용하는 방법 

 

특별히 다루지는 않겠다. 

'Docker' 카테고리의 다른 글

도커 컴포즈  (0) 2021.01.12
Docker File  (0) 2021.01.04
컨테이너 자원 할당 제한  (0) 2020.12.30
컨테이너 로깅  (0) 2020.12.30
도커 네트워크  (0) 2020.12.30