- Docker Network
별도 브리지 네트워크를 생성하여 연결값으로 설정하지 않는 한 실행되는 모든 container 는 docker0 브리지에 연결하여 172.17.0.0/16 CIDR 범위로 IP 주소 할당 - /16 - 65,536개 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 Driver는 Docker engine의 일부이며 추가 구성은 필요 없다.
docker network ls 명령 - Docker Network 목록 확인 명령
- Docker network 종류
- Bridge network (default)
아무 설정 없이 사용했을때 기본적으로 사용하는 network
host와 별도의 가상 네트워크 사용
port 포워딩으로 (docker run -p 옵션) 외부 network와 연결
- docker run -d -p 80:80 --name webserver2 nginx
- Host network
container의 network 환경을 host의 network 환경과 동일하게 사용
port 포워딩 없이 host와 container를 직접 제어함
- docker run -d --net host --name webserver2 nginx
- None network
network를 사용하지 않고 local network (docker virtual network) 만 사용함
host나 외부와 연결이 단절
docker run 명령 사용시 --net(--network) 옵션을 사용하여 network 를 선택할 수 있음
- container가 동작하는 network 결정
- docker network 명령
docker network ls - docker network 목록 출력
docker network create [option] [network name] - docker network 생성
- -d [drive 명] : drive 지정, default driver - bridge
docker network rm [network name] - docker network 삭제
container에 할당된 IP Address 확인 방법
- container에 대한 inspect 명령 결과에 grep 명령으로 확인
- docker inspect server | grep IPAddress
- container의 application 에 대하여 network 명령으로 확인
- docker exec server ifconfig eth0
- Docker Network 구성 요소별 확인 명령
브리지 네트워크 조회 명령
- 브리지 네트워크 조회 명령 사용을 위한 패키지 설치
- sudo apt install bridge-utils (ubuntu)
- 브리지 네트워크 조회 명령
- brctl show
- docker info | grep Network 명령 수행시 출력 결과 설명
- bridge
기본 network driver로 container 실행 시 별도의 network 지정 없이 독립적으로 실행되는 application container 를 실행할 때 사용됨
브리지 모드는 동일 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 namespace stack을 공유하여 같이 사용할 수 있게 한다.
- 사용자 정의 네트워크
docker network create 명령을 통해 사용자가 직접 생성한 Docker network 로 아무 옵션을 주지 않고 생성하면 docker0 IP 대역의 다른 CIDR를 지정하여 생성된다.
- Docker 기본 bridge network
Docker 기본 network 구성은 bridge network 모드 사용
bridge network 구성은 docker daemon을 통해 docker container 만의 network 를 실제 server(host) network와 분리해 독립적으로 구성하는 network 방식이다.
외부 web browser에서 web server container 로 의 접근 과정
1. web browser 에서 'http://host ip:port' 를 통해 접속
2. host o/s 에 해당 port 가 열려 있음을 확인하고 해당 port 가 연결된 container를 찾음
- sudo netstat -nlp | grep 80
- ps -ef | grep 137592 | grep v grep
3. 해당 container가 연결된 bridge network의 private IP와 port 번호로 사용자가 입력한 외부 IP와 port 번호가 변환
4. 이때 사용되는 서비스가 NAPT(Network Address Port Translation)이고, NAT에서는 발신자 사설망 to 외부망 IP 를 변환해 주는 역할만 수행했다면 NAPT 에서는 port 까지 바꿔서 보내는 역할을 수행함
docker 모드는 docker0 뿐만 아니라 사용자 정의 형태로 사용 가능
docker entwork create 명령을 통해 network 대역이 다른 bridge network 를 생성하여 해당 network 에 속한 application 간의 전용 통신이 가능함
- Docker Compose
- Docker를 이용한 Application 배포 과정
Docker Image 생성 또는 download
- docker pull
- docker build : 이미지 생성
Docker container 생성 - application 실행
- docker create / start
- docker run
위 명령으로 container 를 생성 실행할 수 있지만 CLI 상에서의 명령이기 때문에 복잡성이 증가함
container orchestration 도구 - 여러 container 생성을 통한 배포 과정을 일괄적으로 관리할 수 있는 도구
- Docker Compose
공통성을 갖는 container application stack 을 YAML 코드로 정의한 정의서이며, 정의서를 실행하는 다중 container 실행 도구이다. - IaC 도구
Docker Compose 로 실행된 container는 독립된 기능을 가지며 공통 network 로 구성되기 때문에 container 간 통신이 쉬움
Docker Compose는 공통성 있는 container 들을 포함하여 쉽고 빠른 run-time 환경을 제공함
Docker Compose는 test,development,operation 의 모든 환경에서 구성이 가능한 orchestration 도구중 하나임
다양한 관리 기능을 가지고 있지 않기 때문에 test와 development 환경 구성에 적합함
실제 운영 환경은 많은 관리적 요소가 필요하므로 Docker Swarm 이나 Kubernetes와 같은 orchestration 도구 사용
- Docker Compose YAML 코드 구조
참고 - https://docs.docker.com/compose/compose-file/
version: “3.8” services: 서비스명1: # application 설정값 정의1 서비스명2: # application 설정값 정의2 … networks: # network 설정, 미지정 시 자동 생성 volumes: # volume 설정 |
YAML 파일 이름 - docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml
일반적으로 설계상 가장 먼저 실행되어야 하는 application 을 먼저 작성하고, 이와 의존성을 갖는 DataBase 및 하위 application 작성
cluster 환경 구성은 master node 를 먼저 작성하고 이어서 work node 작성
이후 전체 app에 필요한 network, volume 등의 기반 환경 기술
- version
가장 상단에 기술
docker engine 버전과 연관, docker engine에 따른 버전 번호 기술
참고 - https://docs.docker.com/compose/compose-file/compose-versioning/
- service
docker compose 를 통해 실행할 서비스 정의
docker compose는 container대신 service 개념 사용
service - container 이름
service 명 다음에 해당 contaienr 를 생성하기 위해 필요한 정보를 기술
build 속성 - dockerfile 을 이용한 image 생성 시 사용
depnds_on 속성 - 의존성 서비스 명시, 의존성 서비스를 먼저 실행함
- Docker Compose 작업 절차
1. 각각의 image 생성을 위한 Dockerfile 작성 or 기존 image 사용
2. Docker Compose 에서 사용할 YAML 파일 작성
- 각각 독립된 container의 실행 정의 명시
3. docker compose 명령을 이용하여 container 일괄 생성
- container 생성 이후 start, stop, status, ls 등의 명령으로 container 관리
4. docker compose 명령으로 container 일괄 삭제
- Docker Compose 명령
참고 - https://docs.docker.com/compose/reference/
- docker compose version
버전확인
- docker compose up
YAML 파일에 기술된 내용을 참조하여 container service 생성
docker compose 로 생성되는 service, network 이름은 [서비스명 (docker compose 명령 실행 디렉토리명)] - [서비스명][-숫자] 형식으로 부여됨
- docker compose ps
docker compose 로 생성된 container 목록 출력
- docker compose down
docker compose up 에 의해 생성된 container service 삭제
- Amazon ECR 서비스
- container 저장소 (registry)
- public registry
hub.docker.com : 대표적인 public registry
hub.docker.com 에 생성된 repository에 image 저장 :
1. hub.docker.com 에 repository 생성
- 기본적으로 사용자 id 명의 repository가 생성되어있음
- 필요시 create repository를 선택하여 생성
2. repository에 저장할 image 생성
- repository에 저장할 image 이름 형식 : [repository명]/[image명]:[버전정보]
- 기존 image 이름에 [repository명] 을 추가하는 형태로 변경 : docker tag [현재image명]:[버전] [새로운image명]:[버전]
3. hub.docker.com login
- docker login 명령 사용
4. hub.docker.com 에 image push (upload)
- docker push [repository name]/[image name]:[version]
- private registry
hub.docker.com 에 무료로 1개 private repo 생성 가능
- Amazon ECR (Elastic Container Registry)
참고
- https://aws.amazon.com/ko/ecr/
- https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/what-is-ecr.html
aws 완전 관리형 컨테이너 이미지 레지스트리 서비스
구성요소
- 레지스트리
- 사용자 권한 토큰
- repository
- repository 정책
- 이미지
- Amazon ECR 사용
1. AWS CLI 사용자 등록
AWS CLI 설치
- ubuntu - sudo apt install awsli
aws configure 명령으로 AWS CLI 자걱 증명 등록
2. Amazon ECR 에 registry 생성
서비스 - 컨테이너 - ECR - 레지스트리 생성 시작
private, repository name : push 할 image 이름
3. ECR 에 생성된 REGISTRY 에 docker image push / pull
인증 토큰을 검색하고 레지스트리에 대해 docker client 인증 명령 실행 - docker login 과 동일한 동작
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <ECR repository URI>
docker image 생성
- docker build . -t [ecr repository url]:[version]
생성된 image를 ECR 에 push
- docker push [ecr repository uri]:[verison]
'Kubernetes > [구름] 쿠버네티스 전문가 양성 과정 k-digital' 카테고리의 다른 글
[10주-10.7] Kubernetes 환경 구성 (1) | 2022.10.22 |
---|---|
[10주-10.6] Kubernetes 개요 (0) | 2022.10.21 |
[10주-10.4] Docker Image 생성 (0) | 2022.10.05 |
[9주-9.30] docker container 명령어2 (0) | 2022.10.05 |
[9주-9.29] docker container 명령어 (0) | 2022.09.29 |