[도커/Docker] Ch2. 도커 엔진 (I)

2021. 4. 3. 19:0004. Archives/독서

728x90
반응형

2.1. 도커 이미지와 컨테이너

도커 엔진의 핵심

- 이미지

- 컨테이너

 

2.1.1. 도커 이미지

이미지 : 컨테이너를 생성할 때 필요한 요소 ( = 가상 머신 생성 시 사용하는 iso 파일 )

- 여러 계층의 바이너리 파일로 존재

- 컨테이너 생성, 실행 시 읽기 전용으로 사용

- 도커 명령어로 다운로드 가능 -> 별도 설치 필요 X

- 이미지 이름 : [저장소 이름]/[이미지 이름]:[태그] 

 

2.1.2. 도커 컨테이너

앞서 다운 받은 이미지로 컨테이너를 생성

-> 해당 이미지의 목적에 맞는 파일시스템, 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간 = 컨테이너

특징

- 이미지를 읽기 전용으로 사용하고, 변경된 사항만 컨테이너 계층에 저장 -> 원래 이미지는 영향을 받지 않음

- 생성된 각 컨테이너는 각기 독립된 파일시스템 제공 -> 수정되어도 다른 컨테이너에 영향 X

 


2.2. 도커 컨테이너 다루기

다양한 명령어에 대한 설명이 나오는 챕터

# 도커 엔진의 버전 확인
docker -v

# 옵션에 대한 설명은 뒤에 나올 예정
# -i -t 상호 입출력을 가능하게 함
docker run -i -t ubuntu:14.04

# 도커 이미지를 내려받을 때
docker pull centos:7

# 도커 엔진에 존재하는 이미지 목록 출력
docker images

# 컨테이너 생성할 때 run이 아닌 create 명령어 사용 가능
# --name 옵션으로는 컨테이너 이름 설정 가능
# create 명령어는 컨테이너를 생성하기만 함
docker create -i -t --name mycentos centos:7

# 생성한 컨테이너를 실행하기 위해서는 start, attach 사용
# start : 컨테이너 시작
docker start mycentos
# attach : 내부로 접근
docker attach mycentos

# 실행 중인 컨테이너 목록 확인
docker ps

# 정지된 컨테이너로 출력
docker ps -a

# 컨테이너 삭제 -> 정지된 컨테이너만 삭제 가능
docker rm [컨테이너 이름]

# 컨테이너 정지 후 삭제
docker stop [컨테이너 이름]
docker rm [컨테이너 이름]

# 실행 중인 컨테이너 삭제
docker rm -f [컨테이너 이름]

# 모든 컨테이너 삭제
docker container prune

# 컨테이너의 실행 상태와 관계없이 모든 컨테이너 정지하고 삭제
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

# 컨테이너 포트 외부로 연결하기
# -p [호스트의 포트]:[컨테이너의 포트]
docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04
# 여러 개의 포트 개방
docker run -i -t -p 3306:3306 -p 192.168.0.100:7777:80 ubuntu:14.04

책에서 보는 명령어들 말고 이런저런 환경 구축을 해봤는데 제일 많이 썼던 명령어는 아래 두 명령어다

docker ps -a
docker rm [컨테이너 이름]

아직 뭐 그럴싸한 환경을 구축해서 쓰는게 아니다보니 계속 만들고 지우고를 반복하고 있다.

 


2.3. 도커 이미지

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

- 도커가 공식적으로 제공하고 있는 이미지 저장소로서, 도커 계정을 가지고 있다면 누구든지 이미지를 올리고 내려받을 수 있음

   -> 다른 사람들에게 이미지 공유 용이

2.3.1. 도커 이미지 생성

도커로 개발하는 많은 경우, 컨테이너에 특정 개발 환경을 직접 구축한 뒤 사용자만의 이미지 직접 생성 필요

# 기본 이미지 생성
docker run -i -t --name commit_test ubuntu:14.04

# 위의 명령어를 입력하면 우분투 쉘로 진입
echo test_first! >> first
exit (다시 일반 터미널로 돌아가기)

# 수정한 컨테이너 이미지로 만들기
# docker commit -a [작성자] -m [커밋 메시지] [컨테이너 이름] [레포지토리 이름]:[태그]
docker commit -a sunandbean -m "my first commit" commit_test commit_test:first

# 이미지 조회
docker images

2.3.2. 이미지 구조 이해

# 모든 도커 단위의 정보 얻기
docker inspect [컨테이너 이름]

-> 여기서 출력되는 Layers 항목을 보면 겹치는 부분과 겹치지 않는 부분이 있다. 작업을 덮어서 새로 이미지를 만든 경우에는 겹치는 부분이 있는 것을 볼 수 있다.

 

생성한 이미지 삭제하는 방법

# 이미지 삭제하기
docker rmi commit_test:first

# 이 경우, 해당 이미지를 이용하고 있는 컨테이너를 모두 삭제해야 완전히 삭제가 가능하다
docker stop commit_test2 && docker rm commit_test2
docker rmi commit_test:first

 

위에 적은 방법들을 이용해서 이미지를 생성할 수도 있지만, 도커파일이라는 파일을 생성해서 이미지를 생성할 수도 있다.

 

이 방법을 훨씬 많이 쓸 수 있기 때문에, 추후 포스팅에 다시 다뤄보겠다.

반응형