Swarm + Portainer + Docker compose 예제 실행

Swarm + Portainer + Docker compose 예제 실행

반응형

3대의 CentOS 서버를 이용해 도커 스웜 클러스터 구축하고 도커 컴포즈로 Wordpress예제를 배포하는 예제를 진행해보자.

해당 글은 아래 내용에 대해서 간단하게 학습할 수 있다.

도커 및 도커 컴포즈 설치하기

도커 스웜 클러스터 구축하기

도커 스웜에 portainer 설치하고 실행하기

도커 컴포즈로 스웜 클러스터에 배포하기

출처: https://hub.docker.com/_/swarm

목차

환경 구성

도커 및 도커 컴포즈설치

도커 스웜 모드 클러스터 구축

Portainer

도커 컴포즈로 스웜 클러스터에 배포하기

환경 구성

CentOS 7의 서버 3대로 진행하겠다.

서버 구성은 다음과 같다.

manager1

worker1

worker2

도커 및 도커 컴포즈설치

3대의 서버 모두에 도커와 도커 컴포즈를 설치해준다.

Docker CE 설치

저장소 설정

# 도커 설치에 필요한 패키지 설치 $ sudo yum install -y yum-utils # stable 저장소 설정 $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

Docker CE 설치

# 도커 설치 $ sudo yum install docker-ce # 도커 실행 $ sudo systemctl start docker # 도커 설치 확인 $ docker -v Docker version 20.10.9, build c2ea9bc

도커 컴포즈 설치

Docker compose github 저장소 에서 Docker Compose binary를 다운로드한다.

# Docker Compose stable 버전을 다운로드 $ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 바이너리 실행 권한 적용 $ sudo chmod +x /usr/local/bin/docker-compose # 도커 컴포즈 설치 확인 $ docker-compose -v docker-compose version 1.29.2, build 5becea4c

도커 스웜 모드 클러스터 구축

스웜 생성

manager1 서버에서 아래 명령어를 실행해 스웜 클러스터를 시작하자.

$ docker swarm init

만약 다른 서버(worker1, worker2)에서 실행하려면 -advertise-addr 옵션으로 manager1 서버의 IP를 값으로 넣고 실행하면 된다.

$ docker swarm init --advertise-addr <매니저_서버_IP>

docker swarm init 명령어를 실행하면 아래와 같은 결과가 출력된다.

$ docker swarm init Swarm initialized: current node (nc6nctkgdta8dq56066nctq84) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-2mano6rh1kvio3c9xigrdg9je1us5lzwyhdwdpmph1vu4j0y22-6rh1kav6rh1krchp1xezl6rhj \ 10.192.113.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

출력 결과 중에 docker swarm join 명령어는 새로운 워커 노드를 추가하는 명령어이다.

해당 명령어를 복사해서 워커 서버에서 실행하면 해당 스웜 클러스터에 노드를 추가할 수 있다.

반응형

스웜 클러스터에 노드 추가

worker1 서버에 docker swarm init 명령어를 실행해서 나온 출력 결과 중 아래 명령어를 복사해 실행한다.

$ docker swarm join \ --token SWMTKN-1-2mano6rh1kvio3c9xigrdg9je1us5lzwyhdwdpmph1vu4j0y22-6rh1kav6rh1krchp1xezl6rhj \ 10.192.113.100:2377

만약 토큰을 까먹었으면 아래 명령어를 매니저 노드(manager1)에서 실행해서 다시 확인할 수 있다.

$ docker swarm join-token worker

worker2에도 동일한 명령어를 실행해주자.

$ docker swarm join \ --token SWMTKN-1-2mano6rh1kvio3c9xigrdg9je1us5lzwyhdwdpmph1vu4j0y22-6rh1kav6rh1krchp1xezl6rhj \ 10.192.113.100:2377

manager1 서버에서 아래 명령어를 실행해 정상적으로 스웜 클러스터가 구축되었는지 확인할 수 있다.

$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION mggi1bppywc7czml8j7x78nd4 * manager1 Ready Active Leader 20.10.9 cm73640uqdyveaqrw0ea07fx1 worker1 Ready Active 20.10.9 tdy9fhwhkpw5bdfxgp7lzh7jy worker2 Ready Active 20.10.9

Portainer

Portainer는 Docker Container를 효율적으로 관리할 수 있는 GUI 툴이다.

설치

stack YML를 다운로드한다.

curl -L https://downloads.portainer.io/portainer-agent-stack.yml \ -o portainer-agent-stack.yml

portainer-agent-stack.yml은 아래와 같이 구성되어 있다.

version: '3.2' services: agent: image: portainer/agent:2.9.1 volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes networks: - agent_network deploy: mode: global placement: constraints: [node.platform.os == linux] portainer: image: portainer/portainer-ce:2.9.1 command: -H tcp://tasks.agent:9001 --tlsskipverify ports: - "9443:9443" - "9000:9000" - "8000:8000" volumes: - portainer_data:/data networks: - agent_network deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager] networks: agent_network: driver: overlay attachable: true volumes: portainer_data:

다운로드한 파일을 스택에 배포한다.

$ docker stack deploy -c portainer-agent-stack.yml portainer

제대로 배포되었는지 확인하자.

$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS gfv6eufu5or6 portainer_agent global 3/3 portainer/agent:2.9.1 rkaa2ryon7lh portainer_portainer replicated 1/1 portainer/portainer-ce:2.9.1 *:8000->8000/tcp, *:9000->9000/tcp, *:9443->9443/tcp

접속

도커 스웜은 ingress로 구성되었으므로 어느 노드로 접속해도 된다.

https://IP:9000

사용자를 생성하자.

사용자도 생성했으니 접속해보자.

도커 컴포즈로 스웜 클러스터에 배포하기

도커 컴포즈 파일을 이용해서 스웜 클러스터에 서비스를 배포할 수 있다.

docker stack deploy 명령어를 이용하면 된다.

$ docker stack deploy -c ${YAML_파일_위치} ${생성할_스택_이름}

위에서 Portainer 배포할 때도 해당 명령어를 통해서 배포했었다.

스택은 YAML 파일에서 생성된 컨테이너의 묶음이다. 해당 명령어를 이용하면 파일에 정의된 서비스가 스웜 클러스터에 배포된다.

WordPress yaml 파일 생성

아래와 같은 docker-compose.yml 파일 생성하기

version: "3.9" services: db: image: mdock.daumkakao.io/mysql:5.7 volumes: - db_data:/var/lib/mysql deploy: replicas: 1 environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: mdock.daumkakao.io/wordpress:latest volumes: - wordpress_data:/var/www/html deploy: replicas: 1 ports: - "8080:80" environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {} wordpress_data: {}

스웜에 스택 배포하기

$ docker stack deploy -c docker-compose.yml wordpress Creating network wordpress_default Creating service wordpress_db Creating service wordpress_wordpress

서비스가 잘 배포되었는지 확인해보자.

아래 URL를 입력해보자.

https://IP:8080

WordPress가 잘 실행되는 것을 확인할 수 있다.

참고

도커 설치 : https://docs.docker.com/engine/install/centos/

도커 컴포즈 설치 : https://docs.docker.com/compose/install/

도커 스웜 스택 : https://docs.docker.com/engine/swarm/stack-deploy/

도커 스웜 튜토리얼 : https://docs.docker.com/engine/swarm/swarm-tutorial/

포테이너 설치 : https://docs.portainer.io/v/ce-2.9/start/install/server/swarm/linux

워드프레스 샘플(도커 컴포즈) : https://docs.docker.com/samples/wordpress/

반응형

from http://1minute-before6pm.tistory.com/39 by ccl(A) rewrite - 2021-10-25 04:59:05