Deploy Portainer và Traefik
Khi làm việc với Docker Swarm, chúng ta nên sử dụng Portainer để dễ dàng quản lý Docker environment. Bên cạnh đó chúng ta cũng cần sử dụng một reverse-proxy cũng như là load balancer, vậy nên ta sẽ sử dụng Traefik.
Trong bài tập này, ta sẽ deploy hai service này lên. Trong đây đã có sẵn một file là reverse-proxy
chứa cấu hình traefik và một file protainer-agent-stack
chứa cấu hình của portainer.
Yêu cầu
Deploy thành công hai service. Mở được giao diện của hai service này trên browser của máy thật bằng đường dẫn:
Portainer:
domain.lc:9000
Traefik:
domain.lc:8889
1. Sửa đổi file hosts
Để có thể theo vào được giao diện của portainer
và traefik
một cách trực quan nhất, ta sẽ truy cập thông qua browser trên máy thật. Nhưng thay vì cứ phải nhập địa chỉ ip 192.168.56.101
thì ta sẽ đổi nó thành một tên miền, cụ thể ở đây là domain.lc
Bây giờ các bạn cần sửa file /etc/hosts
trên máy thật của các bạn để có thể mở được các subdomain này.
1.1 Với hệ điều hành linux/macOS thì cần sửa dưới quyền root với câu lệnh:
nano /etc/hosts
1.2 Với hệ điều hành windows
Các bạn cần mở file hosts trong đường dẫn C:\Windows\System32\drivers\etc
:
Bởi vì file này chỉ được chỉnh sửa dưới quyền admin, vậy nên các bạn có thể mở CMD hoặc Terminal dưới quyền admin lên để sửa:
Sau đó dùng lệnh:
nano hosts
1.3. Nội dung chỉnh sửa
Vào chỉnh sửa file hosts
, ta sẽ thêm hai subdomain ở trên với cú pháp:
<địa chỉ ip> <tên miền>
Ví dụ ở đây tôi đặt tên miền là domain.lc
2. Deploy reverse-proxy stack
Trước hết chúng ta cần tạo ra một network tên là traefik-net
:
docker network create -d overlay traefik-net
Bây giờ chúng ta sẽ vào trong máy ảo manager01
, sau đó cd vào folder /home/vagrant/
. Từ các bài sau trở đi, ta sẽ thao tác chủ yếu ở folder này. Các bạn tạo một file tên là reverse-proxy.yml
với lệnh:
vim reverse-proxy.yml
Rồi copy nội dung bên dưới đây vào file này:
version: '3.8'
services:
traefik:
image: "traefik:v2.5"
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.swarmMode=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:8889"
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
ports:
- "80:80"
- "443:443"
- "8889:8080"
networks:
- traefik-net
deploy:
mode: global
placement:
constraints:
- node.role == manager
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.rule=Host(`domain.lc`)"
- "traefik.http.routers.traefik.entrypoints=web"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.middlewares=auth"
networks:
traefik-net:
external: true
Sau đó bấm phím Esc
và gõ ZZ
để lưu file đối với Vim
.
Sau khi có file reverse-proxy.yml
thì ta sẽ deploy stack này lên với lệnh:
docker stack deploy -c reverse-proxy.yml reverse-proxy
3. Deploy Protainer
Tiếp theo là đến portainer
. Ta tạo file portainer-agent-stack.yml
với nội dung:
version: '3.2'
services:
agent:
image: portainer/agent:2.19.3
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.19.3
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:
Sau đó deploy stack lên:
docker stack deploy -c portainer-agent-stack.yml portainer
4. Kết quả
Bây giờ các bạn sử dụng browser ở máy thật, nhập địa chỉ domain.lc:9000
thì sẽ có kết quả:
Nhập địa chỉ domain.lc:8889
thì có kết quả:
Như vậy là truy cập thành công.
Sau khi tạo tài khoản thì ta đăng nhập vào portainer.
Đây là giao diện của portainer:
Ta có thể dễ dàng xem các services, containers, images, networks, v.v… mà không cần phải gõ lệnh nhiều lần:
5. Kết
Vậy là ta đã thực hành xong bước tiếp theo trong bài tập thực hành Docker Swarm. Cảm ơn các bạn đã dành thời gian đọc bài viết của mình. Nếu có vấn đề gì thắc mắc, hãy bình luận phía dưới nhé.
Bình luận