一、docker服務器側監聽配置
centos7安裝配置docker參考《centos下docker安裝》
vim /usr/lib/systemd/system/docker.service,配置完端口,下面的idea中才能連接成功。
默認使用2375端口監聽,如果開有防火牆,需要把端口添加到例外。
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
二、插件安裝和配置

配置docker連接,一定要顯示Connection succcessful:

三、springboot項目,增加docker插件和Dockerfile配置
- 依賴包和配置
<build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version> 1.2.1</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>${project.artifactId}</imageName> <imageTags> <imageTag>latest</imageTag> </imageTags> <dockerDirectory>${project.basedir}</dockerDirectory> <dockerHost>http://10.245.202.222:2375</dockerHost> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
我一開始建了一個docker的文件夾,將dockerfile放到那里,實踐證明不行,不允許往上層路徑尋找jar包。
2. Dockerfile配置
#指定基礎鏡像,在其上進行定制 FROM java:8 #維護者信息 MAINTAINER zhouyu <zhouyu629@qq.com> #這里的 /tmp 目錄就會在運行時自動掛載為匿名卷,任何向 /tmp 中寫入的信息都不會記錄進容器存儲層。 VOLUME /tmp #復制上下文目錄下的target/demo-1.0.0.jar 到容器里 COPY target/freemarker-page-demo-1.0-SNAPSHOT.jar demo-1.0.0.jar #bash方式執行,使demo-1.0.0.jar可訪問 #RUN新建立一層,在其上執行這些命令,執行結束后, commit 這一層的修改,構成新的鏡像。 RUN bash -c "touch /demo-1.0.0.jar" #聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會因為這個聲明應用就會開啟這個端口的服務 EXPOSE 8080 #指定容器啟動程序及參數 <ENTRYPOINT> "<CMD>" ENTRYPOINT ["java","-jar","demo-1.0.0.jar"]
執行mvn package成功
3. 創建容器


注意bind ports,我這里是8080:8088,前面是服務器向外暴露的端口號,8088則是application.yml里配置的應用端口號,我這里對應的tomcat端口號。
四、主要問題解決
1.xxxx-1.0-SNAPSHOT.jar中沒有主清單屬性 ,造成發布失敗。
主要是因為springboot沒有配置maven package插件,pom中新增plugin
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
2. 容器時間和宿主時間不一致
在Dockerfile最后一行增加:
#設置時區 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' >/etc/timezone \
