赞
踩
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安装
- version: "3"
- services:
- portainer:
- image: portainer/portainer:latest
- container_name: portainer
- ports:
- - "9000:9000"
- volumes:
- - /app/portainer/data:/data
- - /var/run/docker.sock:/var/run/docker.sock
-
docker-compose -f portainer.yml up
开启Docker 2375端口,让远端主机能够访问
1. 查看远端主机Docker的版本信息
docker -H tcp://10.4.7.81:2375 version
info
可以看到,远程无法访问,只能得到简单的Docker版本信息。如果想要远程能够访问,则必须进行设置。
2. 防火墙开放2375端口(否则将无法访问)
- sudo firewall-cmd --add-port=2375/tcp --permanent
- sudo firewall-cmd --reload
-
- 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
修改完后执行
- systemctl daemon-reload
-
- systemctl restart docker
4.远程使用Docker
docker -H tcp://10.4.7.81:2375 info
可以看到,可以充远程访问Docker了。
通过Docker Client也可以对远程主机上的Docker服务进行操作了。
为了更便捷地打包和部署,服务器需要开放2375端口才能连接docker,但如果开放了端口没有做任何安全保护,会引起安全漏洞,被人入侵、挖矿、CPU飙升这些情况都有发生,任何知道你IP的人,都可以管理这台主机上的容器和镜像,非常不安全。
为了解决安全问题,只要使用安全传输层协议(TLS)进行传输并使用CA认证即可。
我们需要使用OpenSSL制作CA机构证书、服务端证书和客户端证书,以下操作均在安装Docker的Linux服务器上进行。
mkdir /docker-ca && cd /docker-ca
ca-key.pem
openssl genrsa -aes256 -out ca-key.pem 4096
ca.pem
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
server-key.pem
openssl genrsa -out server-key.pem 4096
server.csr
openssl req -subj "/CN=192.168.3.171" -sha256 -new -key server-key.pem -out server.csr
echo subjectAltName = IP:192.168.3.171,IP:0.0.0.0 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
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
key.pem
openssl genrsa -out key.pem 4096
client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
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
rm -v client.csr server.csr
最终生成文件如下,有了它们我们就可以进行基于TLS的安全访问了
- - ca.pem CA证书
- - ca-key.pem CA证书私钥
- - server-cert.pem 服务端证书
- - server-key.pem 服务端证书私钥
- - cert.pem 客户端证书
- - key.pem 客户端证书私钥
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
systemctl daemon-reload && systemctl restart docker
service docker restart
containers:容器
images:镜像
networks:网络
volumes:逻辑卷(存储)
start:启动
stop:停止
kill:强制停止
restart:重启
pause:暂停
resume:从暂停状态恢复
remove:删除
add container:添加容器
1、安装docker插件并重启
File->Settings->Plugins->Marketplace->搜索docker->Docker安装
2.Dockre配置
打开idea->settings->build execution deployment->docker->点击加号添加docker配置,选择tcp链接,输入链接docker地址。这里首先要把docker端口2375对外开放才能链接。
配置完后,如果出现connection successfull,表示配置成功。
连接成功之后就可以使用服务器(虚拟机)上的docker了
idea可以通过可视化的方式拉取镜像,不用自己去敲命令
有时候会出现拉取的时间超时的情况,可以配置一下国内的镜像获取阿里云的加速器
创建并且运行docker容器
创建成功之后可以看到新创建的容器,也可以在服务器(虚拟机)上用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>标签内
- <!--使用docker-maven-plugin插件-->
- <plugin>
- <groupId>com.spotify</groupId>
- <artifactId>docker-maven-plugin</artifactId>
- <version>1.0.0</version>
-
- <!--将插件绑定在某个phase执行-->
- <executions>
- <execution>
- <id>build-image</id>
- <!--将插件绑定在package这个phase上。也就是说,
- 用户只需执行mvn package ,就会自动执行mvn docker:build-->
- <phase>package</phase>
- <goals>
- <goal>build</goal>
- </goals>
- </execution>
- </executions>
-
- <configuration>
- <!--指定生成的镜像名,这里是我们的项目名-->
- <imageName>${project.artifactId}</imageName>
- <!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
- <imageTags>
- <imageTag>latest</imageTag>
- </imageTags>
- <!-- 指定我们项目中Dockerfile文件的路径-->
- <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
-
- <!--指定远程docker 地址-->
- <dockerHost>https://1.9.91.246:8080</dockerHost>
-
- <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
- <resources>
- <resource>
- <targetPath>/</targetPath>
- <!--jar包所在的路径 此处配置的即对应项目中target目录-->
- <directory>${project.build.directory}</directory>
- <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
- <include>${project.build.finalName}.jar</include>
- </resource>
- </resources>
-
- </configuration>
- <dependencies>
- <dependency>
- <groupId>javax.activation</groupId>
- <artifactId>activation</artifactId>
- <version>1.1.1</version>
- </dependency>
- </dependencies>
- </plugin>
配置项目的基本配置。( 这里不是重点,一笔带过)
①修改application.properties,添加项目相关信息。(可略)
- #项目启动的端口号和IP地址
- server.port=9090
- eureka.instance.hostname=127.0.0.1
-
- # 是否将其注册到注册中心, 如果不是集群环境,false
- eureka.client.register-with-eureka=false
- # 是否检索服务,单机情况下为false
- eureka.client.fetch-registry=false
-
- eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
② 找到项目启动类,添加@EnableEurekaServer注解
- @EnableEurekaServer
- @SpringBootApplication
- public class EurekaserverApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(EurekaserverApplication.class, args);
- }
-
- }
添加Dockerfile文件。
我们在EeurekaServer\src\main\resources目录下,添加文件名为Dockerfile的文件。
如果我们docker中没有java:8 这个镜像,请先使用docker pull java:8,将镜像先拉下来
- FROM java:17
- VOLUME /tmp
- ADD *.jar app.jar
- EXPOSE 9090
- 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打包。我们在pom.xml中配置过,如果我们是用maven的package,那么就会自动使用Dockerfile文件进行构建。
我们从控制台可以看到,已经给我构建了一个和我们项目名相同的镜像文件。
我们在docker窗口可以看到,我们的镜像库中多个一个eurekaserver:latest镜像。
我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。
代补充
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。