自拍无码在线|亚洲AvAv国产|手机久草视频在线|国产三区四区视频|日夲強伦一级入口|欧美香蕉视频一区二区|亚洲涩图日本五月|最新免费成人网址|超碰91官网在线观看|国产口爆在线观看

Docker的Dockerfile腳本基本使用指南 -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【www.zwdianwu.cn - 電腦資料】

    這篇文章主要介紹了Docker的Dockerfile腳本基本使用指南,Docker是當下最火爆的容器集群技術(shù),需要的朋友可以參考下

    Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應用于基礎(chǔ)鏡像并最終創(chuàng)建一個新的鏡像,

Docker的Dockerfile腳本基本使用指南

。它們簡化了從頭到尾的流程并極大的簡化了部署工作。Dockerfile從FROM命令開始,緊接著跟隨者各種方法,命令和參數(shù)。其產(chǎn)出為一個新的可以用于創(chuàng)建容器的鏡像。

    Dockerfile 語法

    在我們深入討論Dockerfile之前,讓我們快速過一下Dockerfile的語法和它們的意義。

    什么是語法?

    非常簡單,在編程中,語法意味著一個調(diào)用命令,輸入?yún)?shù)去讓應用執(zhí)行程序的文法結(jié)構(gòu)。這些語法被規(guī)則或明或暗的約束。程序員遵循語法規(guī)范以和計算機 交互。如果一段程序語法不正確,計算機將無法識別。Dockerfile使用簡單的,清楚的和干凈的語法結(jié)構(gòu),極為易于使用。這些語法可以自我釋義,支持注釋。

    Dockerfile 語法示例

    Dockerfile語法由兩部分構(gòu)成,注釋和命令+參數(shù)

    一個簡單的例子:

代碼如下:

    # Print "Hello docker!"

    RUN echo "Hello docker!"

    Dockerfile 命令

    Dockerfile有十幾條命令可用于構(gòu)建鏡像,下文將簡略介紹這些命令。

    FROM 命令

   

代碼如下:

    FROM

    或

代碼如下:

    FROM :

    這個設(shè)置基本的鏡像,為后續(xù)的命令使用,所以應該作為Dockerfile的第一條指令。

    比如:

代碼如下:

    FROM ubuntu

    如果沒有指定 tag ,則默認tag是latest,如果都沒有則會報錯。

    RUN 命令

    RUN命令會在上面FROM指定的鏡像里執(zhí)行任何命令,然后提交(commit)結(jié)果,提交的鏡像會在后面繼續(xù)用到。

    兩種格式:

代碼如下:

    RUN (the command is run in a shell - `/bin/sh -c`)

    或:

代碼如下:

    RUN ["executable", "param1", "param2" ... ] (exec form)

    RUN命令等價于:

代碼如下:

    docker run image command

    docker commit container_id

    注釋

    使用 # 作為注釋

    如:

代碼如下:

    # Memcached

    #

    # VERSION 1.0

# use the ubuntu base image provided by dotCloud

    FROM ubuntu

# make sure the package repository is up to date

    RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list

    RUN apt-get update

# install memcached

    RUN apt-get install -y memcached

    MAINTAINER 命令

    MAINTAINER

    MAINTAINER命令用來指定維護者的姓名和聯(lián)系方式

    如:

代碼如下:

    MAINTAINER Guillaume J. Charmes, guillaume@dotcloud.com

    ENTRYPOINT 命令

    有兩種語法格式,一種就是上面的(shell方式):

代碼如下:

    ENTRYPOINT cmd param1 param2 ...

    第二種是 exec 格式:

代碼如下:

    ENTRYPOINT ["cmd", "param1", "param2"...]

    如:

代碼如下:

    ENTRYPOINT ["echo", "Whale you be my container"]

    ENTRYPOINT 命令設(shè)置在容器啟動時執(zhí)行命令

代碼如下:

    root@tankywoo-docker:~# cat Dockerfile

    FROM ubuntu

    ENTRYPOINT echo "Welcome!"

root@tankywoo-docker:~# docker run 62fda5e450d5

    Welcome!

    USER 命令

    比如指定 memcached 的運行用戶,可以使用上面的 ENTRYPOINT 來實現(xiàn):

代碼如下:

    ENTRYPOINT ["memcached", "-u", "daemon"]

    更好的方式是:

代碼如下:

    ENTRYPOINT ["memcached"]

    USER daemon

    EXPOSE 命令

    EXPOSE 命令可以設(shè)置一個端口在運行的鏡像中暴露在外

代碼如下:

    EXPOSE [...]

    比如memcached使用端口 11211,可以把這個端口暴露在外,這樣容器外可以看到這個端口并與其通信。

代碼如下:

    EXPOSE 11211

    一個完整的例子:

代碼如下:

    # Memcached

    #

    # VERSION 2.2

# use the ubuntu base image provided by dotCloud

    FROM ubuntu

MAINTAINER Victor Coisne victor.coisne@dotcloud.com

# make sure the package repository is up to date

    RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list

    RUN apt-get update

# install memcached

    RUN apt-get install -y memcached

# Launch memcached when launching the container

    ENTRYPOINT ["memcached"]

# run memcached as the daemon user

    USER daemon

# expose memcached port

    EXPOSE 11211

    上面是官方例子,國內(nèi)建議換成163或sohu的源,不然太慢了,

電腦資料

Docker的Dockerfile腳本基本使用指南》(http://www.zwdianwu.cn)。

代碼如下:

    root@tankywoo-docker:~# docker build -t tankywoo - < dck [38/480]

    Uploading context 2.56 kB

    Uploading context

    Step 0 : FROM ubuntu

    ---> 99ec81b80c55

    Step 1 : MAINTAINER Victor Coisne victor.coisne@dotcloud.com

    ---> Using cache

    ---> 2b58110877f6

    Step 2 : RUN echo "deb http://mirrors.163.com/ubuntu/ precise main restricted universe multiverse" > /etc/apt/sources.list

    ---> Running in f55a4a8bb069

    ---> d48c6a965398

    Step 3 : RUN apt-get update

    ---> Running in da091a1dd6e7

    Ign http://mirrors.163.com precise InRelease

    Get:1 http://mirrors.163.com precise Release.gpg [198 B]

....

Processing triggers for libc-bin (2.19-0ubuntu6) ...

    Processing triggers for ureadahead (0.100.0-16) ...

    ---> 2886671b5b86

    Step 5 : ENTRYPOINT ["memcached"]

    ---> Running in e8aeeab92cb6

    ---> 7148293a4053

    Step 6 : USER daemon

    ---> Running in 288766b19606

    ---> 235e7f630ffa

    Step 7 : EXPOSE 11211

    ---> Running in c6f881b9d51f

    ---> 666c5d65f396

    Successfully built 666c5d65f396

    Removing intermediate container f55a4a8bb069

    Removing intermediate container da091a1dd6e7

    Removing intermediate container f23631d3d45a

    Removing intermediate container e8aeeab92cb6

    Removing intermediate container 288766b19606

    Removing intermediate container c6f881b9d51f

    ENV 命令

    用于設(shè)置環(huán)境變量

代碼如下:

    ENV

    設(shè)置了后,后續(xù)的RUN命令都可以使用。

    使用此dockerfile生成的image新建container,可以通過 docker inspect 看到這個環(huán)境變量:

代碼如下:

    root@tankywoo-docker:~# docker inspect 49bfc7a9817f

    ...

    "Env": [

    "name=tanky",

    "HOME=/",

    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    ],

    ...

    里面的name=tanky就是設(shè)置的。

    也可以通過在docker run時設(shè)置或修改環(huán)境變量:

代碼如下:

    docker run -i -t --env name="tanky" ubuntu:newtest /bin/bash

    ADD 命令

    從src復制文件到container的dest路徑:

代碼如下:

    ADD

    是相對被構(gòu)建的源目錄的相對路徑,可以是文件或目錄的路徑,也可以是一個遠程的文件url

    是container中的絕對路徑

    VOLUME 命令

代碼如下:

    VOLUME [""]

    如:

代碼如下:

    VOLUME ["/data"]

    創(chuàng)建一個掛載點用于共享目錄

    WORKDIR 命令

   

代碼如下:

    WORKDIR /path/to/workdir

    配置RUN, CMD, ENTRYPOINT 命令設(shè)置當前工作路徑

    可以設(shè)置多次,如果是相對路徑,則相對前一個 WORKDIR 命令

    比如:

代碼如下:

    WORKDIR /a WORKDIR b WORKDIR c RUN pwd

    其實是在 /a/b/c 下執(zhí)行 pwd

    CMD 命令

    有三種格式:

代碼如下:

    CMD ["executable","param1","param2"] (like an exec, preferred form)

    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)

    CMD command param1 param2 (as a shell)

    一個Dockerfile里只能有一個CMD,如果有多個,只有最后一個生效。

最新文章