1. > 智能数码 >

docker管理工具 docker管理工具GUI

docker可视化管理工具pcontainer安装及使用

步骤:

1.获取镜像

docker pull portainer/portainer

2.创建volume

docker volume create portainer_data

3.运行

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

使用:

Docker可视化管理:Portainer中文版

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

官方站点:

docker管理工具 docker管理工具GUIdocker管理工具 docker管理工具GUI


首先查询镜像

docker search portainer

查询结果:

然后拉取:

docker pull portainer/portainer

由于该镜像采用的是英文的界面,所以为了更符合国人的使用,我们需要配置汉化包,语言包拉取命令如下(需要安装git):

git clone

cd Dockers/Portainer/

ls

然后把这个public文件夹复制到其他目录

mkdir -p /home/docker/volume/portainer

cp -rf public/ /home/docker/volume/portainer

cd /home/docker/volume/portainer

然后记住你存放的路径

这个没啥好说的,无脑执行就行

docker volume create portainer_data

执行结果:

创建之前我们可以先创建个文件夹存放容器的相关数据(做本地映射)

mkdir -p /home/docker/volume/data/

然后执行容器创建的命令:

docker run --name portainer -d \

-p 8000:8000 \

-p 9000:9000 \

-v /var/run/docker.sock:/var/run/docker.sock \

-v /home/docker/volume/portainer/data/:/data \

-v /home/docker/volume/portainer/public/:/public \

portainer/portainer

什么是docker?

一、什么是Docker:

Docker容器本质上是宿主机上进程,三个特点:

1.通过namespace实现了资源隔离;完成一个容器需要6项目隔离:

namespace 系统调用参数 隔离内容

UTS CLONE_NEWUTS 主机名与域名

docker管理工具 docker管理工具GUIdocker管理工具 docker管理工具GUI


IPC CLONE_NEWIPC 信号量,消息队列和共享内容

PID CLONE_NEWPID 进程编号

Network CLONE_NEWNET 网络设备/网络栈/端口等

Mount CLONE_NEWNS 挂载点(文件系统)

User CLONE_NEWUSER 用户和用户组

Linux实现namespace的目的就是线下轻量化虚拟化服务。

2.通过cgroups实现资源限制;

cgroups是Linux内核提供的一种机制,这种机制可以根据需求把一系列系统任务及其子任务整合或者分隔到按资源划分登记的不同组内,从而为系统资源管理提供一个统一的框架。

通俗的地讲,cgroups可以限制,记录任务组所使用的物理资源(包括CPU,Memory,IO等)为容器实现虚拟化提供基本保证,是构建Docker等一系列虚拟化管理工具的基石。

本质上来说,cgroups是内核附加在程序上的一系列钩子(hook),通过程序运行时对资源调度触发相应的钩子以达到资源追踪和限制的目的。

3.通过写时复制机制(copy-on-write)实现了高效的文件操作。

二、Docker架构:

Docker Daemon作用:

Docker Daemon是Docker最核心的后台进程,它负责响应来自Docker Client的请求,然后将这个请求翻译成系统调度完成容器的管理操作。该经常会在后台启动一个API Server,负责接收由Docker client发送的请求;接收到的请求将通过Docker daemon分发调度,再有具体的函数来执行请求。

Docker client:

Docker client是一个泛称,用来向Docker daemon发送请求,,执行相应的容器管理操作。它既可以是命令行工具docker,也可以是任何遵循了Docker API的客户端。

libcontainer分为三大块内容:

(1)容器的创建以及初始化;

(2)容器生命周期管理;

(3)进展管理,调用方为Docker的execdriver。

【swarm】Docker跨主机网络:overlay

Docker早期版本中,是不支持跨主机通信网络驱动的,也就是说明如果容器部署在不同的节点上面,只能通过暴露端口到宿主机上,再通过宿主机之间进行通信。随着docker swarm集群的推广,docker也有了自家的跨主机通信网络驱动,名叫overlay,overlay网络模型是swarm集群容器间通信的载体,将服务加入到同一个网段上的overlay网络上,服务与服务之间就能够通信。

使用端口映射 :直接把容器的服务端口映射到主机上,主机直接通过映射出来的端口通信。

把容器放到主机所在的网段 :修改 docker 的 ip 分配网段和主机一致,还要修改主机的网络结构。

第三方项目 :flannel,weave 或者 pipework 等,这些方案一般都是通过 SDN 搭建 overlay 网络达到容器通信的。

docker swarm, 这是 docker 开发的容器集群管理工具,和 docker API 兼容性很好。

注意: docker overlay 网络可以单独使用,不是必须和 swarm 绑定在一起的。这里使用 swarm,是因为它的简单易用,并且更容易说明问题。

overlay网络模型在docker集群节点间的加入了一层虚拟网络,它有独立的虚拟网段,意味着docker容器发送的内容,会先发送到虚拟子网,再由虚拟子网包装为宿主机的真实网址进行发送。

这也意味着在overlay网络模型上,docker不会暴露端口给宿主机,所有有关网络的事情都交给overlay去处理了,这样的好处就是在同一台服务器,不会引起端口冲突(例如启动两个不同的容器,监听的端口相同),理解这点非常重要。

在早期使用docker进行微服务部署时,你肯定干过将docker容器所在宿主机的ip作为注册地址,因为如果你将容器内的ip作为注册地址,其他服务将不可访问你的服务,只有一条路,就是将宿主机的ip挂在容器内部处理,或者在容器内部添加ip地址环境变量来处理。

当使用docker swarm进行集群服务部署时,这个问题自然也就随之解决了,当服务已加入到overlay网络中,服务容器内会获得一个overlay网络的一个地址。

dubbo默认会拿eth0的ip作为注册地址,因此服务只需要将docker容器的ip地址作为注册地址就行了,只要服务与服务之间在同一个ovelay网段下,就可以进行通信。

提供者和消费者同时部署了2个实例,在相同overlay网段下,相互之间是可通信的。

服务的端口会交给overlay网络去处理。在Overlay网络下,即使该节点并没有部署指定服务,也会监听该服务的端口,docker通过这个特性实现了访问任意一个节点+服务对应端口,就可以访问服务,而且还具备负载均衡特性。

基于该特性,把服务的网关加入集群后,无需关心网关被分配在哪个节点上,只需要在集群再上一层nginx层配置若干个节点ip+网关服务端口,就可实现双层负载均衡,即nginx访问网关时的负载均衡,访问集群时的负载均衡。

如果此时你正在搭建docker swarm集群,我建议你把网关项目同时加入到集群中,再通过nginx做双层负载均衡。

编排文件有个不太灵活的地方, 初次使用它来创建swarm集群的人可能会犯一些错误:

1.如果你没有指定网络,它会给你默认创建一个网络,如:stackname_default

2.假如两个stack栈分别属于不同的overlay网络,那么不同stack栈的服务是不可以进行通信的

3.如果你指定一个网络,没有写name属性的,那么它会在你指定的网络名字前面加个stackname

4.如果该网络已存在,在部署时还会报错,不会智能将该stack服务地加入该网络中

为防止overlay的网络会跟其它网络有冲突,更严谨的做法是自定义overlay网段:

# cat create_docker_gwbridge.sh

#################################################

#!/bin/bash

docker_bip: "172.17.0.1/16"

gwbridge_subnet: "172.18.0.0/16"

gwbridge_gateway: "172.18.0.1"

docker network create \

--driver=bridge \

--subnet="${gwbridge_subnet}" \

--gateway="${gwbridge_gateway}" \

--opt ""="docker_gwbridge" \

--opt ""="false" \

--opt ""="true" \

docker_gwbridge

#################################################

在编排文件的networks上配置defualt属性,在defualt属性下面添加external属性,在其下面填写刚刚生成的网络的名称。

这么做的好处是可以灵活地将不同stack服务栈加入到相同网络下,也可避免上面提到的几个坑。

 Swarm有Service的概念。

一个Service是指使用相同镜像、同时运行的多个容器,多个容器同时一起对外提供服务,多个容器之间负载均衡。每个Service会有一个浮动IP(VIP),各个容器还有自己的物理IP。

创建基于Swarm的Overlay网络,将Service挂载到此网络上。然后Service中的各个容器便可以通过Service名称(同时也是一个DNS名称)和IP地址实现网络互通。

同一个Service内,多个容器之间的负载均衡有两种方案:

由于docker原生的overlay网络使用的是标准的vxlan协议,使用的端口也是标准的vxlan端口(UDP 4789)。

各个云环境,如阿里云,腾讯云,也都是使用的vxlan,所以会有冲突,UDP 4789网络是被占用的。

docker管理工具 docker管理工具GUIdocker管理工具 docker管理工具GUI


目前也没有找到变通的办法,docker目前为止还不支持自定义vxlan端口。

docker swarm 集群及多主机overlay网络测试

docker 跨主机网络:overlay 简介

Docker Overlay网络的一些总结

Swarm使用原生的overlay网络

Docker 三剑客之 Docker Swarm(基于 overlay 组网通信)

DOCKER 总结

Docker 是一个开源的 应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口。

由于本地开发好的程序往往都需要部署到服务器上进行运行,这就导致了程序需要运行在不同的环境上,这通常是一个令人头痛的事情。在过去,开发团队需要清楚的告诉运维部署团队,其所使用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。

于是乎, 虚拟化 技术应运而生。开发团队将开发好的程序在虚拟机上运行,这样就能解决运维的问题。但是由于虚拟机技术过重的特性导致了其 资源占用多、冗余步骤多以及启动慢的缺陷 。而这个时候 一种新的虚拟化技术搭配上容器化的思想 的产品便出现了,而它就是Docker。

下图是虚拟机技术和容器化技术架构的对比。我们可以得出以下总结:

[图片上传失败...(image-efadd2-1643314980201)]

]( )

于是乎相比于虚拟机技术,容器化技术具有以下 优势:

相关网站

如下图所示,Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。服务器端分为Docker daemon, Image和Container三个部分。此外还有Docker Registry。

下面首先来介绍一下Docker中的主要概念

Docker的运行原理如下:客户端可以将docker命令发送到服务器端的Docker daemon上,再由Docker damon根据指令创建、选择或者从Docker仓库中拉取(pull)镜像。接着客户端可以通过镜像创建容器。当我们需要使用程序时,运行相应的容器即可。

小结

需要正确的理解仓储/镜像/容器这几个概念 :

在外面使用容器的时候,我们不希望容器中的数据在容器被删除后也一并删除了,这时候我们就可以 通过使用容器数据卷,将数据储存在本地并用Docker将其挂载到容器中,这样我们即使删除了容器,数据也依旧存在服务器中,也就实现了数据持久化。

特点

容器数据卷挂载命令(-v)

Dockerfile 挂载容器数据卷

我们除了可以从仓库中拉取镜像以外,我们也可以 自己创建镜像 ,这就要用到Docerfile。

dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 。

构建步骤:

基础知识:

流程:

说明:

在实际场景中,我们会遇到 多个Container之间通讯 的问题。而Docker网络就是用于解决此问题的技术。docker会给每个容器都分配一个ip,且容器和容器之间是可以互相访问的。

Docker网络原理

每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了 veth-pair 技术 。Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据 Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网 关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并 让他们彼此联通(这样一对接口叫veth pair);

Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中 进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容 器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。

[图片上传中...(image-41d42a-1642627027452-2)]

Docker Compose是一个用于定义并运行多容器应用的工具 。

Docker Compose的 步骤如下 :

NOTE: Compose :重要的概念。

docker-compose.yml编写

Note: docker-compose会自动为多容器之间创建网络,保证通讯。

Docker Swarm 是Docker 的集群管理工具。 它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

Docker 是一个开源的 应用容器引擎 ,它的出现大大简化了运维的难度,提高了运维效率。过去我们需要在服务器上安装程序所需要的所有依赖,而如今我们只需要编写好docker-compose和Dockefile的脚本,就可以使程序一键跑通。在企业级的应用中,我们必然会惊颤使用到Docker和容器化技术。

狂神说

docker使用portainer管理云主机的docker或k8s

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

官方站点:

非常值得推荐的是它可以图形化的管理docker和本地的k8s,并且通过agent的方式发现不同主机的docker列表和k8s集群,并可以通过api去管理相关服务。

安装portainer服务:

用浏览器访问:

可以看到以下界面

设置admin用户密码,需要输入两次相同的密码

以下界面中,选择

local

,再点击

Connect

可以在另一台机器上安装portainer探针服务

在portainer服务地址配置探针信息

配置后返回首页

Docker-可视化管理工具总结-推荐使用Portainer

对于初学docker的小白,一款好的可视化工具有助于快速掌握docker基本形态和概念,下面针对docker可视化工具做些总结

UI For Docker是一个使用Docker Remote API 的web接口,目的是提供一个简洁纯净的客户端实现,为了连接和管理Docker; 该工具目前已经无人维护,建议使用下面介绍的portainer

docker run -it -d --name docker-web --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock

是一款Docker可视化管理工具,可让您轻松构建和管理 Docker、Docker Swarm、Kubernetes 和 Azure ACI 中的容器。

Portainer 将管理容器的复杂性隐藏在易于使用的 UI 后面。通过消除使用 CLI、编写 YAML 或理解清单的需要,Portainer 使部署应用程序和解决问题变得如此简单,任何人都可以做到

Portainer 由两个元素组成:Portainer 服务器和 Portainer 代理。两者都在您现有的容器化基础设施上作为轻量级容器运行。Portainer 代理应该部署到集群中的每个节点,并配置为向 Portainer 服务器容器报告。

单个 Portainer 服务器将接受来自任意数量的 Portainer 代理的连接,从而提供从一个集中式界面管理多个集群的能力。为此,Portainer Server 容器需要数据持久性。Portainer 代理是无状态的,数据被传送回 Portainer 服务器容器。

运行下面两条命令即可。这些命令会创建一个Portainer专用的卷,然后在8000和9000端口创建容器并运行。

如果使用Portainer管理本地Docker主机的话,需要绑定/var/run/docker.sock (这里是个知识点,涉及docker 之间通信的问题,以及docker 里运行docker )

docker run --name portainer --restart always -d -p 8000:8000 -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

然后在浏览器打开对应地址,就会发现成功运行了。第一次运行的时候需要设置账号,然后选择要管理的Docker主机。

注意:portainer/portainer 是 Portainer v1.24.x 的镜像名,现在已弃用;从 2022 年 1 月开始,Portainer 2.0 的所有新版本都将在 portainer/portainer-ce 中发布

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.11.1

docker run -d -p 9000:9000 --name portainer --restart always -v portainer_data:/data portainer/portainer -H tcp://:

ps:-H 后面的remote是你想用portainert管理的docker

只能在创建 Portainer Server 容器时添加本地环境。部署 Portainer 后,您无法添加本地环境

第一次登陆会让选择管理的容器环境,这里可以选择本机 ,通过挂载/var/run/docker.sock 和docker 守护进程通信(如图所示), 关于这部分知识后面会总结分享出来。

之后就可以看到本机上运行的Docker容器了,点击它们还可以进行容器的管理。

左边的条目可以管理卷、创建容器、查看主机信息等等。基本上该有的功能都有了

通过该方式,可以将远程机器添加到Portainer服务端,统一管理远程机器上的容器环境

将 Docker Standalone 主机连接到 Portainer 时,可以使用两种方法。您可以通过 TCP 直接连接到 Docker API,也可以在 Docker Standalone 主机上安装 Portainer 代理并通过代理连接。

1) 通过远程访问TCP:2375端口绑定环境

2) 通过Portainer Agent方式管理docker环境

使用Agent需要在要监控的主机上创建一个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:2.11.1

在k8s集群上执行以下命令

url -L -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml

在远程k8s集群上部署agent后,在Portainer server 上通过nodeport 或者 targetport 进行服务配置,完成k8s集群的连接配置。

LazyDocker是基于终端的一个可视化查询工具,支持键盘操作和鼠标点击。相比Portainer来说可能不那么专业,不过对于开发者来说可能反而更加好用了。因为一般开发者都是使用命令行来运行Docker,偶尔需要图形化查看的时候,就可以使用LazyDocker这个工具。

Lazydocker 的具体特性如下:

当然如果发现LazyDocker挺好用,准备经常使用的话,还可以把它做成缩写添加到shell配置文件中,这样就可以将它变成一个简单的命令。例如我用的是zsh,就将下面这样添加到.zshrc文件中。以后就可以直接用lzd来调用LazyDocker了。

echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v ~/.config/lazydocker:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc

然后就可以在终端中查看Docker容器、镜像和卷的信息了。LazyDocker支持键盘操作和鼠标点击,直接用鼠标点击就可以查看对应信息了

Docker Desktop 是 Docker 官方自带的客户端。 ; 如果是windows用户,想在Windows系统上运行docker容器,可以使用;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息