前提
- docker已装好.
开始表演
- 开放docker对应端口
开启远程访问,修改docker服务文件,在linux上执行下面
vim /lib/systemd/system/docker.service
修改ExecStart这行(开启2375端口让外部访问docker)
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
2. 重新加载配置文件
systemctl daemon-reload
重启服务
systemctl restart docker.service
查看端口是否开启
netstat -nlpt 如果没有netstat命令:yum install net-tools
直接curl看是否生效
curl http://127.0.0.1:2375/info
- 查看是否开启2375防火墙
查看进程
#netstat -tulp
Centos7没有netstat,所以要先下载。
#yum install net-tools
防火墙开放2375端口号
#firewall-cmd --zone=public --add-port=2375/tcp --permanent
重启防火墙
#firewall-cmd --reload
IDEA设置
- 首先查看idea是否有安装docker插件,如果没有在插件里安装即可
- 镜像配置
- 这个时候,你可以在service中看到docker的信息,点击连接
这个时候IDEA下方会有docker按钮,进入点击连接Connect
Images:镜像
可以通过 create Contains 创建容器
Container name 容器名称
Run options 添加其他一些命令(如-p 8080:8080)
通过Contained preview 查看创建容器的命令
Contains:容器
可以操作容器
关键
实现IDEA到服务器部署
1.在IDEA中开发代码
2.代码打jar包
3.部署到linux上
4.编写Dockerfile
5.构建镜像
6.运行容器
自动生成镜像并推送到仓库maven插件
<properties>
<docker.image.prefix>tao</docker.image.prefix>
</properties>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration> <!--相当于创建Dockerfile-->
<!--镜像名称 (tao/test) project.artifactId表示项目名称-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签Tag 镜像版本-->
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<!--基础镜像jdk 1.8-->
<baseImage>java</baseImage>
<!--制作者的信息-->
<maintainer>hetao</maintainer>
<!--切换到工作目录-->
<workdir>/ROOT</workdir>
<!--<cmd>["java","-version"]</cmd>-->
<!--project.build.finalName会取springboot打包后target目录下的jar名称-->
<entryPoint>["java","-jar","${project.build.finalName}.jar"]</entryPoint>
<!--指定Dockerfile路径
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
-->
<!--指定远程docker api地址 如果使用的钥匙连接加s->https://ip:2375-->
<dockerHost>http://ip:2375</dockerHost>
<!--复制jar包到docker容器指定的目录配置-->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件,${project.build.finalName}.jar表示打包后的jar文件-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
这里相当于
FROM java
MAINTAINER "hetao"
WORKDIR /ROOT
ADD /ROOT/test-docker-01-0.0.1-SNAPSHOT.jar /ROOT/
ENTRYPOINT ["java","-jar","test-docker-01-0.0.1-SNAPSHOT.jar"]
<!--CMD ["java","-version"]-->
<!--通过maven 直接打包完成(放</configuration>后)-->
<executions>
<!--执行 maven package时 执行:maven clean package docker:build-->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
注意:如果镜像名称已经存在 会把存在的镜像改成none
配置好后,maven在打包时会打成镜像上传至docker
发布到容器
使用tls加密验证
#!/bin/bash
# 生成 TLS 证书并配置 Docker
HOST=$(hostname -I | awk '{print $1}')
mkdir -p /etc/docker/certs && cd /etc/docker/certs
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj "/CN=$HOST"
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
echo "subjectAltName = IP:$HOST" >> extfile.cnf
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
cat > /etc/docker/daemon.json <<EOF
{
"tls": true,
"tlscert": "/etc/docker/certs/server-cert.pem",
"tlskey": "/etc/docker/certs/server-key.pem",
"hosts": ["tcp://$HOST:2376", "unix:///var/run/docker.sock"]
}
EOF
systemctl restart docker
echo "TLS 已启用,连接命令:"
echo "docker --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H tcp://$HOST:2376 ps"
评论区