docker執行程式
技術標籤:docker
一般文件使用docker的docker-maven-plugin外掛可以生成映象,配置如下
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<imageName>renren/fast</imageName>
<dockerDirectory>${project.basedir}</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resources>
</configuration>
<!-- 執行命令 mvn clean package docker:build 打包並生成docker映象 -->
</plugin>
imageName指定了映象名稱,應該生成映象也是需要同級目錄的Dockerfile檔案。由於在windows開發環境沒有docker,我們將jar包上傳到linux伺服器。
還有Dockerfile檔案。
Dockerfile內容如下
FROM java:8
EXPOSE 9101
VOLUME /tmp
ADD televr.jar /app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
在當前目錄進行映象執行 Docker build打包 -t指明映象名稱 -f指明檔案 .指明在當前目錄
然後檢視生成的映象
執行映象,這裡沒有在後臺執行ctrl+c結束程式,容器就關閉了。
springboot是8080埠,docker對外暴露是9101埠,外面通過9101訪問訪問不到。重新指定埠對映
使用-p指定埠對映,-d為後臺執行。注意引數要在前面。下面NAMES容器名稱,可以通過--name 指定比如docker run -p 8080:8080 --name televr televr:v1
[[email protected] televr]# docker run -p 9101:8080 -d televr:v1
1c7139e67e4fb3e207987fa92031e76f866577f57148af583c168f38fbd3ef24
[[email protected] televr]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c7139e67e4f televr:v1 "java -jar /app.jar" 20 seconds ago Up 12 seconds 9101/tcp, 0.0.0.0:9101->8080/tcp jolly_ardinghelli
ad5b52ca9150 bladex/sentinel-dashboard "java -Djava.securit?? 4 weeks ago Up 4 weeks 8719/tcp, 0.0.0.0:8858->8858/tcp sentinel
通過外面telnet虛擬機器的9101埠連線不上,在虛擬機器本機telnet localhost 9101 會出現如下Connection closed by foreign host
停止容器執行,估計是虛擬機器沒有開放9101埠
docker stop dd5915f69ec9d5e252b16232ea8d8d3d001b29d8f2cbf371020a8a4a5fb281bc
使用8080埠(開放外網訪問) 啟動容器docker run -p 8080:8080 -d --name televr televr:v1 進入容器內部驗證訪問成功
[[email protected] televr]# docker exec -it 1f61c3dc0d40 bash
[email protected]:/# curl http://localhost:8080/televr/sys/config/list
外網telnet成功,訪問成功。Dockfile配置的Expose埠9101只是說明容器要暴露的埠,實際我們並不是這個段口。