使用 Dockerfile 定制鏡像

Pride & Prejudice

Dockerfile 簡介

鏡像的定制實際上就是定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構(gòu)建、操作的命令都寫入一個腳本,用這個腳本來構(gòu)建、定制鏡像,那么之前提及的無法重復(fù)的問題、鏡像構(gòu)建透明性的問題、體積的問題就都會解決。這個腳本就是 Dockerfile。

Dcokerfile是一個文本文件,由一系列指令和參數(shù)構(gòu)建的腳本,每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。有了 Dockerfile,當(dāng)我們需要定制自己額外的需求時,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可,省去了敲命令的麻煩。

Dockerfile 文件格式

Dockerfile 分為四部分:基礎(chǔ)鏡像信息、維護(hù)者信息、鏡像操作指令、容器啟動執(zhí)行指令。

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
 
# 1、第一行必須指定 基礎(chǔ)鏡像信息
FROM ubuntu
 
# 2、維護(hù)者信息
MAINTAINER docker_user docker_user@email.com
 
# 3、鏡像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
 
# 4、容器啟動執(zhí)行指令
CMD /usr/sbin/nginx

RUN 指令:每執(zhí)行一條RUN 指令,鏡像添加新的一層,并提交
CMD 指令:來指明運行容器時的操作命令

可以使用一個 RUN 指令,并使用 && 將各個所需命令串聯(lián)起來。Dockerfile 支持 Shell 類的行尾添加 \ 的命令換行方式,以及行首 # 進(jìn)行注釋的格式。

構(gòu)建鏡像

以nginx 鏡像為例。在一個空白目錄中,建立一個文本文件,并命名為 Dockerfile

$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile

Dockerfile 文件內(nèi)容為:

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

在 Dockerfile 文件所在目錄執(zhí)行:(注意命令最后有一個 . 表示當(dāng)前目錄)

docker build -t nginx:v1 .

構(gòu)建完成之后,使用 docker images 命令查看所有鏡像

[root@localhost mynginx]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
nginx                   v1                  2b06b1493d7c        24 seconds ago      109 MB
docker.io/nginx         latest              ae513a47849c        2 weeks ago         109 MB
docker.io/ubuntu        latest              452a96d81c30        3 weeks ago         79.6 MB
docker.io/hello-world   latest              e38bc07ac18e        5 weeks ago         1.85 kB

使用 docker run 命令來啟動容器

docker run  --name nginx_v1   -d -p 81:80 nginx:v1

這條命令表示用 nginx:v1 鏡像啟動一個容器,命名為nginx_v1,并且映射了 81 端口,這樣我們可以用瀏覽器去訪問這個 nginx 服務(wù)器


容器啟動后,需要對容器內(nèi)的文件進(jìn)行進(jìn)一步的完善,可以使用docker exec -it xx bash命令再次進(jìn)行修改

[root@localhost mynginx]# docker exec -it nginx_v1   bash
root@4277f160cd56:/# echo '<h1>Hello, admin!</h1>' > /usr/share/nginx/html/index.html
root@4277f160cd56:/# exit

修改了容器的文件,也就是改動了容器的存儲層,可以通過 docker diff 命令看到具體的改動

docker diff nginx_v1 

其他docker鏡像構(gòu)建用法

docker build 還支持從 URL 構(gòu)建,比如可以直接從 Git repo 中構(gòu)建:

docker build https://github.com/twang2218/gitlab-ce-zh.git#:8.14

這行命令指定了構(gòu)建所需的 Git repo,并且指定默認(rèn)的 master 分支,構(gòu)建目錄為 /8.14/,然后 Docker 就會自己去 git clone 這個項目、切換到指定分支、并進(jìn)入到指定目錄后開始構(gòu)建。

用給定的 tar 壓縮包構(gòu)建

$ docker build http://server/context.tar.gz

參考
Dockerfile reference
Docker鏡像構(gòu)建文件Dockerfile及相關(guān)命令介紹
使用 Dockerfile 定制鏡像
深入Dockerfile(一): 語法指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近公司項目上線原因,一直加班。沒有時間更新文章。隔壁部門需要我提供sdk的打包的支持,所以一直在學(xué)習(xí)docker...
    若與閱讀 556評論 0 8
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,850評論 15 147
  • 啊思緒萬千感受非凡可是沒有一個詞能夠形容這奇妙感覺是窗外時間已深的陰影感染了天上的日月星辰守不住這單薄的兩扇窗索性...
    冬巴拉玲閱讀 148評論 0 0
  • 沒有人喜歡,奔走墓地卻又不得不去活著或死亡在寂寞的土地上種滿念想還有憂傷 孩子們不懂肥沃的土壤變成墳冢,為何?活著...
    走在路上的沉默閱讀 340評論 6 19
  • 性格急,做事火急火燎,這是對自己的標(biāo)簽,去地鐵站坐地鐵時候,每班地鐵相隔三到五分鐘,正下電梯時看到我所坐的班車門打...
    飛起來的艷寶閱讀 320評論 1 1

友情鏈接更多精彩內(nèi)容