九:Docker 管理界面 Portainer
Portainer is a lightweight management UI which allows you to easily manage your different Docker environments (Docker hosts or Swarm clusters). *Portainer* is meant to be as simple to deploy as it is to use. It consists of a single container that can run on any Docker engine (can be deployed as Linux container or a Windows native container, supports other platforms too). *Portainer* allows you to manage all your Docker resources (containers, images, volumes, networks and more!) It is compatible with the standalone Docker engine and with Docker Swarm mode.
Portainer
是Docker
的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。
github 地址:https://github.com/portainer/portainer
官网:https://www.portainer.io/
9.1:portainer 安装
安装文档:https://documentation.portainer.io/v2.0/deploy/linux/#deploy-portainer-in-docker
安装:
root@Docker1:~# docker volume create portainer_data
root@Docker1:~# 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
查看 portainer 容器及端口监听状态:
root@Docker1:~# docker ps -f name=portainer
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e3cbe518cf2 portainer/portainer-ce "/portainer" 29 seconds ago Up 27 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer
root@Docker1:~# ss -tnlp | egrep '(8000|9000)'
LISTEN 0 20480 *:8000 *:* users:(("docker-proxy",pid=2411,fd=4))
LISTEN 0 20480 *:9000 *:* users:(("docker-proxy",pid=2397,fd=4))
访问 Portainer:
首次访问需要设置 admin 密码:
选择管理本地 Docker:
进入后可以看到本地 Docker:
点击进入 Local 端点,查看本地 Docker 的 容器、镜像、网络、卷等的情况:
总体情况:
容器:
镜像:
网络:
存储卷:
9.2:Portainer 汉化
Portainer 官方不支持中文,“Portainer中文汉化项目” 提供了汉化功能;
Portainer中文汉化项目:https://www.quchao.net/Portainer-CN.html
以下步骤摘自项目:
- 新建文件夹命名为 public ,把 Portainer-CN.zip 解压至里面;
- public 文件夹传输至系统根目录;
- 然后按需执行以下命令;
x86-64系统使用:docker volume create portainer_data docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -v /public:/public portainer/portainer:1.20.2
ARM64系统使用:
docker volume create portainer_data docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -v /public:/public portainer/portainer:linux-arm64-1.20.2
新建 /public 目录,将下载的汉化包 Portainer-CN.zip 解压值 /public 目录:
root@Docker2:~# mkdir /public
root@Docker2:~# cd /public
root@Docker2:/public# rz
root@Docker2:/public# unzip Portainer-CN.zip
root@Docker2:/public# ll
total 1912
drwxr-xr-x 7 root root 4096 Feb 3 11:47 ./
drwxr-xr-x 25 root root 4096 Feb 3 11:46 ../
drwxr-xr-x 2 root root 4096 Mar 20 2019 css/
drwxr-xr-x 2 root root 4096 Mar 20 2019 fonts/
drwxr-xr-x 2 root root 4096 Mar 20 2019 ico/
drwxr-xr-x 2 root root 4096 Mar 20 2019 images/
-rw-r--r-- 1 root root 2810 Mar 20 2019 index.html
drwxr-xr-x 2 root root 4096 Mar 20 2019 js/
-rw-r--r-- 1 root root 1921725 Jan 29 20:02 Portainer-CN.zip
创建 portainer_data 卷和 portainer 容器,并映射 /public 目录:
root@Docker2:/public# docker volume create portainer_data
root@Docker2:/public# docker run -d -p 9000:9000 --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -v /public:/public portainer/portainer:1.20.2
访问 Portainer 页面,设置 admin 用户密码::
选择管理本地 Docker:
进入管理页面,已经汉化成功:
Dashboard 查看本地 Docker 的总体情况:
9.3:Portainer 应用
9.3.1:添加 Endpoint(端点)
Portainer 除了管理本地 Docker,也可以对其它宿主机的 Docker 进行远程管理;
dockerd 默认只监听 socket 文件,远程访问需要添加监听 tcp 的 2375 端口:
下边使用 Docker1(192.168.1.111) 服务器上的 Portainer 管理 Docker2(192.168.1.112) 上的 Docker;
Docker2 的 Dockerd 添加 2375 端口监听:
root@Docker2:~# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
root@Docker2:~# systemctl daemon-reload
root@Docker2:~# systemctl restart docker
root@Docker2:~# ss -tnlp | grep 2375
LISTEN 0 20480 *:2375 *:* users:(("dockerd",pid=11010,fd=3))
Portainer 添加 Endpoint:
端点名称设为 Docker2;
Endpoint URL 为 192.168.1.112:2375;
添加成功:
进入 Docker2,可以查看 Docker 的相关信息和状态:
9.3.2:添加 Registry(仓库)
为 Portainer 添加 Registry 时,先要保证 Portainer 所在的 Docker 宿主机是能访问指定的 Registry 的;
为 Docker1 的 Portainer 添加 Harbor 镜像仓库(192.168.1.121),先保证 Docker 能正常访问 Harbor:
添加 insecure-registry,重启 Docker,测试登录 Harbor 以及从 Harbor 拉取镜像;
root@Docker1:~# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.1.121
root@Docker1:~# systemctl daemon-reload
root@Docker1:~# systemctl restart docker
root@Docker1:~# docker login 192.168.1.121
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
root@Docker1:~# docker pull 192.168.1.121/nginx/centos-nginx:1.16.1
1.16.1: Pulling from nginx/centos-nginx
Digest: sha256:4a7cc6f4415f0744bd0afe034e4ae42e37ae90c4005d98cc357117e770efc9f9
Status: Image is up to date for 192.168.1.121/nginx/centos-nginx:1.16.1
Portainer 添加 Registry:
选择 Custom registry(私有/定制仓库),设置仓库名称为 Harbor,Registry URL 为 192.168.1.121;
添加成功:
9.3.3:使用 Portainer 启动容器
使用 Docker1 上的 Portainer 操作 Docker2 启动一个 Nginx 容器(使用的镜像为 192.168.1.121/nginx/centos-nginx:1.16.1,以顺便验证上一步添加的 Harbor 仓库是否可用);
在 Docker1 的 Portainer 界面上为 Docker2 创建容器:
容器名称为 Nginx1;
Registry 选用 Harbor;
Image 为 192.168.1.121/nginx/centos-nginx:1.16.1;
端口映射为 10080:80;
创建成功:
验证访问:
http://192.168.1.112:10080/