- Docker image 생성
- Dockerfile 명령
MAINTAINER
- Docker image 빌드 작성자 이름과 이메일
LABEL
- Docker image 작성 목적으로 버전, 타이틀, 설명, 라이센스 정보 기술
- 1개 이상 작성 가능
- Docker Volume
- Union File System 사용
하나의 이미지로부터 여러 container를 만들 수 있는 방법 제공
image에 변경된 내용을 저장할 수 있도록 해줌
- Docker volume
db, 웹 프로그래밍등 업무에 사용하는 application 에서 발생하는 데이터에 접근하고, 이것을 공유하기 위해 사용
제공하는 서비스의 로직과 데이터는 반드시 분리됨
application에서 발생한 여러가지 데이터에 영향을 주지 않고 언제든 다른 container로 이전할 수 있다면 운영자는 데이터를 안전하게 관리하고 운영할 수 있다.
Docker volume은 container에서 생성, 재사용할 수 있고 host 운영체제이서 직접 접근 가능하다
보존되어야 하는 데이터를 유지 ( 데이터 영속성과 지속성 ) 하기 위한 메커니즘 제공
container 내부 데이터는 container의 lifectcle과 연관되어 container 종료 시 삭제
Docker Volume을 사용하면 container가 삭제도어도 Volume은 독립적으로 운영되기 때문에 함께 삭제되지 않는 특징
- Docker Volume 종류
- volume
Docker 에서 권장하는 방법
docker volume create [volume name] 명령 통해 생성
volume은 docker 명령으로 관리 - https://docs.docker.com/engine/reference/commandline/volume_create/
docker volume create - volume 생성
docker volume inspect - volume 상세 정보
docker volume ls - volume 목록
docker volume rm - volume 삭제 - container에 mount 된 상태에서는 삭제 불가능
docker volume prune - volume 삭제
여러 컨테이너간 안전하게 공유
volume 드라이버를 통해 원격 호스트 및 클라우드 환경에 volume 내용을 저장하고 암호화 할 수 있다.
새 volume 으로 지정될 영역에 데이터를 미리 채우고 container 에 연결하면 container 내에서 바로 데이터 사용 가능
-v 옵션으로 volume 을 마운트하면 inspect 정보중 HostConfig.Binds 항목과 GraphDriver.Mounts 항목
$ docker volume create my-share1
cp 로 index.html , calc.js 파일을 새로 만든 볼륨 안으로 복사함
마운트 후 bash 에서 볼륨 내 파일 확인
- bind mount
volume 에 비해 사용이 제한적
'host 파일 시스템 절대경로:container 내부경로' 를 직접 마운트 하여 사용 -> 컨테이너 생성시
사용자가 파일 또는 디렉토리를 생성하면 해당 host 파일 시스템의 소유자 권한으로 연결되고, 존재하지 않는 경우 자동생성, 자동 생성 디렉토리는 root 소유
container 생성 시 지정하여 사용하고, container 제거 시 bind mount는 해제되지만 host 디렉토리는 유지
별도의 mount volume 생성 없이 지정된 디렉토리 mount
- tmpfs mount
tmpfs mount 방법은 임시적이며 host 메모리에서만 지속되므로 container가 중지되면 tmpfs mount가 제거되고 내부에 기록된 내용은 삭제된다.
host 또는 container 쓰기 가능 계층에서 지속하지 않지만 중요한 파일을 임시로 사용하는 방법에 유용함
container 실행 시 지정하여 사용하고 container 제거시 자동 해제됨
ex) docker run -dit -p 80:80 --name webservice -v "$(pwd)"/webapp-log:/var/log/nginx -v "$(pwd)"/calc-web:/usr/share/nginx/html nginx
- nginx container에 volume을 통한 log 정보와 web application 정보 관리
- Docker Network
- Docker Network
docker coontainer 및 서비스는 Docker Network를 통해 격리된 container 간의 network 연결 뿐만 아니라 Docker 외의 다른 application 워크로드와도 연결
Docker Network 의 하위 시스템 연결을 위해 Docker Network Driver를 사용하여 상호 간 통신 가능
Docker network 정의
- Docker 설치 시 기본적으로 제공되는 docker0 는 소프트웨어적으로 구현된 가상 이더넷 브리지 네트워크 이고, 이것을 통해 격리된 container 들의 상호 간의 통신 제공
별도 브리지 네트워크를 생성하여 연결값으로 설정하지 않는 한 실행되는 모든 container 는 docker0 브지리에 연결하여 172.17.0.0/16 CIDR 범위로 IP 주소 할당
- Docker 관련 Network interface
- docker0
Docker 설치 시 기본적으로 제공되는 브리지 네트워크
172.17.0.1 주소
docker0 브리지는 소프트웨어적인 스위치 방식으로 동작됨
- DHCP로 연결된 container 에 사전에 정의된 IP pool 할당
- vethxxxxxx
OSI 7 계층 서비스 모델의 2계층 서비스로 container 내부에 제공되는 network interface eth0 와 한 쌍으로 제공되어 docker0 와 가상의 터널링 네트워크 제공
- eth0
Docker container 에 생성되는 기본 network interface 명으로 docker0를 게이트웨이로 사용
순차적으로 IP address 를 할당받거나 사용자가 동일 대역의 IP address 를 지정할 수 있다
- docker network 명령
- bridge
기본 network drive로 container 실행 시 별도의 network 지정 없이 독립적으로 실행될때 사용
브리지 모드는 동일 host 상의 Docker container 에만 적용
- host
container의 host 모드를 사용하면 container 와 host 간의 network 격리를 제거하고 host 의 network를 직접 사용함
container application 에 별도의 host 연결 없이 host port 를 이용하여 바로 서비스 할 수 있다.
- overlay
다중 host docker server를 이용한 cluster (Docker swarm) 등을 이용할 경우 docker daemon간 연결을 통해 container 서비스를 수행
container 간에 운영체제 수준의 routing을 사용하지 않아도 됨
docker cluster 인 Docker Swarm 구축 시 host와 host 간 container 연결에 사용됨
- macvlan
물리적 network에 container MAC 주소를 통한 직접 연결 구현시 사용됨
docker daemon은 MAC 주소별로 트래픽 라우팅함
- none
container 의 network 를 사용하지 않도록 설정
none network 로 설정하면 network interface는 lo interface (loopback adaptor)만 존재
container가 host networking stack 에서 완전히 분리되는 것으로 container는 외부와의 통신 단절
- container network
container:공유받을 container 이름 옵션은 container의 network namasapce stack을 공유하여 같이 사용할 수 있게 한다.
- 사용자 정의 네트워크
docker network create 명령을 통해 사용자가 직접 생성한 docker network
아무 옵션을 주지 않고 생성하면 docker0 IP 대역의 다른 CIDR를 지정하여 생성된다
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[10주-10.6] Kubernetes 개요 (0) | 2022.10.21 |
---|---|
[10주-10.5] Docker Network, Compose (0) | 2022.10.21 |
[9주-9.30] docker container 명령어2 (0) | 2022.10.05 |
[9주-9.29] docker container 명령어 (0) | 2022.09.29 |
[9주-9.28] Docker 환경 구성 (0) | 2022.09.29 |