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

一、安装

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(不推荐)

开启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
  • “unix:///var/run/docker.sock”:unix socket,本地客户端将通过这个来连接 Docker Daemon
  • “tcp://0.0.0.0:2375”:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon

修改完后执行

systemctl daemon-reload

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的安全访问了

- ca.pem CA证书
- ca-key.pem CA证书私钥
- server-cert.pem 服务端证书
- server-key.pem 服务端证书私钥
- cert.pem 客户端证书
- 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>标签内

 <!--使用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打包,生成镜像

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

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

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

创建容器,项目部署到docker

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

代补充

  • 24
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要安装Docker的ES可视化工具,你可以按照以下步骤进行操作: 1. 首先,你需要安装和配置Docker。可以按照中提供的方法进行下载和安装Docker引擎,并学习Docker的核心组件和命令行工具。 2. 然后,你需要在CentOS7上创建一个自定义的bridge网络,可以使用如下命令: ``` docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network ``` 这将创建一个名为woniu_network的bridge网络,并指定IP地址段为172.0.0.0/16。可以使用如下命令查看已存在的网络: ``` docker network ls ``` 提供了更详细的说明。 3. 接下来,你可以通过Docker Hub查询ElasticHD的版本,并选择适合你实际需求的版本。可以使用如下命令进行查询: ``` docker search elastichd ``` 你可以根据查询结果选择合适的版本。 4. 然后,你可以使用如下命令安装ElasticHD: ``` docker run -d -p 9800:9800 \ --name elastichd \ --restart=always \ --network woniu_network \ --ip 172.0.0.98 \ --link elasticsearch:woniu \ containerize/elastichd ``` 这将在容器中安装并运行ElasticHD,同时将其连接到之前创建的woniu_network网络中。提供了更详细的安装步骤。 5. 最后,如果你需要删除ElasticHD,可以使用如下命令: ``` docker rm -f elastichd ``` 这将删除名为elastichd的ElasticHD容器。 综上所述,你可以按照以上步骤成功安装Docker的ES可视化工具ElasticHD。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker学习文档,全面介绍Docker技术](https://download.csdn.net/download/Goligory/88280848)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker 安装 Elasticsearch 可视化工具 ElasticHD 超详细图文步骤](https://blog.csdn.net/u011374856/article/details/122338024)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨平生9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值