当前位置:   article > 正文

Docker容器(四)可视化工具Portainer与idea远程部署_docker管理工具

docker管理工具

一、安装

Portainer 是一个轻量级的容器管理工具,可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可视化的界面,使得用户可以更加方便地管理 Docker 容器、镜像、网络和数据卷等资源。下面介绍如何将本地Portainer 管理界面结合cpolar内网穿透工具实现远程任意浏览器访问

为了方便演示,本例子使用docker部署一个Portainer ,首先拉取Portainer 镜像

docker pull portainer/portainer

创建卷积

docker volume create portainer_data

然后运行容器,其中: 9000端口是我们要访问的Portainer web 界面

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
  • -p 8000:8000 -p 9000:9000: 将容器内部的8000端口映射到宿主机的8000端口,将容器内部的9000端口映射到宿主机的9000端口。

本地访问Portainer

容器成功运行后,我们在外部浏览器访问Linux 9000端口,即可看到Portainer 管理界面

上面首次登录,需要设置新登陆密码,设置完成后,即可登录管理界面,看到容器列表,本地部署访问就成功了

docker-compose安装

  1. version: "3"
  2. services:
  3. portainer:
  4. image: portainer/portainer:latest
  5. container_name: portainer
  6. ports:
  7. - "9000:9000"
  8. volumes:
  9. - /app/portainer/data:/data
  10. - /var/run/docker.sock:/var/run/docker.sock

docker-compose -f portainer.yml up

二、远程访问Docker(不推荐)

开启Docker 2375端口,让远端主机能够访问

1. 查看远端主机Docker的版本信息

docker -H tcp://10.4.7.81:2375 version

 info

可以看到,远程无法访问,只能得到简单的Docker版本信息。如果想要远程能够访问,则必须进行设置。

2. 防火墙开放2375端口(否则将无法访问) 

  1. sudo firewall-cmd --add-port=2375/tcp --permanent
  2. sudo firewall-cmd --reload
  3. sudo firewall-cmd --list-all (查看开放可访问的端口)

3.修改/usr/lib/systemd/system/docker.service

修改其中的ExecStart.

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
  • “unix:///var/run/docker.sock”:unix socket,本地客户端将通过这个来连接 Docker Daemon
  • “tcp://0.0.0.0:2375”:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon

修改完后执行

  1. systemctl daemon-reload
  2. systemctl restart docker

4.远程使用Docker

docker -H tcp://10.4.7.81:2375 info

可以看到,可以充远程访问Docker了。

通过Docker Client也可以对远程主机上的Docker服务进行操作了。

三、添加安全传输层协议(TLS)和CA认证(推荐)

为了更便捷地打包和部署,服务器需要开放2375端口才能连接docker,但如果开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,任何知道你IP的人,都可以管理这台主机上的容器和镜像,非常不安全。

为了解决安全问题,只要使用安全传输层协议(TLS)进行传输并使用CA认证即可。

制作证书及秘钥

我们需要使用OpenSSL制作CA机构证书、服务端证书和客户端证书,以下操作均在安装Docker的Linux服务器上进行。

  1. 创建一个目录用于存储生成的证书和秘钥
mkdir /docker-ca && cd /docker-ca
  1. 创建CA证书私钥,期间需要输入两次密码,生成文件为ca-key.pem
openssl genrsa -aes256 -out ca-key.pem 4096
  1. 根据私钥创建CA证书,期间需要输入上一步设置的私钥密码,然后依次输入国家是 CN,省例如是Guangdong、市Shenzhen、组织名称、组织单位、姓名或服务器名、邮件地址,都可以随意填写,生成文件为ca.pem
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
  1. 创建服务端私钥,生成文件为server-key.pem
openssl genrsa -out server-key.pem 4096
  1. 创建服务端证书签名请求文件,用于CA证书给服务端证书签名。IP需要换成自己服务器的IP地址,或者域名都可以。生成文件server.csr
openssl req -subj "/CN=192.168.3.171" -sha256 -new -key server-key.pem -out server.csr
  1. 配置白名单,用多个用逗号隔开,例如: IP:192.168.3.171,IP:0.0.0.0,这里需要注意,虽然0.0.0.0可以匹配任意,但是仍然需要配置你的服务器IP,如果省略会造成错误
echo subjectAltName = IP:192.168.3.171,IP:0.0.0.0 >> extfile.cnf
  1. 将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
  1. 创建CA证书签名好的服务端证书,期间需要输入CA证书私钥密码,生成文件为server-cert.pem
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf
  1. 创建客户端私钥,生成文件为key.pem
openssl genrsa -out key.pem 4096
  1. 创建客户端证书签名请求文件,用于CA证书给客户证书签名,生成文件client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
  1. 要使密钥适合客户端身份验证,请创建扩展配置文件
echo extendedKeyUsage = clientAuth >> extfile.cnf
  1. 创建CA证书签名好的客户端证书,期间需要输入CA证书私钥密码,生成文件为cert.pem
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
  1. 删除不需要的文件,两个证书签名请求
rm -v client.csr server.csr
  1. 修改证书为只读权限保证证书安全
  1. 归集服务器证书

最终生成文件如下,有了它们我们就可以进行基于TLS的安全访问了

  1. - ca.pem CA证书
  2. - ca-key.pem CA证书私钥
  3. - server-cert.pem 服务端证书
  4. - server-key.pem 服务端证书私钥
  5. - cert.pem 客户端证书
  6. - key.pem 客户端证书私钥

配置Docker支持TLS

  • 修改docker.service文件
  • 修改以ExecStart开头的配置,开启TLS认证,并配置好CA证书、服务端证书和服务端私钥
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  • 重新加载daemon
systemctl daemon-reload && systemctl restart docker
  • 重启docker
service docker restart

配置idea

  • 保存相关客户端的pem文件到本地

在这里插入图片描述

在这里插入图片描述

四、应用

进入容器节点

界面说明

containers:容器
images:镜像
networks:网络
volumes:逻辑卷(存储)

 容器

start:启动
stop:停止
kill:强制停止
restart:重启
pause:暂停
resume:从暂停状态恢复
remove:删除
add container:添加容器

查看单个容器

  镜像

界面说明

Dashboard菜单

  • 打开Dashboard菜单可以看到Docker环境的概览信息,比如运行了几个容器,有多少个镜像等;

App Templates菜单

  • 打开App Templates菜单可以看到很多创建容器的模板,通过模板设置下即可轻松创建容器,支持的应用还是挺多的;

 Containers菜单

  • 选择一个容器,点击Logs按钮,可以直接查看容器运行日志,可以和docker logs命令说再见了;

 

  • 点击Inspect按钮,可以查看容器信息,比如看看容器运行的IP地址;
  • 点击Stats按钮,可以查看容器的内存、CPU及网络的使用情况,性能分析不愁了;

  • 点击Console按钮,可以进入到容器中去执行命令,比如我们可以进入到MySQL容器中去执行登录命令;

Images菜单

  • 打开Images菜单,我们可以查看所有的本地镜像,对镜像进行管理;

 Networks菜单

其他菜单

  • 打开Users菜单,我们可以创建Portainer的用户,并给他们赋予相应的角色;
  • 打开Registries菜单,我们可以配置自己的镜像仓库,这样在拉取镜像的时候,就可以选择从自己的镜像仓库拉取了。

五、IDEA远程访问

5.1环境配置

1、安装docker插件并重启

File->Settings->Plugins->Marketplace->搜索docker->Docker安装

2.Dockre配置

打开idea->settings->build execution deployment->docker->点击加号添加docker配置,选择tcp链接,输入链接docker地址。这里首先要把docker端口2375对外开放才能链接。

配置完后,如果出现connection successfull,表示配置成功。

连接成功之后就可以使用服务器(虚拟机)上的docker了

 5.2拉取镜像

idea可以通过可视化的方式拉取镜像,不用自己去敲命令

有时候会出现拉取的时间超时的情况,可以配置一下国内的镜像获取阿里云的加速器

5.3创建容器并运行(推荐命令行)

创建并且运行docker容器

 创建成功之后可以看到新创建的容器,也可以在服务器(虚拟机)上用docker命令查看

重启容器、停止容器和删除容器等操作

5.4使用docker插件,实现一键自动化部署。

docker-maven-plugin可以不用Dockerfile,纯粹通过pom.xml的配置自动生成Dockerfile来构建Docker镜像。

dockerfile-maven依赖Dockerfile文件,需放到项目根目录下,也就是和pom.xml同级。

显然官方推荐的是 dockerfile-maven 这种依赖Dockerfile的方式,但是在部署 youlai-mall 项目使用 docker-maven-plugin 只要配置好 pom.xml 便无需修改外置配置了,所以更为方便省心,下面就这两种方式如何实现镜像构造进行逐一说明。其中统一以 youlai-mall 的 youlai-gateway 网关模块进行构建。

创建项目

我就以一个简单的Eureka项目演示。

File–> New -->Project --> Spring Initializr

配置项目

修改pom.xml文件,引入docker-maven-plugin插件相关配置. 改配置在<plugins>标签内

  1. <!--使用docker-maven-plugin插件-->
  2. <plugin>
  3. <groupId>com.spotify</groupId>
  4. <artifactId>docker-maven-plugin</artifactId>
  5. <version>1.0.0</version>
  6. <!--将插件绑定在某个phase执行-->
  7. <executions>
  8. <execution>
  9. <id>build-image</id>
  10. <!--将插件绑定在package这个phase上。也就是说,
  11. 用户只需执行mvn package ,就会自动执行mvn docker:build-->
  12. <phase>package</phase>
  13. <goals>
  14. <goal>build</goal>
  15. </goals>
  16. </execution>
  17. </executions>
  18. <configuration>
  19. <!--指定生成的镜像名,这里是我们的项目名-->
  20. <imageName>${project.artifactId}</imageName>
  21. <!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
  22. <imageTags>
  23. <imageTag>latest</imageTag>
  24. </imageTags>
  25. <!-- 指定我们项目中Dockerfile文件的路径-->
  26. <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
  27. <!--指定远程docker 地址-->
  28. <dockerHost>https://1.9.91.246:8080</dockerHost>
  29. <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
  30. <resources>
  31. <resource>
  32. <targetPath>/</targetPath>
  33. <!--jar包所在的路径 此处配置的即对应项目中target目录-->
  34. <directory>${project.build.directory}</directory>
  35. <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
  36. <include>${project.build.finalName}.jar</include>
  37. </resource>
  38. </resources>
  39. </configuration>
  40. <dependencies>
  41. <dependency>
  42. <groupId>javax.activation</groupId>
  43. <artifactId>activation</artifactId>
  44. <version>1.1.1</version>
  45. </dependency>
  46. </dependencies>
  47. </plugin>

配置项目的基本配置。( 这里不是重点,一笔带过)

①修改application.properties,添加项目相关信息。(可略)

  1. #项目启动的端口号和IP地址
  2. server.port=9090
  3. eureka.instance.hostname=127.0.0.1
  4. # 是否将其注册到注册中心, 如果不是集群环境,false
  5. eureka.client.register-with-eureka=false
  6. # 是否检索服务,单机情况下为false
  7. eureka.client.fetch-registry=false
  8. eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

② 找到项目启动类,添加@EnableEurekaServer注解

  1. @EnableEurekaServer
  2. @SpringBootApplication
  3. public class EurekaserverApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(EurekaserverApplication.class, args);
  6. }
  7. }

添加Dockerfile文件。

我们在EeurekaServer\src\main\resources目录下,添加文件名为Dockerfile的文件。

如果我们docker中没有java:8 这个镜像,请先使用docker pull java:8,将镜像先拉下来

  1. FROM java:17
  2. VOLUME /tmp
  3. ADD *.jar app.jar
  4. EXPOSE 9090
  5. ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]

我们添加了一个VOLUME指向“/ tmp”的内容,因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方。效果是在“/var/lib/docker”下的主机上创建一个临时文件,并将其链接到“/ tmp”下的容器。对于我们在此处编写的简单应用程序,此步骤是可选的,但如果需要在文件系统中实际编写,则对于其他Spring Boot应用程序可能是必需的。

为了减少Tomcat的启动时间,我们添加了一个指向“/dev/urandom”的系统属性作为熵源。如果您使用Tomcat(或任何其他Web服务器)的“标准”版本,则不需要更新版本的Spring Boot。

maven打包,生成镜像

使用maven打包。我们在pom.xml中配置过,如果我们是用maven的package,那么就会自动使用Dockerfile文件进行构建。

我们从控制台可以看到,已经给我构建了一个和我们项目名相同的镜像文件。

我们在docker窗口可以看到,我们的镜像库中多个一个eurekaserver:latest镜像。

创建容器,项目部署到docker

我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。

代补充

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/867113
推荐阅读
相关标签
  

闽ICP备14008679号