前面《Docker系列》Docker是個啥東西? 裏面,跑起來了第一個容器,在容器中運行一個centos鏡像。那麼怎樣去構建鏡像呢,怎樣把本身的Java代碼放到容器裏面運行呢?接下來的內容,咱們就來探索下如何構建咱們本身的鏡像。java
docker能夠自動化根據描述文件,構建鏡像,咱們只須要把描述文件寫好,使用docker build
命令就能夠構建本身的鏡像。首先來了解下描述文件都有哪些內容,須要怎樣的格式?linux
Dockerfile裏面能夠有一系列命令,先來了解下都有哪些命令:spring
首先,一個合法的Dockerfiles都必須有一個FROM
命令來建立一個鏡像層,並指定基礎鏡像,也就是說咱們的鏡像必須在基礎鏡像的基礎上增長咱們本身的內容,語法以下:docker
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
複製代碼
任何合法的鏡像均可以做爲基礎鏡像,咱們通常使用公開的鏡像來做爲咱們的基礎鏡像。如咱們但願咱們的java程序跑在centos上,那麼咱們能夠把centos做爲基礎鏡像來構建。[--platform=<platform>]
參數爲可選參數,用於指定平臺,如linux/amd6四、linux/arm6四、windows/amd64,默認會是構建是有構建時的平臺類型。<image>[:<tag>]
爲鏡像及版本。[AS <name>]
也是可選的,這個沒什麼好說,起個名字。 例子:windows
FROM centos:centos7 AS centos7
複製代碼
RUN命令能夠當前的鏡像層上運行任何的命令,如,能夠直接在centos上面執行yum install java-1.8.0-openjdk.x86_64
安裝JDK,兩種格式以下:centos
RUN <command>
RUN ["executable", "param1", "param2"]
複製代碼
命令沒有什麼好解析的,兩種格式是等價的,例子:bash
RUN yum -y install java-1.8.0-openjdk.x86_64
RUN ["yum", "-y", "install", "java-1.8.0-openjdk.x86_64"]
複製代碼
CMD命令用於指定容器啓動時,運行啥程序,Docker容器雖然能夠像虛擬機同樣提供一個獨立環境,但它與虛擬機是不同的,虛擬機上能夠直接運行一個系統,而docker容器只是一個進程,它須要指定跑哪些程序,如跑起來centos下的控制檯/bin/bash
。一個Dockerfile只能有一個CMD命令,若是有多個的話,只有最後一個會生效,3種格式以下:markdown
CMD ["executable","param1","param2"]
CMD command param1 param2
CMD ["param1","param2"] //先不作了解,後續再深刻
複製代碼
例子:app
CMD ["/bin/bash"]
複製代碼
ADD命令,用於將本地或者遠程的文件拷貝到鏡像中,要在鏡像中跑咱們的spring boot代碼,須要將咱們代碼的jar包拷貝到鏡像中,命令格式以下:ide
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
複製代碼
[--chown=<user>:<group>]
是可選參數,只能在linux的鏡像上使用,設置文件所屬用戶、組相關。 後面兩個參數爲源文件文章,拷貝文件存放的目標位置。例子:
ADD spboot-0.0.1-SNAPSHOT.jar /spboot-0.0.1-SNAPSHOT.jar
複製代碼
瞭解了上面的4個命令就足以讓咱們構建起第一個鏡像了。這裏咱們先簡單建立一個spring boot項目,以後簡單寫個測試接口,端口配置爲8888,以後將Spring boot項目打包稱爲一個jar包。
以後建立一個文件夾,直接把打包好的jar包複製到該文件夾下,同時在該文件夾下建立Dockerfile文件。
Dockerfile文件內容以下:
FROM centos:centos7 AS centos7
RUN yum -y install java-1.8.0-openjdk.x86_64
ADD spboot-0.0.1-SNAPSHOT.jar /tmp/spboot-0.0.1-SNAPSHOT.jar
CMD ["java","-jar", "/tmp/spboot-0.0.1-SNAPSHOT.jar"]
複製代碼
開啓一個控制檯,切換到咱們剛建立的文件夾目錄下,執行docker build -t centosjdk_spboot:1.0 .
,-t 後面的參數指定鏡像名稱及版本,.表示使用當前目錄的Dockerfile文件構建。構建以下圖
構建成功後就能夠經過docker images
查詢到咱們的鏡像了。 鏡像構建完成,就能夠在咱們的容器中跑起來了。
docker run -it -p 80:8888 centosjdk_spboot:1.0
, -p指定本地80端口映射到docker容器8888端口,-it上一篇文章說過,使用標準輸入輸出、及終端。跑起來以後,咱們就能夠訪問咱們運行在容器裏的spring boot項目了。
本文簡述瞭如何去構建第一個本身的鏡像。Docker構建鏡像須要編寫Dockerfile文件,簡單介紹了文件中的4個命令FROM、RUN、CMD、ADD,以及構建跑起來了本身的鏡像。本文到此位置,更多內容,敬請期待。