系統: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-reload
systemctl 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 docker
iptables -t nat -F
ifconfig docker0 down
-
brctl delbr docker0
如果沒有brctl
命令,執行yum -y install bridge-utils.noarch tunctl.x86_64
,然后重新執行brctl
systemctl restart docker
docker maven
結合只需要關注Dockerfile
和pom.xml
插件,其他的和普通項目沒差別
看完,放松下!
放松一刻
如有不對的地方,望多多指教,謝謝!
作者:逐暗者(轉載請注明出處)