目的
本地通过maven命令, 进行打包, 把项目打包成镜像,然后上传到Linux上的docker上面,作为镜像。
pom.xml
加载docker-maven-plugin插件
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 远程docker服务地址 -->
<dockerHost>http://10.211.55.8:2375</dockerHost>
<imageName>${docker.hub.domain}/${docker.image.prefix}/${project.artifactId}:${docker.image.tag}</imageName>
<forceTags>true</forceTags>
<!-- Dockerfile 文件位置-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- maven 编译后,会在target下面生成 Dockerfile 和 jar文件-->
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
将插件绑定在某个phase执行
很多场景下,我们有这样的需求,执行例如mvn clean package
时,插件就自动为我们构建Docker镜像。要想实现这点,我们只需将插件的goal绑定在某个phase即可。
phase和goal可以这样理解:maven命令格式是:mvn phase:goal
,例如mvn package docker:build
。那么,package和docker都是phase,build则是goal 。
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
就可将插件绑定在package这个phase上。也就是说,用户只需执行mvn package
,就会自动执行mvn docker:build
。当然,读者也可按照需求,将插件绑定到其他的phase。
相关属性标签的解释:https://yq.aliyun.com/articles/622330
Dockerfile,sh 文件
FROM openjdk:8-jre
RUN mkdir maizi
COPY *.jar /maizi/app.jar
COPY start.sh /maizi/
RUN cd /maizi/ && chmod a+x start.sh
CMD [ "sh","/maizi/start.sh" ]
EXPOSE 8888
#!/bin/sh
apt-get update && apt-get install -y procps
cd /maizi/ && touch springboot.log
nohup java -Djava.security.egd=file:/dev/./urandom -jar app.jar >>springboot.log 2>&1
cat springboot.log
配置远端docker开启远程访问
原文地址:https://blog.csdn.net/qq_19674905/article/details/80267821
配置远程访问
打开/usr/lib/systemd/system/docker.service如下:
Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
--default-runtime=docker-runc \
--exec-opt native.cgroupdriver=systemd \
--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
--init-path=/usr/libexec/docker/docker-init-current \
--seccomp-profile=/etc/docker/seccomp.json \
$OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$ADD_REGISTRY \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process
[Install]
WantedBy=multi-user.target
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock , 这个地方就是配置开启远程访问的端口和服务。
docker重新读取配置文件,重新启动docker服务
systemctl daemon-reload
systemctl restart docker
验证docker进程和远程端口
ps -elf | grep docker
[root@localhost docker]# netstat -tulp | grep 2375
tcp6 0 0 [::]:2375 [::]:* LISTEN 5741/dockerd-curren
测试访问centos7的docker服务
在本地用docker 命令查看远程的docker服务镜像,用于测试远程是否OK。
➜ blog docker -H 10.211.55.8 images
REPOSITORY TAG IMAGE ID CREATED SIZE
maizi1989/maizi-today/maventodocker 20190718 6d4e4c41bc92 2 days ago 283MB
openjdk 8-jre f44b742ffc37 3 days ago 246MB
从这里可以看到, 本地已经可以查看到了远程docker的所有镜像了,证明远程服务已经开启。
maven 打包上传
vscode手动进行clean ,package打包或者在项目目录下进行如下命令进行打包:
mvn clean package
操作时候查看远端docker, 进行docker imgaes就可以查看到刚上传过来的镜像。
Docker报错 WARNING: IPv4
原文:https://blog.csdn.net/yjk13703623757/article/details/68939183
启动容器
docker run --rm -it -p 8888:8888/tcp maizi1989/maizi-today/maventodocker:20190718
如果直接进行启动,创建容器的时候, 报如下错误:
WARNING: IPv4 forwarding is disabled. Networking will not work.
解决办法
vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward=1
systemctl restart network #重启network服务
完成以后,删除错误的容器,再次创建新容器,就不再报错了。
注意
这个问题一定要解决, 不然你在本地无法访问远端的docker启动的服务。还有导致你无法通过客户端去连接远端docker服务。
vscode工具连接远程docker服务
可以看到我们把镜像发布到远端docker的时候, 操作docker服务的时候,不方便, 所以找一个客户端直接远程连接docker服务, 方便操作。
点击vscode的 [设置],然后搜索 docker:host , 然后配置如下:
tcp://10.211.55.8:2375
注意:这个地方不要写http, 如果是写http的话,我用vscode工具,进行run的时候, 他的dockerfile里面的端口无法映射到机器端口。
这样, 就可以远程操作docker服务了,这个插件有很多docker的操作, 很方便。效果如下:
可以看到这里可以配置选择工作区, 如果默认不配置的话,就显示你本机的docker服务。
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付