日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker入门与实践之【04-使用dockerfile定制镜像】

發(fā)布時間:2024/4/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker入门与实践之【04-使用dockerfile定制镜像】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

利用dockerfile定制鏡像

Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。

以定制nginx 鏡像為例,使用 Dockerfile 來定制。

在一個空白目錄中,建立一個文本文件,并命名為 Dockerfile:

$ mkdir mynginx $ cd mynginx $ touch Dockerfile

其內容為:

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

1 FROM 指定基礎鏡像

所謂定制鏡像,那一定是以一個鏡像為基礎,在其上進行定制.FROM 就是指定基礎鏡像,一個 Dockerfile 中 FROM 是必備的指令,并且必須是第一條指令。

2 RUN 執(zhí)行命令

RUN 指令是用來執(zhí)行命令行命令的。由于命令行的強大能力,RUN 指令在定制鏡像時是最常用的指令之一。其格式有兩種:

  • shell 格式:RUN <命令>,就像直接在命令行中輸入的命令一樣。剛才寫的 Dockerfile 中的 RUN 指令就是這種格式。
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  • exec 格式:RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"],這更像是函數(shù)調用中的格式。

Dockerfile 中每一個指令都會建立一層,RUN 也不例外。每一個 RUN 的行為,就和剛才我們手工建立鏡像的過程一樣:新建立一層,在其上執(zhí)行這些命令,執(zhí)行結束后,commit 這一層的修改,構成新的鏡像。

Union FS 是有最大層數(shù)限制的,比如 AUFS,曾經(jīng)是最大不得超過 42 層,現(xiàn)在是不得超過 127 層。為了不生成非必要層,使用RUN指令時,可以使用如下方法:

FROM debian:jessie RUN buildDeps='gcc libc6-dev make' \&& apt-get update \&& apt-get install -y $buildDeps \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \&& mkdir -p /usr/src/redis \···

這里僅僅使用一個 RUN 指令,并使用 && 將各個所需命令串聯(lián)起來,將多層簡化為了 1 層。在撰寫 Dockerfile 的時候,要經(jīng)常提醒自己,這并不是在寫 Shell 腳本,而是在定義每一層該如何構建。

Dockerfile 支持 Shell 類的行尾添加 \ 的命令換行方式,以及行首 # 進行注釋的格式。良好的格式,比如換行、縮進、注釋等,會讓維護、排障更為容易,這是一個比較好的習慣。

3.構建鏡像

在 Dockerfile 文件所在目錄執(zhí)行:

$ docker build -t nginx:v3 . Sending build context to Docker daemon 2.048 kB Step 1 : FROM nginx---> e43d811ce2f4 Step 2 : RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html---> Running in 9cdc27646c7b---> 44aa4490ce2c Removing intermediate container 9cdc27646c7b Successfully built 44aa4490ce2c

可以使用docker build 命令進行鏡像構建。其格式為:

docker build [選項] <上下文路徑/URL/-> 如:docker build -t nginx:v3 . #指定最終鏡像的名稱: -t nginx:v3

4.鏡像構建上下文(Context)

docker build 命令最后有一個 .。. 表示當前目錄,而 Dockerfile 就在當前目錄,因此不少初學者以為這個路徑是在指定 Dockerfile 所在路徑,這么理解其實是不準確的,這是在指定上下文路徑。

Docker 在運行時分為 Docker 引擎(也就是服務端守護進程)和客戶端工具。而如 docker 命令這樣的客戶端工具,則是通過這組 API 與 Docker 引擎交互,從而完成各種功能。因此,雖然表面上我們好像是在本機執(zhí)行各種 docker 功能,但實際上,一切都是使用的遠程調用形式在服務端(Docker 引擎)完成。

進行鏡像構建的時候,并非所有定制都會通過 RUN 指令完成,經(jīng)常會需要將一些本地文件復制進鏡像,比如通過 COPY 指令、ADD 指令等。而 docker build 命令構建鏡像,其實并非在本地構建,而是在服務端,也就是 Docker 引擎中構建的。

當構建的時候,用戶會指定構建鏡像上下文的路徑,docker build 命令得知這個路徑后,會將路徑下的所有內容打包,然后上傳給 Docker 引擎。這樣 Docker 引擎收到這個上下文包后,展開就會獲得構建鏡像所需的一切文件。

總結: docker打包是在服務端,構建時會在上下文路徑下的所有內容打包上傳到服務端進行,后續(xù)的構建只會操作該路徑下的內容。

默認情況下,如果不額外指定 Dockerfile 的話,會將上下文目錄下的名為 Dockerfile 的文件作為 Dockerfile。 可以使用-f -f /PATH/MyDockerfile 參數(shù)指定某個文件作為 Dockerfile

5.其它 docker build 的用法

5.1 直接用 Git repo 進行構建

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

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

5.2 用給定的 tar 壓縮包構建

如果所給出的 URL 不是個 Git repo,而是個 tar 壓縮包,那么 Docker 引擎會下載這個包,并自動解壓縮,以其作為上下文,開始構建。

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

5.3 從標準輸入中讀取 Dockerfile 進行構建

如果標準輸入傳入的是文本文件,則將其視為 Dockerfile,并開始構建。這種形式由于直接從標準輸入中讀取 Dockerfile 的內容,它沒有上下文,因此不可以像其他方法那樣可以將本地文件 COPY 進鏡像之類的事情。

docker build - < Dockerfile 或 cat Dockerfile | docker build -

5.4 從標準輸入中讀取上下文壓縮包進行構建

如果發(fā)現(xiàn)標準輸入的文件格式是 gzip、bzip2 以及 xz 的話,將會使其為上下文壓縮包,直接將其展開,將里面視為上下文,并開始構建。

$ docker build - < context.tar.gz

轉載于:https://my.oschina.net/funcy/blog/1826706

總結

以上是生活随笔為你收集整理的docker入门与实践之【04-使用dockerfile定制镜像】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。