在前面的 《docker - 構建一個簡單的docker鏡像》中,介紹了兩種構建鏡像的方法,其中,經過dockerfile文件構建鏡像是在實際生產中經常使用的;除此以外,還經過 docker - Dockerfile經常使用指令 和 docker - 經常使用命令 兩篇文章介紹了dockerfile的指令和docker的經常使用命令,接下來,咱們將會使用所學的知識構建一個簡單的springboot應用。java
該springboot應用對外暴露了一個api,對外暴露8080端口,日誌文件寫在應用當前目錄,部分代碼以及配置文件以下:spring
@Slf4j @SpringBootApplication @RestController public class SpringbootDockerApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDockerApplication.class, args); } @RequestMapping("/docker") public String docker() { log.info("access docker home at " + LocalTime.now()); return "Hello Docker!"; } }
application.propertiesdocker
spring.application.name=springboot-docker server.port=8080 logging.file=app.log
把jar和dockerfile文件上傳到一個springboot-docker目錄中api
[root@localhost springboot-docker]# ls Dockerfile springboot-docker-1.0.jar
Dockerfile:springboot
FROM openjdk:8u181-jdk-alpine ARG workdir=/app VOLUME ${workdir} WORKDIR ${workdir} ADD springboot-docker-1.0.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
接下經過BUILD命令構建鏡像bash
[root@localhost springboot-docker]# docker build -t springboot-docker:1.0 . Sending build context to Docker daemon 17.85MB Step 1/7 : FROM openjdk:8u181-jdk-alpine ---> 97bc1352afde Step 2/7 : ARG workdir=/app ---> Using cache ---> a3818e8696c2 Step 3/7 : VOLUME ${workdir} ---> Using cache ---> e2faefe34aa6 Step 4/7 : WORKDIR ${workdir} ---> Using cache ---> 144b537c1b57 Step 5/7 : ADD springboot-docker-1.0.jar app.jar ---> Using cache ---> daca849e1012 Step 6/7 : EXPOSE 8080 ---> Using cache ---> 123da0847dd3 Step 7/7 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"] ---> Using cache ---> de46a3f96d91 Successfully built de46a3f96d91 Successfully tagged springboot-docker:1.0
查看當前本地倉庫的鏡像,已經構建springboot-docker:1.0鏡像app
[root@localhost springboot-docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE springboot-docker 1.0 de46a3f96d91 38 minutes ago 121MB openjdk 8u181-jdk-alpine 97bc1352afde 5 weeks ago 103MB
運行鏡像dom
docker run -p 8080:8080 -d --name springboot-docker springboot-docker:1.0
經過-p參數,把容器中的8080端口映射到宿主機中的8080端口。--name,給容器起一個名字curl
能夠查看springboot應用的啓動狀況ui
docker logs -f springboot-docker
查看容器的運行狀況
docker inspect springboot-docker
只看一些關鍵的信息
"Mounts": [ { "Type": "volume", "Name": "90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3", "Source": "/var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data", "Destination": "/app", "Driver": "local", } ], "Networks": { "bridge": { "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", } }
宿主機中的 /var/lib/docker/volumes/90df5c82f11290eddfc86faead12e4a79649672845b2a816e04f868da76851a3/_data 目錄掛載到 容器的 /app目錄
容器的IP地址 172.17.0.2
運行成功後,在宿主機中經過命令訪問服務
curl 172.17.0.2:8080/docker
也能夠經過宿主機的IP或者localhost訪問,由於已經綁定
curl 127.0.0.1:8080/docker