SpringBoot實戰電商項目mall(20k+star)地址: https://github.com/macrozheng/mall
上次寫過一篇使用Maven插件構建Docker鏡像 ,講述了經過docker-maven-plugin來構建docker鏡像的方式,此種方式須要依賴自建的Registry鏡像倉庫。本文將講述另外一種方式,使用Dockerfile來構建docker鏡像,此種方式不須要依賴自建的鏡像倉庫,只須要應用的jar包和一個Dockerfile文件便可。html
用於複製文件,格式:java
ADD <src> <dest>
示例:mysql
# 將當前目錄下的mall-tiny-docker-file.jar包複製到docker容器的/目錄下 ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar
指定docker容器啓動時執行的命令,格式:linux
ENTRYPOINT ["executable", "param1","param2"...]
示例:git
# 指定docker容器啓動時運行jar包 ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
用於設置環境變量,格式:github
ENV <key> <value>
示例:spring
# mysql運行時設置root密碼 ENV MYSQL_ROOT_PASSWORD root
聲明須要暴露的端口(只聲明不會打開端口),格式:sql
EXPOSE <port1> <port2> ...
示例:docker
# 聲明服務運行在8080端口 EXPOSE 8080
指定所需依賴的基礎鏡像,格式:shell
FROM <image>:<tag>
示例:
# 該鏡像須要依賴的java8的鏡像 FROM java:8
指定維護者的名字,格式:
MAINTAINER <name>
示例:
MAINTAINER macrozheng
在容器構建過程當中執行的命令,咱們能夠用該命令自定義容器的行爲,好比安裝一些軟件,建立一些文件等,格式:
RUN <command> RUN ["executable", "param1","param2"...]
示例:
# 在容器構建過程當中須要在/目錄下建立一個mall-tiny-docker-file.jar文件 RUN bash -c 'touch /mall-tiny-docker-file.jar'
# 該鏡像須要依賴的基礎鏡像 FROM java:8 # 將當前目錄下的jar包複製到docker容器的/目錄下 ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar # 運行過程當中建立一個mall-tiny-docker-file.jar文件 RUN bash -c 'touch /mall-tiny-docker-file.jar' # 聲明服務運行在8080端口 EXPOSE 8080 # 指定docker容器啓動時運行jar包 ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"] # 指定維護者的名字 MAINTAINER macrozheng
在IDEA中雙擊package命令進行打包:
打包成功後展現:
[INFO] --- spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) @ mall-tiny-docker-file --- [INFO] Replacing main artifact with repackaged archive [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 30.749 s [INFO] Finished at: 2019-06-16T14:11:07+08:00 [INFO] Final Memory: 43M/306M [INFO] ------------------------------------------------------------------------
將應用jar包及Dockerfile文件上傳到linux服務器:
在Dockerfile所在目錄執行如下命令:
# -t 表示指定鏡像倉庫名稱/鏡像名稱:鏡像標籤 .表示使用當前目錄下的Dockerfile docker build -t mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT .
輸出以下信息:
Sending build context to Docker daemon 36.37MB Step 1/5 : FROM java:8 ---> d23bdf5b1b1b Step 2/5 : ADD mall-tiny-docker-file-0.0.1-SNAPSHOT.jar /mall-tiny-docker-file.jar ---> c920c9e9d045 Step 3/5 : RUN bash -c 'touch /mall-tiny-docker-file.jar' ---> Running in 55506f517f19 Removing intermediate container 55506f517f19 ---> 0727eded66dc Step 4/5 : EXPOSE 8080 ---> Running in d67a5f50aa7d Removing intermediate container d67a5f50aa7d ---> 1b8b4506eb2d Step 5/5 : ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"] ---> Running in 0c5bf61a0032 Removing intermediate container 0c5bf61a0032 ---> c3614dad21b7 Successfully built c3614dad21b7 Successfully tagged mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT
查看docker鏡像:
docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
docker exec -it mysql /bin/bash
mysql -uroot -proot --default-character-set=utf8
grant all privileges on *.* to 'root'@'%'
create database mall character set utf8
docker cp /mydata/mall.sql mysql:/
use mall; source /mall.sql;
docker run -p 8080:8080 --name mall-tiny-docker-file \ --link mysql:db \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/mall-tiny-docker-file/logs:/var/logs \ -d mall-tiny/mall-tiny-docker-file:0.0.1-SNAPSHOT
訪問接口文檔地址http://192.168.3.101:8080/swagger-ui.html:
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-docker-file
mall項目全套學習教程連載中,關注公衆號第一時間獲取。