系统:win 10
开发工具:sts
构建工具:maven
docker虚拟机:virtualbox
docker系统:CentOS-7-x86_64-Minimal-1511
安装 docker-ce
- 略过
开启 docker 远程 api
- 修改 docker.server 文件,修改如下:
vim /lib/systemd/system/docker.service-
ExecStart=/usr/bin/dockerd 修改为 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
开启docker远程api.png
- 重启 docker
systemctl daemon-reloadsystemctl restart docker
- 验证是否开启
-
netstat -anp | grep 2375是否显示docker正在监听2375端口 -
curl 127.0.0.1:2375/info是否返回docker信息 -
telnet (docker centos ip) port在 win10 下是否能 telnet,如:telnet 192.168.0.110 2375如果不能,检查检查关闭防火墙systemctl stop firewalld.service
-
创建 maven 项目,以项目 docker-eureka-server 为例
通过
https://start.spring.io/创建docker-eureka-server-
在项目下创建
src/main/docker,并创建Dockerfile文件,内容如下:FROM java:8 VOLUME /tmp ADD docker-eureka-server-0.0.1-SNAPSHOT.jar app.jar RUN bash -c 'touch /app.jar' EXPOSE 8761 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] -
pom.xml配置docker-maven-plugin插件构建docker image并上传docker server, 插件配置内容如下:<!-- 添加docker-maven-plugin插件 --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <!-- 配置docker server 位置,否则默认127.0.0.1,报org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1] failed--> <dockerHost>http://192.168.0.110:2375</dockerHost> <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 --> <imageName>jteasy/${project.artifactId}:${project.version}</imageName> <!-- Dockerfile 文件位置 --> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> -
application.yml配置,内容如下:server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ -
DockerEurekaServerApplication.java文件内容如下:@SpringBootApplication @EnableEurekaServer public class DockerEurekaServerApplication { public static void main(String[] args) { SpringApplication.run(DockerEurekaServerApplication.class, args); } } -
以上完成后,可以进行
mvn构建了 (注意:启动docker server),命令如下:-
clean package docker:build -DskipTests
maven Dockerfile 构建.png
-
-
构建完毕,到
docker server上docker images查看镜像信息
docker images 镜像.png -
运行镜像
-
docker run -d -p 8761:8761 jteasy/docker-eureka-server:0.0.1-SNAPSHOT
镜像运行.png
-
注:
-
这一步可能会出现
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8761 -j DNAT --to-destination 172.17.0.2:8761 ! -i docker0: iptables: No chain/target/match by that name类似的docker 端口映射错误异常信息
解决方法:pkill dockeriptables -t nat -Fifconfig docker0 down-
brctl delbr docker0如果没有brctl命令,执行yum -y install bridge-utils.noarch tunctl.x86_64,然后重新执行brctl systemctl restart docker
docker maven结合只需要关注Dockerfile和pom.xml插件,其他的和普通项目没差别
看完,放松下!

放松一刻
如有不对的地方,望多多指教,谢谢!
作者:逐暗者(转载请注明出处)



