Portainer là công cụ quản lý Docker Containter miễn phí với kích thước gọn nhẹ và giao diện quản lý trực quan, đơn giản để triển khai cũng như sử dụng, cho phép người dùng dễ dàng quản lý Docker host.
1. Hướng dẫn cài đặt Portainer
Tạo Docker Volume để lưu trữ thông tin.
docker volume create portainer_data
Chạy Container từ image Portainer
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
Sử dụng lệnh docker ps để kiểm tra các container đang chạy, như hình dưới container Portainer đã run thành công.
2. Truy cập Portainer
Các bạn truy cập trang quản trị Portainer bằng đường dẫn sau.
http://[IP_Address]:9000
Lần truy cập đầu tiên, Portainer sẽ yêu cầu người dùng thiết lập mật khẩu của tài khoản admin.
Sau khi tạo thành công User và đăng nhập được vào Portainer, giao diện Portainer sẽ hiển thị như hình dưới.
3. Hướng dẫn thêm một docker host
Cách 1: Sử dụng Portainer Agent trên docker host mà bạn muốn add vào Portainer.
Bước 1: Chạy container từ images portainer/agent
docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent:latest
Bước 2: Truy cập trang Portainer chọn Mục Environment -> Add environment
Ở tab Agent, các bạn điền tên, điền thông tin IP và Port chạy Portainer Agent vào. Sau đó chọn Connect.
Cách 2: Expose Docker API trên docker host mà bạn muốn add vào Portainer. Bước 1: Điều chỉnh cấu hình của Docker trên remote host
nano /lib/systemd/system/docker.service
Mục ExecStart thêm trường -H=tcp://0.0.0.0:2375 để export Docker API ra ngoài. Lưu ý cấu hình 0.0.0.0 đồng nghĩa với việc bất kỳ ai cũng có thể truy cập được.
Bước 2: Restart docker daemon và container trên remote host
systemctl daemon-reload
sudo service docker restart
Bước 3: Truy cập trang Portainer chọn Mục Environment -> **Add environment
Ở tab Api, các bạn điền tên, điền thông tin IP và Port chạy Portainer Agent vào. Sau đó chọn Connect.
Lưu ý: Khi triển khai hệ thống các bạn nên chọn phương án triển khai để quy hoạch ports cho team Network khai báo mở firewalld từ server cài Portainer đến các remote host
4. Thông tin remote host đã được kết nối
Để xem thông tin của từng host đã kết nối, bạn đọc vào menu “Home” ở bên trái. Trang web sẽ hiển thị danh sách các host đã được kết nối. Nhấn chọn host bạn muốn truy cập dựa vào danh sách đang hiển thị để truy cập vào trang quản lý thông tin của host đó.
Bây giờ các bạn có thể start, stop, hay remove các container mà không phải gõ command line nữa. Vậy các bạn hoàn toàn có thể kiểm soát được toàn bộ hệ thống docker cho dự án của mình.
5. Expose Portainer truy cập qua Domain
Mình sẽ hướng dẫn các bạn cấu hình expose portainer truy cập qua domain.
Bước 1: Bạn tạo file config portainer.conf trong nginx
server { listen 80 ; listen 443 ssl ;#default_server; server_name portainer.local.vn; => subdomain sử dụng expose portainer if ($scheme = http) { return 301 https://$server_name$request_uri; } client_max_body_size 10G; ssl_certificate /etc/ssl/local.vn/local.cer; ssl_certificate_key /etc/ssl/local.vn/local.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; access_log /opt/logs/nginx/monitorq.log; error_log /opt/logs/nginx/monitor_error.log; # proxy_read_timeout 600; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://[ip_portainer]:9000; => Cấu hình gọi đến server cài portainer proxy_read_timeout 1800; proxy_connect_timeout 180; proxy_send_timeout 180; send_timeout 180; ** # WebSocket support** proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
Bước 2: Reload lại cấu hình nginx và tận hưởng thành quả thôi.
Lưu ý: Mình có gặp 1 lỗi là khi truy cập portainer qua nginx thì không console vào được container của remote host. Các bạn thêm config WebSocket support trong file config nginx để enable WebSocket cho việc console vào container.
6. Tổng kết:
Với những dự án nhỏ không sử dụng quá nhiều services hay containers docker thì bạn không nhất thiết phải cài đặt portainer để quản lý, vẫn hoàn toàn có thể sử dụng command line để quản lý cho chuyên nghiệp.