使用Dockerfile爲SpringBoot應用構建Docker鏡像

摘要

上次寫過一篇使用Maven插件爲SpringBoot應用構建Docker鏡像 ,講述了經過docker-maven-plugin來構建docker鏡像的方式,此種方式須要依賴自建的Registry鏡像倉庫。本文將講述另外一種方式,使用Dockerfile來構建docker鏡像,此種方式不須要依賴自建的鏡像倉庫,只須要應用的jar包和一個Dockerfile文件便可。html

Dockerfile經常使用指令

ADD

用於複製文件,格式:java

ADD <src> <dest>
複製代碼

示例:mysql

# 將當前目錄下的mall-tiny-docker-file.jar包複製到docker容器的/目錄下
ADD mall-tiny-docker-file.jar /mall-tiny-docker-file.jar
複製代碼

ENTRYPOINT

指定docker容器啓動時執行的命令,格式:linux

ENTRYPOINT ["executable", "param1","param2"...]
複製代碼

示例:git

# 指定docker容器啓動時運行jar包
ENTRYPOINT ["java", "-jar","/mall-tiny-docker-file.jar"]
複製代碼

ENV

用於設置環境變量,格式:github

ENV <key> <value>
複製代碼

示例:spring

# mysql運行時設置root密碼
ENV MYSQL_ROOT_PASSWORD root
複製代碼

EXPOSE

聲明須要暴露的端口(只聲明不會打開端口),格式:sql

EXPOSE <port1> <port2> ...
複製代碼

示例:docker

# 聲明服務運行在8080端口
EXPOSE 8080
複製代碼

FROM

指定所需依賴的基礎鏡像,格式:shell

FROM <image>:<tag>
複製代碼

示例:

# 該鏡像須要依賴的java8的鏡像
FROM java:8
複製代碼

MAINTAINER

指定維護者的名字,格式:

MAINTAINER <name>
複製代碼

示例:

MAINTAINER macrozheng
複製代碼

RUN

在容器構建過程當中執行的命令,咱們能夠用該命令自定義容器的行爲,好比安裝一些軟件,建立一些文件等,格式:

RUN <command>
RUN ["executable", "param1","param2"...]
複製代碼

示例:

# 在容器構建過程當中須要在/目錄下建立一個mall-tiny-docker-file.jar文件
RUN bash -c 'touch /mall-tiny-docker-file.jar'
複製代碼

使用Dockerfile構建SpringBoot應用鏡像

編寫Dockerfile文件

# 該鏡像須要依賴的基礎鏡像
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
複製代碼

使用maven打包應用

在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服務器:

展現圖片
展現圖片

在Linux上構建docker鏡像

在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鏡像:

展現圖片

運行mysql服務並設置

1.使用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
複製代碼

2.進入運行mysql的docker容器:

docker exec -it mysql /bin/bash
複製代碼

3.使用mysql命令打開客戶端:

mysql -uroot -proot --default-character-set=utf8
複製代碼

4.修改root賬號的權限,使得任何ip都能訪問:

grant all privileges on *.* to 'root'@'%'
複製代碼

5.建立mall數據庫:

create database mall character set utf8
複製代碼

6.將mall.sql文件拷貝到mysql容器的/目錄下:

docker cp /mydata/mall.sql mysql:/
複製代碼

7.將sql文件導入到數據庫:

use mall;
source /mall.sql;
複製代碼

運行mall-tiny-docker-file應用

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:

展現圖片

項目源碼地址

github.com/macrozheng/…

公衆號

mall項目全套學習教程連載中,關注公衆號第一時間獲取。

公衆號圖片
相關文章
相關標籤/搜索