본문 바로가기
반응형

DevOps128

[Docker] : 서비스 디스커버리 같은 컨테이너를 여러 개 만들어 사용할 때 문제가 되는 부분은 컨테이너 생성의 발견(Service Discovery)와 없어진 컨테이너 감지인데 스웜 모드는 서비스 발견 기능을 자체적으로 지원한다. docker network create -d overlay discovery 서비스가 사용할 오버레이 네트워크를 생성한다. docker service create --name server \\ --replicas 2 \\ --network discovery \\ alicek106/book:hostname docker service create --name client \\ --network discovery \\ alicek106/book:curl \\ ping docker.com 서비스 두 개를 생성한다. .. 2022. 3. 6.
[Docker] : 사용자 정의 오버레이 네트워크 사용자 정의 오버레이 네트워크 스웜 모드는 자체 키-값 저장소를 가지고 있어 사용자 정의 오버레이 네트워크를 생성하고 사용할 수 있다. docker network create \\ --subnet 10.0.9.0/24 \\ -d overlay \\ myoverlay -d 명령어로 네트워크 드라이버를 overlay로 설정하고 —subnet 옵션으로 오버레이 네트워크의 서브넷을 10.0.9.0으로 설정했다. 이렇게 설정한 네트워크의 이름은 myoverlay가 된다. docker network ls 명령어로 생성한 오버레이 네트워크를 확인한다. 새롭게 생성한 오버레이 네트워크의 SCOPE가 swarm으로 설정되어 있는데 이것은 스웜 클러스터에서만 사용할 수 있는 네트워크라는 뜻이고 매니저 노드에서 docker.. 2022. 3. 6.
[Docker] : docker_gwbridge 네트워크 docker network ls | grep docker 오버레이 네트워크를 사용하지 않는 컨테이너는 기본적으로 존재하는 브리지 네트워크를 사용해 외부와 연결하지만 오버레이 네트워크는 이와 다른 브리지 네트워크인 docker_gwbridge 네트워크와 함께 상요된다. docker_gwbridge 네트워크는 외부로 나가는 통신 및 오버레이 네트워크의 트래픽 종단덤(VTEP) 역할을 담당하게 된다. docker_gwbridge 네트워크는 컨테이너 내부의 네트워크 인터페이스 카드 중 eth1과 연결된다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 5.
[Docker] : 오버레이 네트워크 docker ps --format "table {{.ID}}\\t{{.Status}}\\t{{.Image}}" docker exec 컨테이너ID ifconfig 명령어로 컨테이너 내부에서 ifconfig 명령어를 실행해 가상 네트워크 인터페이스를 출력한다. docker ps --format "table {{.ID}}\\t{{.Status}}\\t{{.Image}}" docker exec 컨테이너ID ifconfig 컨테이너마다 eth0, eth1, lo가 할당 된 것을 확인할 수 있고 swarm-manager에서 생성도니 컨테이너와 swarm-worker1에서 생성된 컨테이너 IP 주소가 차례로 할당됐다는 것이다. ingress 네트워크는 오버레이 네트워크 드라이버를 사용하는데 여러개의 도커 데몬을 하나.. 2022. 3. 5.
[Docker] : ingress 네트워크 ingress 네트워크는 스웜 클러스터를 생성하면 자동으로 등록되는 네트워크다. 스웜 모드를 사용할 때만 유효하다. docker network ls | grep ingress 매니저 노드, 스웜 클러스터에 등록된 노드라면 전부 ingress 네트워크가 생성된다. docker service create --name hostname \\ -p 80:80 \\ --replicas=4 \\ alicek106/book:hostname 위 이미지는 컨테이너의 호스트 이름, 즉 임의로 할당된 16진수를 출력하는 PHP 파일이 들어있는 웹 서버이다. docker ps --format "table {{.ID}}\\t{{.Status}}\\t{{.Image}}" 각 노드에서 명령어로 컨테이너 ID를 확인한다. 어떤 노드의.. 2022. 3. 5.
[Docker] : 도커 스웜 네트워크 docker network ls 명령어로 네트워크 목록을 확인할 수 있다. 스웜 모드는 여러 개의 도커 엔진에 같은 컨테이너를 분산해 할당하기 때문에 각 도커 데몬의 네트워크가 하나로 묶인 네트워크 풀이 필요하다. 또, 서비스를 외부로 노출했을 때 어느 노드로 접근을 하더라도 해당 서비스의 컨테이너에 접근할 수 있게 라우팅 기능이 필요하다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 5.
[Docker] : config 사용하기 secret 사용과 거의 비슷하다. docker config create registry-config config.yml 레지스트리의 설정 파일을 registry-config라는 이름의 config로 저장한다. docker config ls data 항목이 있는 것을 확인할 수 있다. echo Data부분적기 | base64 -d config는 입력된 값을 base64로 인코딩해 저장하고, base64 명령어를 통해 디코딩해 원래 값을 확인할 수 있다. docker service create --name yml_registry -p 5000:5000 \\ --config source=registry-config, target=/ect/docker/registry/config.yml \\ registry:.. 2022. 3. 5.
[Docker] : secret 사용하기 secret을 생성하려면 docker secret create 명령어를 사용한다. echo qwer1234 | docker secret create my_mysql_password - my_mysql_password라는 이름의 secret에 qwer1234라는 값을 설정한다. 파일의 내용을 터미널에 출력해 이를 secret으로 가져올 수 있다. 지금은 echo를 통해 입력했다. docker secret ls secret를 조회하면 password가 출력되지 않는다. secret는 매니저 노드 간에 암호화된 상태로 저장된다. 이런 secret 파일은 컨테이너에 배포된 뒤에도 파일 시스템이 아닌 메모리에 저장되서 컨테이너가 삭제될 때 secret도 삭제된다. docekr service create \\ --.. 2022. 3. 4.
[Docker] : 서비스 컨테이너에 설정 정보 전달하기 : config, secret 이미지에 내장된 값을 쉽게 변경할 수 없기 때문에 확장성과 유연성이 떨어지게 된다. 이것을 해결하기 위해 docekr run -v 옵션을 통해 호스트에 위치한 설정 파일이나 값을 볼륨으로써 컨테이너에 공유한다. docker run -d --name yml_registry \\ -p 5002:5000 \\ --restart=always \\ -v $(pwd)/config.yml:/etc/docker/registry/config.yml \\ registry:2.6 도커 레지스트리를 생성해 준다. docker run -d \\ --name wordpressdb_hostvolume \\ -e MYSQL_ROOT_PASSWORD=password \\ -e MYSQL_DATABASE=wordpress \\ -v /.. 2022. 3. 4.
[Docker] : 서비스 롤링 업데이트 스웜 모드는 롤링 업데이트를 자체적으로 지원한다. docker service create --name myweb2 \\ --replicas 3 \\ nginx:1.10 테스트를 하기 위해 서비스를 생성한다. docker service update \\ --image nginx:1.11 \\ myweb2 이미지를 업데이트 하려면 update 명령어의 —image 옵션을 설정하면 된다. 서비스 내 컨테이너 목록을 확인하면 컨테이너 이미지가 변경된 것을 체크할 수 있다. docker service create \\ --replicas 4 \\ --name myweb3 \\ --update-delay 10s \\ --update-parallelism 2 \\ nginx:1.10 레플리카를 10초 단위로 업데이트.. 2022. 3. 4.
[Docker] : 스웜 모드의 서비스 장애 복구하기 복제 모드로 설정된 서비스 컨테이너가 정지하거나 특정 노드가 다운되면 스웜 매니저는 새로운 컨테이너를 생성해 자동으로 복구한다. docker ps docker rm -f myweb.1.d383jl79pix2b9kcrqukzpwoj 컨테이너를 조회하고 NAMES를 입력해 삭제해 본다. 지금 적어둔 것은 책에서 제공하는 예시이다. docker service ps myweb docker service ps 명령어를 통해 새로운 컨테이너가 생성된 것을 확인할 수 있다. 특정 노드가 다운됐을 때 역시 위와 같은 방식으로 작동한다. service docker stop 테스트를 위해 노드 하나의 도커 데몬 프로세스를 종료해 고장난 상태로 만들어 본다. docker node ls 명령어를 통해 노드의 STATUS가 D.. 2022. 3. 4.
[Docker] : global 서비스 생성하기 서비스 모드는 두 가지가 있는데 복제 모드와 글로벌 모드이다. 글로벌 서비스는 스웜 클러스터 내에서 사용할 수 있는 모든 노드에 컨테이너를 반드시 하나씩 생성하기 때문에 레플리카 셋의 수를 따로 지정하지 않는다. 글로벌 서비스는 스웜 클러스터를 모니터링하기 위한 에이전트 컨테이너 등을 생성해야 할 때 유용하다. docker service create --name global_web \\ --mode global \\ nginx docker service create 명령어에 —mode global을 추가해 생성할 수 있다 —mode 옵션을 따로 설정하지 않으면 기본으로 복제 모드를 사용한다. docker service ls docker service ps global_web 글로벌 서비스의 상태를 확인해.. 2022. 3. 4.
[Docker] : nginx 웹 서버 서비스 생성하기 —replica 옵션을 추가하고 Nginx 웹 서버 이미지를 이용해 서비스를 외부에 노출 시켜본다. docker service create --name myweb \\ --replicas 2 \\ -p 80:80 \\ nginx 레플리카 컨테이너를 정의하고 이름을 설정하고 컨테이너 80번 포트를 각 노드의 80번 포트로 연결하는 서비스를 생성한다. docker service ps myweb 생성된 컨테이너를 확인해 보면 스웜 클러스터 내의 노드 중 하나를 선택해 80번 포트로 접근, Nginx 웹 서버가 구동되는 것을 확인할 수 있다. docker service scale myweb=4 명령어를 통해 레플리카셋의 수를 늘이거나 줄일 수 있다. docker service ps myweb 컨테이너 목록을 다.. 2022. 3. 4.
[Docker] : 서비스 생성하기 docker service 명령어로 시작할 수 있다. docker service create \\ ubuntu:14.04 \\ /bin/sh -C "while true; do echo hello world; sleep 1; done" ubuntu:14.04 이미지로 서비스 내 컨테이너를 생성하고 컨테이너가 시작할 때 명령어로 “hello world”를 출력하는 셸 명령어를 설정한다. 서비스 내의 컨테이너는 detached 모드로 -d를 넣어 동작할 수 있는 이미지를 사용해야 한다. docker service ls 서비스를 생성했다면 서비스의 목록을 확인해 방금 생성한 서비스가 정상적으로 구동되고 있는지 확인해 본다. 스웜 클러스터 내의 서비스 목록을 확인하는 명령어이다. docker service ps .. 2022. 3. 4.
[Docker] : 스웜 모드 서비스 개념 도커 클라이언트에서 사용하는 명령어가 제어하는 것은 컨테이너다. 하지만 스웜 모드에서 제어하는 단위는 컨테이너가 아닌 서비스(Service)이다. 서비스는 이미지에서 생성된 컨테이너의 집합이고 서비스를 제어하면 해당 서비스 내의 컨테이너에 같은 명령이 수행된다. 서비스 내 컨테이너는 1개 이상 존재하고 각 컨테이너는 워커 노드와 매니저 노드에 할당이 되는데 이런 컨테이너들을 Task(태스크)라고 한다. 즉, 서비스 내의 컨테이너를 태스크라고 한다. 예를 들어 이미지로 서비스를 생성하고 컨테이너 수를 3개로 정하면 스웜 스케줄러가 적합한 노드를 선정하고 노드에 컨테이너를 분산 할당하게 된다. 이렇게 같이 생성된 컨테이너를 레플리카라고 하고 생성된 레플리카의 수 만큼 컨테이너가 스웜 클러스터 내에 존재해야 .. 2022. 3. 4.
[Docker] : 도커 스웜 모드의 구조 도커 스웜 모드의 구조 스웜 모드는 매니저 노드와 Worker(워커) 노드로 구성되어 있다. 워커 노드는 컨테이너가 생성되고 관리되는 도커 서버, 매니저 노드는 워커 노드를 관리하기 위한 도커 서버로 매니저 노드에도 컨테이너가 생성될 수 있는 만큼 매니저 노드는 워커 노드의 역할을 포함하고 있다. 매니저 노드는 1개 이상 있어야 하고 워커 노드는 없을 수도 있다. 매니저 노드만으로도 클러스터를 구성할 수 있다. 매니저 수를 늘린다 해서 스웜 클러스터 성능이 좋아지는 것은 아니다. 스웜 모드는 매니저 노드의 절반 이상에 장애가 생겨 정상적으로 작동하지 못 할 경우 장애가 생긴 매니저 노드가 복구될 떄까지 클러스터의 운영을 중단한다. 스웜 매니저는 가능한 홀수 개로 구성하는 게 좋다. 📖 ← [ 시작하세요!.. 2022. 3. 3.
[Docker] : 도커 스웜 모드 스웜 모드 스웜 모드는 별도 설치 과정이 필요가 없다. 도커 엔진 자체에 내장되어 있기 때문이다. docker info | grep Swarm 명령어로 도커 엔진의 스웜 모드 클러스터 정보를 확인할 수 있다. 처음에는 단일 도커 서버에서 사용해서 스웜 모드가 비활성화 상태로 설정되어 있을 수 있다. 2022. 3. 3.
[Docker] : 스웜 클래식과 도커 스웜 모드 스웜 클래식과 도커 스웜 모드 스웜 클래식과 스웜 모드는 여러 대의 도커 서버를 하나의 클러스터로 만들어 컨테이너를 생성하는 여러 기능을 제공한다. 컨테이너를 득정 도커 서버에 할당도 가능하고 유동적으로 서버도 확장할 수 있다. 스웜 클러스터에 등록된 서버의 컨테이너를 쉽게 관리할 수 있다. 도커 스웜 모드가 실제 운영 환경에서 많이 쓰이지는 않지만 서버 클러스터에서 컨테이너를 어떻게 다루는지 기초 지식을 쌓기엔 좋다. 도커 스웜에는 두 종류가 있는데 하나는 도커 버전 1.6 이후부터 사용할 수 있는 컨테이너로서의 스웜이고 두 번째에는 도커 1.12 이후부터 사용할 수 있는 도커 스웜 모드이다. 두 종류를 구분하기 위해 첫 번째를 스웜 클래식, 두 번째를 스웜 모드라고 부른다. 스웜 클래식과 스웜 모드의.. 2022. 3. 3.
[Docker] : 도커 스웜을 사용하는 이유 도커 스웜을 사용하는 이유 앞에서 보통 하나의 호스트를 기준으로 한다. docker ps 명령어는 하나의 도커 엔진에 존재하는 컨테이너의 목록을 출력하고 create, run 명령어 또한 하나의 도커 엔진에 컨테이너를 생성한다. 하지만 도커를 운영 환경에 실제로 적용하면 조금 달라진다. 하나의 호스트 머신에서 도커 엔진을 구동하다 CPU나 메모리 디스크 용량과 같은 자원이 부족한 경우가 있는데 이때 가장 편한 답은 성능이 좋은 서버를 새로 사는 것 이지만 별로 좋은 방법이 아니고 가장 많이 사용하는 방법은 여러 대의 서버를 클러스터로 만들어 자원을 병렬로 사용하는 것이다. 이렇게 되면 적당한 성능의 서버 여러 대를 하나의 자원 pool로 만들어 사용할 수 있고 성능이 좋은 비싼 서버를 사지 않아도 된다... 2022. 3. 3.
[Docker] : 도커 파이썬 라이브러리 파이썬 라이브러리를 사용하기 위한 환경은 Python 2.7이다. 리눅스를 설치하면 기본적으로 파이썬이 설치되어 있어서 도커 엔진을 리눅스 환경에서 사용하고 있으면 따로 설치가 필요 없다. 도커 홈페이지에서 docker-py로 파이썬 라이브러리를 확인할 수 있다. apt-get install python-pip -y 우분투에서 pip 설치 yum install epel-release -y yum install python-pip -y CentOS에서 pip 설치 pip install docker pip로 도커 라이브러리를 설치한다. 라이브러리 설치를 확인하기 위해 파이썬 셸을 실행해 도커 클라이언트를 실행한다. python import docker client=docker.DockerClient(base.. 2022. 3. 3.
[Docker] : 도커 자바 라이브러리 라이브러리 환경은 Eclipse Neon 64bit, Java 1.8.0 64bit, Maven3.3.3이다. 사용할 라이브러리는 공식 홈페이지에서 지원하는 docker-client이다. 🔗 ← 깃허브에서 확인이 가능하다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 2.
반응형