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

資訊專欄INFORMATION COLUMN

Docker入門- 使用Dockerfile創(chuàng)建鏡像(CentOS 7)

IT那活兒 / 1991人閱讀
Docker入門- 使用Dockerfile創(chuàng)建鏡像(CentOS 7)

點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!

Dockerfile指令說明

創(chuàng)建鏡像

命令格式:docker build [OPTIONS] PATH | URL | -

該命令將讀取上下文路徑(PATH指定的路徑)下的Dockerfile,并將該路徑下所有數(shù)據(jù)作為上下文(Context)發(fā)送給Docker服務(wù)端進(jìn)行鏡像創(chuàng)建。
如果未說明最后一個(gè)參數(shù),那么默認(rèn)上下文路徑就是 Dockerfile 所在的位置。

注意:

  • 可以使用-f來指定使用不在上下文路徑中的Dockerfile文件。
  • 除非是生成鏡像所必須的文件,否則不要放在上下文路徑下,因?yàn)闀?huì)一起打包發(fā)送給 docker 引擎,如果文件過多會(huì)造成創(chuàng)建過程緩慢。
創(chuàng)建鏡像舉例
創(chuàng)建一個(gè)標(biāo)簽Tag(-t指定)為builder/first_image:1.0的鏡像,上下文路徑為/docker/docker_build:
docker bulid -t builder/first_image:1.0 /docker/docker_build
多步驟創(chuàng)建鏡像:
從Docker 17.05+版本開始支持多步驟創(chuàng)建(Multi-stage build)鏡像的特性,可以精簡(jiǎn)最終生成鏡像的大小。

對(duì)于需要編譯的應(yīng)用(如C、Go或Java語言等)來說,通常情況下至少需要準(zhǔn)備兩個(gè)環(huán)境的 Docker鏡像:

  • 編譯環(huán)境鏡像:包括完整的編譯引擎、依賴庫(kù)等,往往比較龐大。作用是編譯應(yīng)用為二進(jìn)制文件;
  • 運(yùn)行環(huán)境鏡像:利用編譯好的二進(jìn)制文件,運(yùn)行應(yīng)用,由于不需要編譯環(huán)境,體積比較小。
使用多步驟創(chuàng)建,可以在保證最終生成的運(yùn)行環(huán)境鏡像保持精簡(jiǎn)的情況下,使用單一的Dockerfile,降低維護(hù)復(fù)雜度。
以Go語言應(yīng)用為例
先創(chuàng)建一個(gè)main.go程序:
package main
import "fmt"

func main(){
fmt.Println("Hello Docker!")
}
編輯Dockerfile文件:
使用golang:latest鏡像作為編譯環(huán)境,使用精簡(jiǎn)的鏡像alpine:latest作為運(yùn)行環(huán)境,來創(chuàng)建新鏡像。
# define stage name as builder
FROM golang:latest as builder
RUN mkdir -p /go/src/test
WORKDIR /go/src/test
COPY main.go .
RUN CGO_ENABLED=0 GOOS=linux go build -o app .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# copy file from the builder stage
COPY --from=builder /go/src/test/app .
CMD ["./app"]
創(chuàng)建鏡像:
鏡像標(biāo)簽(-t)為: builder/test_multistage:1.0,上下文路徑為: /docker/docker_build
命令:docker build -t builder/test_multistage:1.0 /docker/docker_build
?
使用該鏡像:
docker run builder/test_multistage:1.0

最佳實(shí)踐

  • 精簡(jiǎn)鏡像用途

    盡量讓每個(gè)鏡像的用途集中單一,避免構(gòu)造大而復(fù)雜、多功能的鏡像;

  • 選用合適的基礎(chǔ)鏡像

    容器的核心是應(yīng)用。選擇過大的父鏡像(如 Ubuntu系統(tǒng)鏡像)會(huì)造成最終生成應(yīng)用鏡像的臃腫,推薦選用瘦身過的應(yīng)用鏡像(如node:s1im),或者較為小巧的系統(tǒng)鏡像(如 alpine、 busybox或 debian);

  • 提供注釋和維護(hù)者信息

    Dockerfile也是一種代碼,需要考慮方便后續(xù)的擴(kuò)展和他人的使用;

  • 正確使用版本號(hào)

    使用明確的版本號(hào)信息,如1.0,2.0,而非依賴于默認(rèn)的latest。通過版本號(hào)可以避免環(huán)境不一致導(dǎo)致的問題;

  • 減少鏡像層數(shù)

    盡量合并RUN、ADD和COPY指令。通常情況下,多個(gè)RUN指令可以合并為一條RUN指令;

  • 恰當(dāng)使用多步驟創(chuàng)建(17.05+版本支持)

    通過多步驟創(chuàng)建,可以將編譯和運(yùn)行等過程分開,保證最終生成的鏡像只包括運(yùn)行應(yīng)用所需要的最小化環(huán)境。當(dāng)然,用戶也可以通過分別構(gòu)造編譯鏡像和運(yùn)行鏡像來達(dá)到類似的結(jié)果,但這種方式需要維護(hù)多個(gè);

  • 使用.dockerignore文件
    來配置需要忽略的非必要的路徑和文件,不將其發(fā)送給Docker引擎,從而加快整個(gè)鏡像的創(chuàng)建過程。

本文作者:孫長(zhǎng)城(上海新炬王翦團(tuán)隊(duì))

本文來源:“IT那活兒”公眾號(hào)

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

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

相關(guān)文章

  • Docker實(shí)戰(zhàn)之入門Dockerfile詳細(xì)分析:構(gòu)建docker鏡像(1)基礎(chǔ)鏡像cento

    摘要:如果有服務(wù)器需要維護(hù)重啟時(shí),也會(huì)重啟,此時(shí)端口會(huì)發(fā)生變化,仍然會(huì)隨機(jī)拿一個(gè)沒有使用的端口號(hào)來和號(hào)端口做端口映射。除非該刪掉后,端口號(hào)會(huì)被分配給其他使用。 Dockerfile Docker是軟件工業(yè)上的集裝箱技術(shù)。 通過以下文件制作Docker鏡像 [root@Optimus docker-training]# cd centos7/ [root@Optimus centos7]# l...

    learn_shifeng 評(píng)論0 收藏0
  • 30 分鐘快速入門 Docker 教程

    摘要:分鐘快速入門教程一歡迎來到世界與虛擬化在沒有的時(shí)代,我們會(huì)使用硬件虛擬化虛擬機(jī)以提供隔離。倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)和私有倉(cāng)庫(kù),最大的公開倉(cāng)庫(kù)是官方倉(cāng)庫(kù),國(guó)內(nèi)的公開倉(cāng)庫(kù)也有很多選擇,例如阿里云等。 30 分鐘快速入門 Docker 教程 一、歡迎來到 Docker 世界 1. Docker 與虛擬化 在沒有 Docker 的時(shí)代,我們會(huì)使用硬件虛擬化(虛擬機(jī))以提供隔離。這里,虛擬機(jī)通過在操作系...

    LucasTwilight 評(píng)論0 收藏0
  • Docker實(shí)戰(zhàn)之入門Dockerfile詳細(xì)分析(5):ENTRYPOINT和CMD命令的區(qū)別

    摘要:用法在當(dāng)中只有最后一條生效,其他都不生效第一種寫法類似數(shù)組形式,推薦使用。第二章方法執(zhí)行命令啟動(dòng)的進(jìn)程,該進(jìn)程的為執(zhí)行完這個(gè)的。命令覆蓋掉了中的命令,直接進(jìn)入到了中。刪除鏡像前,先停止。 ENTRYPOINT用法showImg(https://segmentfault.com/img/bVXNu5?w=702&h=322); entrypoint在dockerfile當(dāng)中只有最后一條生...

    JerryWangSAP 評(píng)論0 收藏0
  • Docker實(shí)戰(zhàn)之入門Dockerfile詳細(xì)分析:構(gòu)建docker鏡像(2)中間件鏡像

    摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像?,F(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。 以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。 構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。 現(xiàn)在centos7作為基礎(chǔ)鏡...

    neuSnail 評(píng)論0 收藏0
  • Docker實(shí)戰(zhàn)之入門Dockerfile詳細(xì)分析:構(gòu)建docker鏡像(2)中間件鏡像

    摘要:構(gòu)建鏡像時(shí),首先要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像?,F(xiàn)在作為基礎(chǔ)鏡像,下面來構(gòu)建兩個(gè)中間件鏡像鏡像具有和能力的鏡像。同時(shí),用文件覆蓋默認(rèn)的配置文件。構(gòu)建鏡像查看鏡像以上鏡像已經(jīng)做好了。 以上已經(jīng)構(gòu)建好了一個(gè)基礎(chǔ)的docker鏡像centos7。 構(gòu)建docker鏡像時(shí),首先 要有一個(gè)基礎(chǔ)鏡像,然后有中間件鏡像,最后生成一個(gè)應(yīng)用鏡像。 現(xiàn)在centos7作為基礎(chǔ)鏡...

    susheng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<