1、項(xiàng)目結(jié)構(gòu)
pom文件中加入:docker-maven-plugin <plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2、創(chuàng)建Dockerfile文件在src/main/docker文件夾下創(chuàng)建用于生成鏡像的文件 文件內(nèi)容: FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD kzng-thymeleaf.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ] 文件解釋: FROM為使用哪個(gè)鏡像 VOLUME為掛載路徑 ADD為復(fù)制文件到鏡像中 RUN為初始化時(shí)運(yùn)行的命令 ENV為設(shè)置環(huán)境變量 ENTRYPOINT為啟動(dòng)時(shí)運(yùn)行的命令 VOLUME 指定了臨時(shí)文件目錄為/tmp。其效果是在主機(jī) /var/lib/docker 目錄下創(chuàng)建了一個(gè)臨時(shí)文件,并鏈接到容器的/tmp。該步驟是可選的,如果涉及到文件系統(tǒng)的應(yīng)用就很有必要了。/tmp目錄用來持久化到 Docker 數(shù)據(jù)文件夾,因?yàn)?Spring Boot 使用的內(nèi)嵌 Tomcat 容器默認(rèn)使用/tmp作為工作目錄 項(xiàng)目的 jar 文件作為 “app.jar” 添加到容器的 ENTRYPOINT 執(zhí)行項(xiàng)目 app.jar。為了縮短 Tomcat 啟動(dòng)時(shí)間,添加一個(gè)系統(tǒng)屬性指向 “/dev/urandom” 作為 Entropy Source 3、docker部署springboot項(xiàng)目
執(zhí)行docker build命令,docker就會(huì)根據(jù)Dockerfile-kzng里你定義好的命令構(gòu)建新的鏡像 在該mydocker目錄下,命名為kzng_app(注意后邊有個(gè)點(diǎn)) docker build -f Dockerfile-kzng -t kzng-app . 其中-f代表選擇的鏡像文件Dockerfile-kzng,-t代表要構(gòu)建的鏡像的tag,.代表當(dāng)前目錄,也就是Dockerfile-kzng文件所在的目錄。 查看鏡像是否創(chuàng)建成功 docker images
注:容器時(shí)間和宿主時(shí)間會(huì)不一致 查看容器的時(shí)間: docker exec [containerId] date 創(chuàng)建容器時(shí)注意與宿主機(jī)時(shí)間保持一致(-v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime) docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -d -p 5050:5050 kzng-app 此方法只修改了容器時(shí)間,但啟動(dòng)的服務(wù)仍然還是差8小時(shí) ,最好的方法直接在Dockfile文件中修改時(shí)間、時(shí)區(qū) 4、啟動(dòng)項(xiàng)目docker run -d -p 80:8888 kzng-app -d參數(shù)是讓容器后臺(tái)運(yùn)行 -p 是做端口映射,此時(shí)將服務(wù)器中的80端口映射到容器中的80(項(xiàng)目中端口配置的是80)端口 建議應(yīng)用系統(tǒng)設(shè)置一致 當(dāng)出現(xiàn):docker: Error response from daemon: driver failed programming external connectivity on endpoint epic_kowalevski時(shí)重啟docker(systemctl restart docker)
5、結(jié)尾當(dāng)docker運(yùn)行部署好后,若只能在服務(wù)器端訪問,而不能在其它客戶端機(jī)器上訪問時(shí),即(Linux 下 Docker 端口映射到宿主機(jī)后 外部無法訪問對(duì)應(yīng)宿主機(jī)端口) 需要進(jìn)行如下配置: 解決辦法: # vi /etc/sysctl.conf 或者 # vi /usr/lib/sysctl.d/00-system.conf 添加如下代碼: net.ipv4.ip_forward=1 重啟network服務(wù) # systemctl restart network 查看是否修改成功 # sysctl net.ipv4.ip_forward 如果返回為“net.ipv4.ip_forward = 1”則表示成功了 |
|
|