개요
portainer는 docker를 관리하기 위한 웹앱이다. Synology DSM에 WebUI로 존재하는 그것과 같은 것이다.
Portainer is an open-source lightweight management UI which allows you to easily manage your Docker hosts or Swarm clusters
설치
간단하게 docker container를 하나 설치하면 내부적으로는 unix socket을 통해서 통신하고 WebUI로 control할 수 있는 환경을 제공한다.
version: '2'
services:
portainer:
image: portainer/portainer
container_name: portainer
restart: always
network_mode: "bridge"
volumes:
- ${DOCKER_ROOT}/portainer/data:/data
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "9000:9000"
Reverse Proxy
공식 문서에 Nginx Reverse proxy 설정 예시가 잘 나와있다. 여기서는 https-portal과 호환 가능한 nginx.conf를 남긴다.
server {
listen 443 ssl http2;
server_name <%= domain.name %>;
ssl on;
ssl_certificate <%= domain.signed_cert_path %>;
ssl_certificate_key <%= domain.key_path %>;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_prefer_server_ciphers on;
ssl_dhparam <%= dhparam_path %>;
# Prevent Nginx from leaking the first TLS config
if ($host != $server_name) {
return 444;
}
location / {
proxy_pass <%= domain.upstream %>/;
proxy_http_version 1.1;
proxy_set_header Connection "";
access_log off;
}
location /api/websocket/ {
proxy_pass <%= domain.upstream %>/api/websocket/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
access_log off;
}
}
활용
직관적으로 잘 꾸며져 있어서 대부분의 기능을 문제없이 이용할 수 있다. (아직 적극적으로 사용하지 않아서 어떤 제한이 있는지 파악하지 못했다.)
local의 docker service뿐만 아니라 docker에서 제공하는 Remote API를 통해서 외부의 서비스도 연결할 수 있다. 이를 위해서는 target machine의 docker에서 이걸 허용해줘야 하는데, 이 gist 문서와 같이 docker 실행 옵션 DOCKER_OPTS
을 수정해주면 된다.
그런데 버그인지 우분투 16.04에서 적용이 안된다. 여기나 여기를 참고해서 /lib/systemd/system/docker.service
파일을 수정하면 잘 동작한다. docker service 시작 스크립트에 하드코딩으로 집어 넣는 것이다.
그런 다음 ENDPOINT 메뉴에서 IP:PORT를 등록하면 된다.