日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 一、dockerfile概述
    • 1、dockerfile基礎
    • 2、Docker執行Dockerfile的大致流程
    • 3、鏡像、容器、dockerfile的關系
  • 二、dockerfile常用保留字
    • 1、FROM
    • 2、MAINTAINER與LABEL
    • 3、RUN
    • 4、EXPOSE
    • 5、WORKDIR
    • 6、USER
    • 7、ENV
    • 8、ADD
    • 9、COPY
    • 10、VOLUME
    • 11、CMD
    • 12、ENTRYPOINT
  • 三、使用dockerfile構建一個自帶jdk的centos
    • 1、下載jdk并上傳至linux
    • 2、編寫Dockerfile
    • 3、構建Dockerfile
    • 4、運行一下試試
  • 四、虛懸鏡像
    • 1、制造一個虛懸鏡像
  • 五、docker運行springboot項目
    • 1、準備一個springboot項目
    • 2、手動構建jar包
    • 3、編寫Dockerfile
    • 4、構建鏡像
    • 5、運行容器
    • 6、訪問測試

一、dockerfile概述

Dockerfile是用來構建Docker鏡像的文本文件,是由一條條構建鏡像所需的指令和參數構成的腳本。

官網:https://docs.docker.com/engine/reference/builder/

1、dockerfile基礎

1:每條保留字指令都必須為大寫字母且后面要跟隨至少一個參數
2:指令按照從上到下,順序執行
3:#表示注釋
4:每條指令都會創建一個新的鏡像層并對鏡像進行提交

2、Docker執行Dockerfile的大致流程

(1)docker從基礎鏡像運行一個容器
(2)執行一條指令并對容器作出修改
(3)執行類似docker commit的操作提交一個新的鏡像層
(4)docker再基于剛提交的鏡像運行一個新容器
(5)執行dockerfile中的下一條指令直到所有指令都執行完成

dockerfile的使用及使用dockerfile部署springboot項目的過程

3、鏡像、容器、dockerfile的關系

從應用軟件的角度來看,Dockerfile、Docker鏡像與Docker容器分別代表軟件的三個不同階段,

  • Dockerfile是軟件的原材料
  • Docker鏡像是軟件的交付品
  • Docker容器則可以認為是軟件鏡像的運行態,也即依照鏡像運行的容器實例
    Dockerfile面向開發,Docker鏡像成為交付標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當Docker體系的基石。

1 Dockerfile,需要定義一個Dockerfile,Dockerfile定義了進程需要的一切東西。Dockerfile涉及的內容包括執行代碼或者是文件、環境變量、依賴包、運行時環境、動態鏈接庫、操作系統的發行版、服務進程和內核進程(當應用進程需要和系統服務和內核進程打交道,這時需要考慮如何設計namespace的權限控制)等等;
2 Docker鏡像,在用Dockerfile定義一個文件之后,docker build時會產生一個Docker鏡像,當運行 Docker鏡像時會真正開始提供服務;
3 Docker容器,容器是直接提供服務的。

基本構建步驟:(1)編寫Dockerfile文件(2)docker build命令構建鏡像(3)docker run依鏡像運行容器實例

二、dockerfile常用保留字

1、FROM

基礎鏡像,當前新鏡像是基于哪個鏡像的,指定一個已經存在的鏡像作為模板,第一條命令必須是FROM

# 命令格式
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# 實例:
FROM centos:7.0

2、MAINTAINER與LABEL

鏡像維護者的姓名和郵箱地址

# 命令格式
MAINTAINER <name>

該命令已經廢棄了。推薦使用LABEL,它可以設置您需要的任何元數據。

# 命令格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."

3、RUN

容器構建時需要運行的命令,RUN是在 docker build時運行

(1)shell格式(常用)

# <命令行命令> 等同于,在終端操作的shell命令
RUN <命令行命令>

(2)exec格式

# 錄入:RUN ["./test.php", "dev", "offline"] 等價于RUN ./test.php dev offline
RUN ["可執行文件", "param1", "param2"]

4、EXPOSE

當前容器對外暴露出的端口

EXPOSE 80
EXPOSE 80/tcp
EXPOSE 80/udp

5、WORKDIR

指定在創建容器后,終端默認登陸的進來工作目錄,一個落腳點

WORKDIR /path/to/workdir

6、USER

指定該鏡像以什么樣的用戶去執行,如果都不指定,默認是root

# 命令格式
USER <user>[:<group>]
USER <UID>[:<GID>]

# 實例
USER cxf

7、ENV

用來在構建鏡像過程中設置環境變量

# 命令格式
ENV <key>=<value> ...

# 實例
ENV MY_PATH /usr/mytest
#這個環境變量可以在后續的任何RUN指令中使用,這就如同在命令前面指定了環境變量前綴一樣;也可以在其它指令中直接使用這些環境變量,
#比如:WORKDIR $MY_PATH

8、ADD

將宿主機目錄下的文件拷貝進鏡像且會自動處理URL和解壓tar壓縮包

ADD a.tar.gz /mydir/

9、COPY

類似ADD,拷貝文件和目錄到鏡像中。
將從構建上下文目錄中 <源路徑> 的文件/目錄復制到新的一層的鏡像內的 <目標路徑> 位置

COPY src dest
COPY ["src", "dest"]
<src源路徑>:源文件或者源目錄
<dest目標路徑>:容器內的指定路徑,該路徑不用事先建好,路徑不存在的話,會自動創建。

10、VOLUME

容器數據卷,用于數據保存和持久化工作

11、CMD

指定容器啟動后的要干的事情

注意!Dockerfile 中可以有多個 CMD 指令,但只有最后一個生效,CMD 會被 docker run 之后的參數替換

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

# 覆蓋默認的CMD,不會啟動tomcat
docker exec -it comcat /bin/bash

CMD是在docker run 時運行。RUN是在 docker build時運行。

12、ENTRYPOINT

也是用來指定一個容器啟動時要運行的命令。

類似于 CMD 指令,但是ENTRYPOINT不會被docker run后面的命令覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序

# 命令格式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2

ENTRYPOINT可以和CMD一起用,一般是變參才會使用 CMD ,這里的 CMD 等于是在給 ENTRYPOINT 傳參。
當指定了ENTRYPOINT后,CMD的含義就發生了變化,不再是直接運行其命令而是將CMD的內容作為參數傳遞給ENTRYPOINT指令,他兩個組合會變成:<ENTRYPOINT> “<CMD>”

FROM ubuntu
ENTRYPOINT ["top", "-b"] # 定參
CMD ["-c"] # 變參
# 最終執行top -c,而如果使用命令行指定 -H,會替換CMD的-c

在執行docker run的時候可以指定 ENTRYPOINT 運行所需的參數。如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最后一個生效。

三、使用dockerfile構建一個自帶jdk的centos

1、下載jdk并上傳至linux

java8下載地址:https://www.oracle.com/java/technologies/downloads/#java8

2、編寫Dockerfile

# 注意大寫字母D
vi Dockerfile
# 指定基礎鏡像,需要保證本地有這個鏡像
FROM centos
# 指定作者郵箱
MAINTAINER cxf
# 工作目錄
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 準備工作
RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN cd /usr/local
#安裝vim編輯器
RUN yum -y install vim
#安裝ifconfig命令查看網絡IP
RUN yum -y install net-tools
#安裝java8及lib庫
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相對路徑jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安裝包必須要和Dockerfile文件在同一位置
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
#配置java環境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3、構建Dockerfile

注意!本目錄下只有一個Dockerfile并且包含jdk安裝包

dockerfile的使用及使用dockerfile部署springboot項目的過程

# 構建新鏡像命令格式 。注意,上面TAG后面有個空格,有個點
docker build -t 新鏡像名字:TAG .
# 構建我們的鏡像,等一會就會構建成功
docker build -t centosjava8:1.0 .

[root@localhost myfile]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   34 seconds ago   747MB
centos                        latest    5d0da3dc9764   19 months ago    231MB

4、運行一下試試

docker run -it 4dbff0755585 /bin/bash

#我們發現,新的鏡像攜帶著vim、ifconfig和java環境了!

四、虛懸鏡像

倉庫名、標簽都是<none>的鏡像,俗稱dangling image

1、制造一個虛懸鏡像

(1)創建Dockerfile

FROM centos
CMD echo 'action is success'

(2)構建

docker build .

(3)查看

[root@localhost xu]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   31 minutes ago   747MB
<none>                        <none>    9818ccf3738e   19 months ago    231MB
centos                        latest    5d0da3dc9764   19 months ago    231MB

# 查看所有虛懸鏡像
[root@localhost xu]# docker image ls -f dangling=true
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    9818ccf3738e   19 months ago   231MB

(4)刪除

# 刪除虛懸鏡像
docker image prune

虛懸鏡像已經失去存在價值,可以刪除

五、docker運行springboot項目

1、準備一個springboot項目

編寫一個測試Controller,以供測試。

@RestController
@RequestMapping
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "啟動成功 ===================test";
    }
}

2、手動構建jar包

我們使用maven package命令手動打包并上傳到服務器上。

[root@localhost ~]# cd mydocker/
[root@localhost mydocker]# ll
total 17084
-rw-r--r--. 1 root root 17491177 Apr  9 14:18 demo-0.0.1-SNAPSHOT.jar

注!通常來說這一步可以使用jenkins自動構建。

3、編寫Dockerfile

# 基礎鏡像使用java
FROM centosjava8:1.0
# 作者
MAINTAINER cxf
# VOLUME 指定臨時文件目錄為/tmp,在主機/var/lib/docker目錄下創建了一個臨時文件并鏈接到容器的/tmp
VOLUME /tmp
# 將jar包添加到容器中并更名為cxf_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /cxf_docker.jar
# 運行jar包
RUN bash -c 'touch /cxf_docker.jar'
ENTRYPOINT ["java","-jar","/cxf_docker.jar"]
#暴露6001端口作為微服務
EXPOSE 8088

4、構建鏡像

docker build -t mydemo:1.0 .

[root@localhost mydocker]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
mydemo                        1.0       7124eca083ad   26 seconds ago   764MB
centosjava8                   1.0       4dbff0755585   7 hours ago      747MB

5、運行容器

docker run -d -p 8088:8088 7124eca083ad

6、訪問測試

訪問服務器我們的接口,發現測試成功!

分享到:
標簽:Dockerfile 服務器 過程 部署 項目
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定