on
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