2021.11.05 TIL

Docker Resistry

  • 도커 이미지 데이터 베이스 역할.

  • 누구나 이미지를 생성해서 푸쉬 및 다운로드가 가능하다.

    • 개인 이미지의 경우, [사용자 이름]/[image 이름]을 명시해서 만들어진다.
  • private registry를 사용할 수 있다.


1. 사용 방법

  1. 도커 허브(docker hub)를 사용

    • docker hub에 이미지 업로드를 하기 위해서는 회원가입이 필요하다.

  1. dockerhub에 등록된 이미지를 cli를 통해 사용
  • docker search
sudo docker search tomcat


  1. docker image 받기
  • docker pull [이미지 이름]

Docker Lifecycle


(출처 : 왕초보도 따라하는 도커 기초 강의)

  • push : 이미지를 resistry에 저장하는 명령어
    • image를 push를 하기 위해서는 권한이 필요하다.
  • pull : resistry로 부터 이미지를 다운받는 명령어

    • image를 실행하기 위해서는 Container가 필요하다.
  • create : Container를 생성하는 명령어

  • run : create + start

    • 원래는 pull + create + start
    • pulling이 되어있는 이미지일 경우, Pull을 별도로 실행되지 않는다.
    • run으로 계속 실행시킬 경우, 계속해서 Container가 생성되는 부작용이 있다.
  • stop : memory에서 꺼지는 역할

  • rm : container를 삭제하는 명령어 (이미지는 삭제되지 않는다.)

  • rmi : 이미지를 삭제하는 명령어

  • commit : 기존 컨테이너를 이미지화 시킬 수 있는 명령어

    • 해당 컨테이너에 파일들을 많이 다운받고 해당 이미지를 기억하고 싶은 경우, commit!

docker lifecycle 명령어

(1) 도커 이미지 관련 명령어

1. 도커 명령어 이미지 다운로드

docker pull nginx

2. 도커 이미지 삭제

sudo docker rmi nginx

3. 이미지 목록 조회

sudo docker images

4. 컨테이너를 이미지로 변경

sudo docker commit -a "cooper0205" -m "my first commit" cooper-nginx cooper-repo:first
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

  • ex) sudo docker commit -a


(2) 도커 컨테이너 관련 명령어

4. mysql 컨테이너 생성 및 실행

sudo docker run -d --name nginx nginx
  • -d : background로 실행시킬 때 사용하는 명령어

  • --name : container의 이름을 부여하는 옵션

5. mysql 컨테이너만 생성

sudo docker create -p 80:80 nginx
  • -p : 외부포트와 container 내부 포트를 연결하는 옵션 (port forwarding)
    • ex) -p [호스트 IP]:[호스트 포트]:[컨테이너 포트]

6. 컨테이너 확인

sudo docker ps 
  • docker ps : 실행중인 컨테이너만 확인하는 명령어

  • -a : 모든 컨테이너를 확인하는 명령어

7. 생성된 컨테이너 실행

sudo docker start cooper-nginx

8. 컨테이너 중지

sudo docker stop cooper-nginx

9. 컨테이너 삭제

sudo docker rm cooper-nginx
  • 컨테이너를 삭제하기 위해서는 컨테이너가 중지 상태여야 한다.

Docker Image


(출처 : 왕초보도 따라하는 도커 기초 강의)

  • Image : 서비스 운영에 필요한 서버 프로그램, 소스코드 및 라이브러리, 컴파일된 실행 파일을 묶은 형태

  • Layer : 도커 이미지를 구성하는 실제 데이터 형태 (쪼개서 저장된다.)

  • docker info 명령어를 통해서 아래와 같은 정보를 확인할 수 있다.

    • Layer와 image 저장 위치를 확인할 수 있다./var/lib/docker
    • storage Driver에 관한 정보 또한 확인할 수 있다.
Storage Driver: overlay2
Docker Root Dir: /var/lib/docker
  • 해당 디렉토리의 byte 사이즈를 확인할 수 있는 명령어
du -sh image

2. 이미지 & 레이어 구조를 한번 살펴보자.

1. docker container 정보 파악하기

docker inspect nginx # nginx의 이미지에 관한 정보를 조회
  • 해당 container의 ID/Hostname/LogPath/Resource 등 전반적인 모든 정보를 알 수 있다.
  • nginx conatiner 관련 정보들
[
	"Created": "2021-10-12T02:03:40.360294686Z",
	"Container": "21fd1c6cb532225ca7e04c77f6592e220574b919aec07021663576ef438e0fee",
    	"Cmd": [
                    "/bin/sh",
                    "-c",
                    "#(nop) ",
                    "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
                ],
	"Image": "sha256:e30f1b92b2c67fbe72fb24af7353a945f6df4f48d9064d47bf0f51674311251e",
	"RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:e81bff2725dbc0bf2003db10272fef362e882eb96353055778a66cda430cf81b",
                "sha256:43f4e41372e42dd32309f6a7bdce03cf2d65b3ca34b1036be946d53c35b503ab",
                "sha256:788e89a4d186f3614bfa74254524bc2e2c6de103698aeb1cb044f8e8339a90bd",
                "sha256:f8e880dfc4ef19e78853c3f132166a4760a220c5ad15b9ee03b22da9c490ae3b",
                "sha256:f7e00b807643e512b85ef8c9f5244667c337c314fa29572206c1b0f3ae7bf122",
                "sha256:9959a332cf6e41253a9cd0c715fa74b01db1621b4d16f98f4155a2ed5365da4a"
            ]
        },
	"ExposedPorts": {
		"80/tcp": {}
	}
]
  • id : image id
  • ExposedPorts : 외부와 연결하는 포트 정보
  • cmd : 어떤 프로세스를 어떻게 실행할 명령어 관한 정보를 제공한다.
  • RootFS (파일 시스템에 관한 정보)
    • Layers : layerid에 관한 정보

(아직 너무 어렵다.. 나중에 다시 읽어보기 관련글)


3. docker 저장소를 뜯어보자.

  • default docker 저장소 위치 : /var/lib/docker
  • 결론 : 레이어를 축적할수록 l directory의 정보가 늘어난다.
# /var/lib/docker 내부

- /images : 
	- imagedb : image에 관한 메타데이터가 저장되어 있음
    - layerdb : layer에 관한 메타데이터가 저장되어 있음
/overlay2/l : layer의 변경 내역에 관한 정보는 저장하는 공간 (파일시스템으로 저장되어 있다.)

Refrence

좋은 웹페이지 즐겨찾기