亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Docker學(xué)習(xí)之Dockerfile 構(gòu)建鏡像(3)

Lavender / 1089人閱讀

摘要:我們可以了解到,鏡像的定制實際上就是定制每一層所添加的配置文件。指令之指令的目的就是來指定基礎(chǔ)鏡像。指令之指令是用來執(zhí)行命令行命令的。由于命令行的強大能力,指令在定制鏡像時是最常用的指令之一。構(gòu)建鏡像這里我們使用了命令進行鏡像構(gòu)建。

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

Dockerfile 是一個文本文件,其內(nèi)包含了一條條的 指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。接下來以nginx為列通過Dockerfile文件來制定鏡像。

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

$ mkdir mynginx
$ cd mynginx
$ touch Dockerfile

Dockerfile內(nèi)容如下:

這個 Dockerfile 很簡單,一共就兩行。涉及到了兩條指令, FROM 和 RUN 。接下來就先了解這兩個指令。

Dockerfile指令之FROM

FROM指令的目的就是來指定基礎(chǔ)鏡像。

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

在 Docker Hub 上有非常多的高質(zhì)量的官方鏡像,有可以直接拿來使用的服務(wù)類的鏡像,如 nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat等;也有一些方便開發(fā)、構(gòu)建、運行各種語言應(yīng)用的鏡像,如node 、 openjdk 、 python 、 ruby 、 golang 等??梢栽谄渲袑ふ乙粋€最符合我們最終目標(biāo)的鏡像為基礎(chǔ)鏡像進行定制。

Dockerfile指令之RUN

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

shell 格式: RUN <命令> ,就像直接在命令行中輸入的命令一樣。剛才寫的Dockerfile 中的 RUN 指令就是這種格式。

    RUN echo "

Hello, Docker!

" > /usr/share/nginx/html/index.html

exec 格式: RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"] ,這更像是函數(shù)調(diào)用中的格式。

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

構(gòu)建鏡像

這里我們使用了 docker build 命令進行鏡像構(gòu)建。其格式為:

docker build [選項] <上下文路徑/URL/->

在這里我們指定了最終鏡像的名稱 -t nginx:v2 ,構(gòu)建成功后,就可以運行這個鏡像了。

在Dockerfile所在目錄執(zhí)行如下圖命令來進行鏡像的構(gòu)建:

從命令的輸出結(jié)果中,我們可以清晰的看到鏡像的構(gòu)建過程。在 Step 2/2 中,如同我們之前所說的那樣, RUN 指令啟動了一個容器 7c6c2f17c3fc ,執(zhí)行了所要求的命令,并最后提交了這一層 c3d8143457af,隨后刪除了所用到的這個容器 7c6c2f17c3fc 。

可以看到,我們剛才構(gòu)建的ngnix:v2鏡像就已存在了,那么就可以以這個鏡像為基礎(chǔ)啟動一個容器

這里再次簡單說下運行一個容器的命令:

mynginx-test 容器名稱。
-d 設(shè)置容器在在后臺一直運行。
-p 端口進行映射,將本地 80 端口映射到容器內(nèi)部的 80 端口。

最后我們在瀏覽器輸入localhost就可以在網(wǎng)頁中看到通過Dockerfile文件構(gòu)建鏡像的文本了。

這里看到了內(nèi)容出現(xiàn)編碼導(dǎo)致亂碼的問題,這是因為多數(shù)docker基礎(chǔ)鏡像使用locale查看編碼,發(fā)現(xiàn)默認編碼都是POSIX,這會導(dǎo)致中文亂碼。解決方法如下:

首先使用locale -a查看容器所有語言環(huán)境

其次,dockerfile中加入以下參數(shù)重新生成鏡像

  ENV LANG=en_US.UTF-8
  ENV TZ=Asia/Shanghai
  如果有 en_US.utf8 優(yōu)先使用

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/27908.html

相關(guān)文章

  • Docker學(xué)習(xí)之基本概念及安裝(1)

    摘要:分層存儲因為鏡像包含操作系統(tǒng)完整的文件系統(tǒng),其體積往往是龐大的,因此在設(shè)計時,就充分利用的技術(shù),將其設(shè)計為分層存儲的架構(gòu)。分層存儲的特征還使得鏡像的復(fù)用定制變的更為容易。 什么是Docker Docker 是一個開源的應(yīng)用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源。Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 L...

    lvzishen 評論0 收藏0
  • Docker學(xué)習(xí)之Compose介紹(6)

    摘要:列出項目中目前的所有容器。刪除所有停止?fàn)顟B(tài)的服務(wù)容器。一般的,當(dāng)指定數(shù)目多于該服務(wù)當(dāng)前實際運行容器,將新創(chuàng)建并啟動容器反之,將停止容器。命令說明恢復(fù)處于暫停狀態(tài)中的服務(wù)。 Compose 項目是 Docker 官方的開源項目,負責(zé)實現(xiàn)對 Docker 容器集群的快速編排。其代碼目前在 https://github.com/docker/com... 上開源。 介紹 Compose 定位...

    luodongseu 評論0 收藏0
  • Docker學(xué)習(xí)之Compose介紹(6)

    摘要:列出項目中目前的所有容器。刪除所有停止?fàn)顟B(tài)的服務(wù)容器。一般的,當(dāng)指定數(shù)目多于該服務(wù)當(dāng)前實際運行容器,將新創(chuàng)建并啟動容器反之,將停止容器。命令說明恢復(fù)處于暫停狀態(tài)中的服務(wù)。 Compose 項目是 Docker 官方的開源項目,負責(zé)實現(xiàn)對 Docker 容器集群的快速編排。其代碼目前在 https://github.com/docker/com... 上開源。 介紹 Compose 定位...

    Jensen 評論0 收藏0
  • Docker學(xué)習(xí)之Image(鏡像)(2)

    摘要:而鏡像名稱是,因此將會獲取官方鏡像倉庫中標(biāo)簽為的鏡像。如并且下載結(jié)束后,給出該鏡像完整的的摘要,以確保下載一致性。這是指用鏡像為基礎(chǔ)來啟動容器。其中倉庫名標(biāo)簽在之前有提到過。鏡像則是鏡像的唯一標(biāo)識,一個鏡像可以對應(yīng)多個標(biāo)簽。 我們知道Image(鏡像)是Docker的三大組件之一,Docker 運行容器前需要本地存在對應(yīng)的鏡像,如果本地不存在該鏡像,Docker 會從鏡像倉庫下載該鏡像...

    Jokcy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<