Micro Service Architecture/Docker (22) 썸네일형 리스트형 23. Docker Network - Host 1. 개념 : container의 네트워크 스택은 Docker host와 분리되지 않으며, container는 host의 namespace를 공유. - 이에 따라 자체 IP 주소를 할당받지 않고 port 80을 바인딩하는 container는 호스트 IP 주소에 있는 port 80을 사용할 수 있음. - vmware의 host network 와는 다름. 2. 컨테이너 생성 # nginx 컨테이너를 host 네트워크로 생성 $ docker run -itd --name=test_nginx_1 --net=host nginx:latest 3. 네트워크 확인 # test_nginx_1 컨테이너가 할당되었지만 IP 정보는 없음. $ docker network inspect host ... "Containers": {.. 22. Docker Network - Bridge (net-alias) 1. 목적 : 동일 역할을 하는 컨테이너를 같은 그룹으로 묶고 로드밸런싱등의 기능을 수행할 수 있음. - 외부 트래픽 → net-alias 그룹내 컨테이너1,2,3.... 2. bridge network 생성 $ docker network create --driver bridge --ip-range 172.22.0.0/16 --subnet 172.22.0.0/16 --gateway 172.22.0.1 test_default 3. 컨테이너 생성 및 그룹핑 # frontend, backend 모두 같은 브릿지 네트워크에 할당하고 backend 컨테이너 들은 alias1 이라는 이름으로 그룹핑. # backend $ docker run -itd --name=test_nginx_1 --net=test_defau.. 21. Docker Network - Bridge (네트워크 공유) 1. 네트워크 공유 : - 컨테이너 가상 인터페이스를 공유. - 같은 IP을 가상 인터페이스에 할당 받게 됨 2. 네트워크 생성 # 172.22.0.0/24 대역의 172.22.0.1의 게이트웨이를 가지는 test_defualt이름의 브릿지 네트워크 생성 $ docker network create --driver bridge --ip-range 172.22.0.0/16 --subnet 172.22.0.0/16 --gateway 172.22.0.1 test_default 3. 컨테이너 생성 및 네트워크 할당 # nginx 컨테이너를 test_nginx_1 이름으로 test_default 네트워크로 할당 $ docker run -itd --name=test_nginx_1 --net=test_default -.. 20. Docker Network - Bridge (기본) 1. docker 초기 네트워크 list : cluster가 아닌 단독 머신 $ docker network ls NETWORK ID NAME DRIVER SCOPE 102b4a4b9e3c bridge bridge local # bridge 모드 f77f1779e8f2 host host local # 호스트와 만 통신 66f90b6293cc none null local # 없음. 2. 통신 흐름 (위 그림 참조) - 외부 → 호스트 eth0 → docker0 (docker bridge) → veth*(docker0 ↔ container 사이의 가상 인터페이스) → container eth0 3. 인터페이스 확인 # 컨테이너 2개가 실행 중이고 새로운 브릿지(test_default)를 생성해 할당 $ doc.. 19. docker-compose 문법 1. version : docker compose 버전, 버전 별로 차이가 있으므로 버전을 정이해주는 것이 좋음. version: "3" 2. image : 로컬에 이미지가 없다면 docker hub에서 다운로드하여 베이스 이미지로 사용. services: # 컨테이너의 서비스라는것을 정의 nginx: # [이미지명]: image: centos:7 # image: [이미지명]:[태그명] 3. build : 이미지를 정의할때 dockerfile을 사용하여 빌드할 수 있음. # dockerfile이 같은 디렉토리 내에 있으면 # docker-compose.yml services: nginx: build: . # dockerfile이 다른 디렉토리에 있다면 services: nginx: build: conte.. 18. [docker] Bash Completion docker 명령어 사용시 자동완성(tab 사용) 기능을 제공 ## 패키지 설치 yum install bash-completion ## 다운로드 curl -o docker_completion.sh https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker ## 실행 source /PATH/TO/docker_completion.sh or echo "source /PATH/TO/docker_completion.sh" >> ~/.bashrc 17. [docker] Private Registry(Harbor) 설치 및 Portainer 연동 1. 필수 유틸 : Docker, Docker-compose - 참조 : 기본 SSL 통신을 하며 인증서가 필요하지만 테스트 구축에는 https 없이 http로 통신 ## DOCKER 설치 [root@Harbor harbor]# curl -s https://get.docker.com | sudo sh ## docker-compose 설치 [root@Harbor harbor]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose [root@Harbor harbor]# chmod +x /usr/local/bin/doc.. 16. [docker] Portainer 설치 1. Docker swarm cluster 를 remote로 API를 통해 연결 하는 manager tool인 Portainer 서버 구축 2. Portainer는 컨테이너 기반이라 기본적으로 docker 가 설치 되어야 한다. 3. 설치 ## Docker 설치 [root@Docker-Portainer ~]# curl -s https://get.docker.com | sudo sh ## iptables disable [root@Docker-Portainer ~]# systemctl stop firewalld [root@Docker-Portainer ~]# systemctl disable firewalld ## Docker start [root@Docker-Portainer ~]# systemctl res.. 15. [docker] Container Health Check 1. 구동 중인 task에 health check 값을 줘서 실패시 마이그레이션 TEST ## docker1에서 curl 로 cmd를 주고 일정 시간간격으로 체크 ## 주의 : cmd로 줄 명령어가 해당 컨테이너에 포함 되어 있어야 함. [root@docker1 ~]# docker service update --health-cmd 'curl ' --health-interval 3s --health-retries 2 --health-timeout 2s test1 test1 overall progress: 1 out of 1 tasks 1/1: running [==================================================>] [root@docker1 ~]# docker servi.. 14. [docker] Service로 CentOS, Ubuntu 등의 Base OS를 실행할때 오류 1. 테스트 : CentOS Base 이미지를 서비스 실행 ## test3 으로 centos 생성 [root@docker1 ~]# docker service create --name test3 centos x25funyde39kb7hvf67hmycfg overall progress: 0 out of 1 tasks 1/1: ready [======================================> ] verify: Detected task failure ^COperation continuing in background. Use `docker service ps x25funyde39kb7hvf67hmycfg` to check progress. ## 아래와 같이 ready -> Ruunning -> .. 이전 1 2 3 다음