欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Docker構(gòu)建鏡像

文章首發(fā)于微信公眾號(hào)《程序員果果》
地址:https://mp.weixin.qq.com/s/foVeANf0imgU4hfOempp3A

創(chuàng)新互聯(lián)為企業(yè)級(jí)客戶提高一站式互聯(lián)網(wǎng)+設(shè)計(jì)服務(wù),主要包括成都網(wǎng)站制作、做網(wǎng)站、App定制開發(fā)、重慶小程序開發(fā)公司、宣傳片制作、LOGO設(shè)計(jì)等,幫助客戶快速提升營(yíng)銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗(yàn)豐富的經(jīng)驗(yàn),可以確保每一個(gè)作品的質(zhì)量和創(chuàng)作周期,同時(shí)每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。 

構(gòu)建Docker鏡像有以下兩種方法:

  • 使用docker commit命令,從容器創(chuàng)建一個(gè)新的鏡像。
  • 使用docker build命令和 Dockerfile 文件。

一、通過commit命令創(chuàng)建鏡像

語法

docker commit 容器ID:tag

OPTIONS說明:

  • -a :提交的鏡像作者;

  • -c :使用Dockerfile指令來創(chuàng)建鏡像;

  • -m :提交時(shí)的說明文字;

  • -p :在commit時(shí),將容器暫停。

實(shí)例

我們獲取一nginx的鏡像,修改nginx的歡迎頁面,之后重新構(gòu)建成新鏡像。

#下載鏡像
docker pull nginx
#運(yùn)行鏡像
docker run -it -d -p 81:80  --name mynginx nginx

我們?cè)L問127.0.0.1:81 如下:

Docker 構(gòu)建鏡像

下載我們來修改nginx的歡迎頁

#進(jìn)入容器
docker exec -it mynginx /bin/bash
#更新源
apt-get update
#安裝vim
apt-get install -y vim
#修改歡迎頁的title為 "Welcome to nginx , ha ha ha!"

我們刷新訪問127.0.0.1:81如下:

Docker 構(gòu)建鏡像

那么現(xiàn)在修改把修改過的容器,重新構(gòu)件成新的鏡像。

docker commit -a "程序員果果" -m "my nginx" mynginx:v1

之后,我們查看下本地鏡像列表,可以發(fā)現(xiàn)已經(jīng)存在我們構(gòu)件的新鏡像。

Docker 構(gòu)建鏡像

二、通過 Dockerfile 創(chuàng)建鏡像

我們先看個(gè)Dockerfile文件實(shí)例:

# Version: 0.0.1
FROM ubuntu:latest
MAINTAINER gf "gf@163.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html
EXPOSE 80
構(gòu)建
docker build -f /path/Dockerfile

Dockerfile由一系列指令和參數(shù)組成。每條指令都必須為大寫字母,切后面要跟隨一個(gè)參數(shù)。Dockerfile中的指令會(huì)按照順序從上到下執(zhí)行,所以應(yīng)該根據(jù)需要合理安排指令的順序。每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層并對(duì)鏡像進(jìn)行提交。Docker大體上按照如下流程執(zhí)行Dockerfile中的指令。

Dockerfile構(gòu)建構(gòu)過程:

  • 從基礎(chǔ)鏡像運(yùn)行一個(gè)容器
  • 執(zhí)行一條指令,對(duì)容器做出修改
  • 執(zhí)行類似docker commit 的操作,提交一個(gè)新的鏡像層
  • 再基于剛提交的鏡像運(yùn)行一個(gè)新容器
  • 執(zhí)行Dockerfile中的下一條指令,直至所有指令執(zhí)行完畢

從上面可以看出,如果你的Dockerfile由于某些原因(如某條指令失敗了)沒有正常結(jié)束,那你也可以得到一個(gè)可以使用的鏡像。這對(duì)調(diào)試非常有幫助:可以基于該鏡像運(yùn)行一個(gè)具備交互功能的容器,使用最后創(chuàng)建的鏡像對(duì)為什么你的指令會(huì)失敗進(jìn)行調(diào)試。

Dockerfile也支持注釋。以#開頭的行都會(huì)被認(rèn)為是注釋,# Version: 0.0.1這就是個(gè)注釋。

Dockerfile指令

1. FROM

指定基礎(chǔ)鏡像,必須為第一個(gè)命令。

格式:
  FROM <image>
  FROM <image>:<tag>
  FROM <image>@<digest>
示例:
  FROM MySQL:5.6
注:
  tag或digest是可選的,如果不使用這兩個(gè)值時(shí),會(huì)使用latest版本的基礎(chǔ)鏡像
2. MAINTAINER

維護(hù)者信息

格式:
    MAINTAINER <name>
示例:
    MAINTAINER san zhang
    MAINTAINER zhangsan@163.com
    MAINTAINER zs<gf@163.com>
3. RUN

構(gòu)建鏡像時(shí)執(zhí)行的命令。

RUN用于在鏡像容器中執(zhí)行命令,其有以下兩種命令執(zhí)行方式:

格式:
    用法1(shell模式) RUN <command>
    用法1(exec模式) RUN ["executable", "param1", "param2"]
示例:
    RUN ["executable", "param1", "param2"]
    RUN apk update
    RUN ["/etc/execfile", "arg1", "arg1"]
注:
  RUN指令創(chuàng)建的中間鏡像會(huì)被緩存,并會(huì)在下次構(gòu)建中使用。如果不想使用這些緩存鏡像,可以在構(gòu)建時(shí)指定--no-cache參數(shù),如:docker build --no-cache
4. ADD

將本地文件添加到容器中,tar類型文件會(huì)自動(dòng)解壓,可以訪問網(wǎng)絡(luò)資源,類似wget。

格式:
    ADD <src>... <dest>
    ADD ["<src>",... "<dest>"] 用于支持包含空格的路徑
示例:
    ADD hom* /mydir/          # 添加所有以"hom"開頭的文件
    ADD hom?.txt /mydir/      # ? 替代一個(gè)單字符,例如:"home.txt"
    ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
5. COPY

功能類似ADD,但是不會(huì)自動(dòng)解壓文件,也不能訪問網(wǎng)絡(luò)資源。

格式:
    COPY <src>... <dest>
    COPY ["<src>",... "<dest>"] 用于支持包含空格的路徑
示例:
    COPY hom* /mydir/          # 添加所有以"hom"開頭的文件
    COPY hom?.txt /mydir/      # ? 替代一個(gè)單字符,例如:"home.txt"
    COPY test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
    COPY test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
注:
    如果單純復(fù)制文件,Docker 推薦適用COPY
6. ENTRYPOINT

配置容器,使其可執(zhí)行化。配合CMD可省去"application",只使用參數(shù)。

格式:
    用法1(exec模式) ENTRYPOINT ["executable", "param1", "param2"]
    用法2(shell模式) ENTRYPOINT command param1 param2
示例:
    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
注:
   ENTRYPOINT與CMD非常類似,不同的是通過docker run執(zhí)行的命令不會(huì)覆蓋ENTRYPOINT,而docker run命令中指定的任何參數(shù),都會(huì)被當(dāng)做參數(shù)再次傳遞給ENTRYPOINT。Dockerfile中只允許有一個(gè)ENTRYPOINT命令,多指定時(shí)會(huì)覆蓋前面的設(shè)置,而只執(zhí)行最后的ENTRYPOINT指令。
    所以可以指定ENTERYPOINT和CMD組合使用 通過ENTERYPOINT指定命令,CMD指定命令的參數(shù)
7. CMD

指定容器運(yùn)行時(shí)的命令。

格式:
    用法1(exec模式) ENTERYPOINT ["executable" , "param1" , "param2"] 
    用法2(shell模式) ENTERYPOINT command param1 param2
示例:
    CMD [ "sh", "-c", "echo $HOME" ]
8. EXPOSE

指定運(yùn)行改鏡像的容器使用的端口。

格式:
    EXPOSE <port> [<port>...]
示例:
    EXPOSE 80 443
    EXPOSE 8080
注:
  但是docker 容器處于安全的考慮并不會(huì)打開指定端口,而是需要在使用的時(shí)候 ,通過 -p 打開
    例如 $docker run -p 80 -d huanchupk/df_test1 nginx -g "daemon off"
9. ENV

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

格式:
    ENV <key> <value>
    ENV <key>=<value> ...
示例:
    ENV myName gf
    ENV myAddress shanghai
10. VOLUME

向容器中添加卷(指定持久化目錄)。

格式:
    VOLUME ["/path/to/dir"]
示例:
    VOLUME ["/data"]
    VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"
注:
  一個(gè)卷可以存在于一個(gè)或多個(gè)容器的指定目錄,該目錄可以繞過聯(lián)合文件系統(tǒng),并具有以下功能:
    1. 卷可以容器間共享和重用
    2. 容器并不一定要和其它容器共享卷
    3. 修改卷后會(huì)立即生效
    4. 對(duì)卷的修改不會(huì)對(duì)鏡像產(chǎn)生影響
    5. 卷會(huì)一直存在,直到?jīng)]有任何容器在使用它
11. WORKDIR

從鏡像創(chuàng)建一個(gè)新容器時(shí),在容器中設(shè)置工作目錄(類似于cd命令)。

格式:
    WORKDIR /path/to/workdir
示例:
    WORKDIR /a  (這時(shí)工作目錄為/a)
    WORKDIR b  (這時(shí)工作目錄為/a/b)
    WORKDIR c  (這時(shí)工作目錄為/a/b/c)
注:
  通過WORKDIR設(shè)置工作目錄后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都會(huì)在該目錄下執(zhí)行。在使用docker run運(yùn)行容器時(shí),可以通過-w參數(shù)覆蓋構(gòu)建時(shí)所設(shè)置的工作目錄。
12. USER

鏡像由什么用戶執(zhí)行,如果不指定默認(rèn)以root用戶執(zhí)行。

格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group

 示例:
  USER www
 注:
  使用USER指定用戶后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都將使用該用戶。鏡像構(gòu)建完成后,通過docker run運(yùn)行容器時(shí),可以通過-u參數(shù)來覆蓋所指定的用戶。
13. ARG

用于指定傳遞給構(gòu)建運(yùn)行時(shí)的變量。

格式:
    ARG <name>[=<default value>]
示例:
    ARG site
    ARG build_user=www
14. ONBUILD

用于設(shè)置鏡像觸發(fā)器。

格式:
  ONBUILD [INSTRUCTION]
示例:
  ONBUILD ADD . /app/src
  ONBUILD RUN /usr/local/bin/python-build --dir /app/src
注:
  當(dāng)所構(gòu)建的鏡像被用做其它鏡像的基礎(chǔ)鏡像,該鏡像中的觸發(fā)器將會(huì)被觸發(fā)

Dockerfile 實(shí)例

# This my first nginx Dockerfile
# Version 1.0

# Base images 基礎(chǔ)鏡像
FROM centos

#MAINTAINER 維護(hù)者信息
MAINTAINER tianfeiyu 

#ENV 設(shè)置環(huán)境變量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在當(dāng)前目錄下,拷過去會(huì)自動(dòng)解壓
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 執(zhí)行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相當(dāng)于cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /etc/nginx.conf

#EXPOSE 映射端口
EXPOSE 80

#CMD 運(yùn)行以下命令
CMD ["nginx"]

最后用一張圖解釋常用指令的意義:

Docker 構(gòu)建鏡像

參考資料: Dockerfile文件詳解

名稱欄目:Docker構(gòu)建鏡像
瀏覽路徑:http://aaarwkj.com/article38/ijpgpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
日韩精品毛片精品一区到三区| 日本女优高清不卡一二三四区| 蜜桃在线视频在线观看| 国产精品亚洲欧美中字| 99热这里只有精品56| 亚洲华人在线免费视频| 亚洲中文字幕乱码第一页| 日韩精品人妻一区二区三区免费| 国产成人精品一区二区国产乱码| 91日本在线免费观看视频| 亚洲精品国产av一区| 91最新精品丝袜国产在线| 新人妻一区二区在线视频| 国产在线一区二区三区蜜桃| 欧美日韩亚洲国产精品视频| 人妻少妇被猛烈进入久久精品| 欧美一区二区三区有限公司| 日本国产一区二区精品| 婷婷激情六月中文字幕| 四虎最新永久在线网站| 高清区一区二区在线播放| 亚洲天堂精品日韩电影| 国产精品1区2区久久久| 青青草日韩视频在线观看| 亚洲精品国产av一区| 蜜臀av免费在线观看| 亚洲国产偷拍在线观看| 国产一区二区三区日本精品| 免费直接在线看亚洲黄色| 国产真实乱偷精品视频免| 亚洲精品成人综合色在线| 亚洲中文字幕第11页| 男人天堂一区二区av| 日韩亚洲精品99综合观看| 人妻少妇系列一区二区| 99久久精品人妻少妇一| 中文字幕免费日本在线| 日本 午夜 在线 视频| 国产亚洲欧美日韩激情在线| 国产精品综合日韩精| 精品少妇人妻一区二区三区|