RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Docker入門指南之什么是Dockerfile

jf_78858299 ? 來(lái)源:CSDN ? 作者:一只楠喃 ? 2023-02-06 15:25 ? 次閱讀

八、Dockerfile**

8.1 什么是Dockerfile

圖片

8.1.1 介紹

Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像

  • 對(duì)于開(kāi)發(fā)人員:可以為開(kāi)發(fā)團(tuán)隊(duì)提供一個(gè)完全一致的開(kāi)發(fā)環(huán)境
  • 對(duì)于測(cè)試人員:可以直接拿開(kāi)發(fā)時(shí)所構(gòu)建的鏡像或者通過(guò)Dockerfile文件構(gòu)建一個(gè)新的鏡像開(kāi)始工作
  • 對(duì)于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無(wú)縫移植

8.1.2 Dockerfile構(gòu)建步驟

  1. 編寫Dockerfile文件
  2. docker build
  3. docker run

8.1.3 Dockerfile文件內(nèi)容

以熟悉的centos為例:https://hub.docker.com/_/centos/

圖片

8.2 DockerFile 構(gòu)建過(guò)程解析

8.2.1 Dockerfile內(nèi)容基礎(chǔ)知識(shí)

  • 每條保留字指令都必須為大寫字母且后面要跟隨至少一個(gè)參數(shù)
  • 指令按照從上到下,順序執(zhí)行
  • #表示注釋
  • 每條指令都會(huì)創(chuàng)建一個(gè)新的鏡像層,并對(duì)鏡像進(jìn)行提交

8.2.2 Docker執(zhí)行Dockerfile大致流程

  1. docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器
  2. 執(zhí)行一條指令并對(duì)容器作出修改
  3. 執(zhí)行類似docker commit的操作提交一個(gè)新的鏡像層
  4. docker再基于剛提交的鏡像運(yùn)行一個(gè)新容器
  5. 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

8.3 常用命令

圖片

圖片

8.3.1 FROM

指明構(gòu)建的新鏡像是來(lái)自于哪個(gè)基礎(chǔ)鏡像,例如:

FROM centos: latest

8.3.2 MAINTAINER

指明鏡像維護(hù)著及其聯(lián)系方式(一般是郵箱地址),例如:

MAINTAINER JC Zhang zhangsan@163.com

不過(guò),MAINTAINER并不推薦使用,更推薦使用LABEL來(lái)指定鏡像作者,例如

LABEL maintainer=“zhangsan.cn”

8.3.3 RUN

構(gòu)建鏡像時(shí)運(yùn)行的Shell命令,例如:

RUN [“yum”, “install”, “httpd”]
RUN yum install httpd

8.3.4 CMD

啟動(dòng)容器時(shí)執(zhí)行的Shell命令,例如:

CMD ["-C", “/start.sh”]
CMD ["/usr/sbin/sshd", “-D”]
CMD /usr/sbin/sshd -D

8.3.5 EXPOSE

聲明容器運(yùn)行的服務(wù)端口,例如:

EXPOSE 80 443

8.3.6 ENV

設(shè)置環(huán)境內(nèi)環(huán)境變量,例如:

ENV MYSQL_ROOT_PASSWORD 123456
ENV JAVA_HOME /usr/local/jdk1.8.0_45

8.3.7 ADD

拷貝文件或目錄到鏡像中,PS:如果是URL或壓縮包,會(huì)自動(dòng)下載或自動(dòng)解壓,例如:

ADD …

ADD html.tar.gz /var/www/html

ADD https://xxx.com/html.tar.gz /var/www/html

8.3.8 COPY

拷貝文件或目錄到鏡像中,用法同ADD,只是不支持自動(dòng)下載和解壓,例如:

COPY ./start.sh /start.sh

8.3.9 ENTRYPOINT

啟動(dòng)容器時(shí)執(zhí)行的Shell命令,同CMD類似,只是由ENTRYPOINT啟動(dòng)的程序不會(huì)被docker run命令行指定的參數(shù)所覆蓋,而且這些命令行參數(shù)會(huì)被當(dāng)作參數(shù)傳遞給ENTRYPOINT指定指定的程序。

ENTRYPOINT ["/bin/bash", “-C”, “/start.sh”]
ENTRYPOINT /bin/bash -C ‘/start.sh’
PS:Dockerfile文件中也可以存在多個(gè)ENTRYPOINT指令,但僅有最后一個(gè)會(huì)生效。

8.3.10 VOLUME

指定容器掛載點(diǎn)到宿主機(jī)自動(dòng)生成的目錄或其他容器,例如:

VOLUME ["/var/lib/mysql"]
PS:一般不會(huì)在Dockerfile中用到,更常見(jiàn)的還是在docker run的時(shí)候指定-v數(shù)據(jù)卷。

8.3.11 WORKDIR

為RUN、CMD、ENTRYPOINT以及COPY和AND設(shè)置工作目錄,例如:

WORKDIR /data

**8.4 **使用腳本創(chuàng)建鏡像

8.4.1 編寫Dockerfile

創(chuàng)建目錄

mkdir -p /export/docker/jdk8

將jdk-8u241-linux-x64.tar.gz上傳到服務(wù)器(虛擬機(jī))中的/export/docker/jdk8目錄

創(chuàng)建文件Dockerfile

cd /export/docker/jdk8/
vi Dockerfile
#依賴鏡像名稱和id
FROM centos:latest
#指定鏡像創(chuàng)建者信息
MAINTAINER ITCAST
#切換工作目錄
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相對(duì)路徑j(luò)ar,把java添加到容器中
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java
#配置java環(huán)境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JAR_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

8.4.2 構(gòu)建鏡像

docker build -t=‘jdk1.8’ .

注意后面的空格和點(diǎn),不要省略,點(diǎn)表示當(dāng)前目錄

8.4.3 查看鏡像是否構(gòu)建完成

圖片

8.5 自定義鏡像mycentos

8.5.1 編寫 Dockerfile

Hub默認(rèn)centos鏡像

圖片

準(zhǔn)備編寫DockerFile文件vim Dockerfile

FROM centos:latest
MAINTAINER zhangjc
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

8.5.2 構(gòu)建鏡像

docker build -t mycentos:1.1 .

圖片

圖片

8.5.3 運(yùn)行鏡像

docker run -it mycentos:1.1

九、Docker私有倉(cāng)庫(kù)

在 Docker 中,當(dāng)我們執(zhí)行docker pull xxx的時(shí)候 ,它實(shí)際上是從 registry.hub.docker.com這個(gè)地址去查找,這就是Docker公司為我們提供的公共倉(cāng)庫(kù)。

在工作中,不可能把企業(yè)項(xiàng)目push到公有倉(cāng)庫(kù)進(jìn)行管理。為了更好的管理鏡像,Docker不僅提供了一個(gè)中央倉(cāng)庫(kù),同時(shí)允許搭建本地私有倉(cāng)庫(kù)。介紹registry、harbor兩種私有倉(cāng)庫(kù)搭建。

9.1 registry搭建

9.1.1 搭建

Docker 官方提供了一個(gè)搭建私有倉(cāng)庫(kù)的鏡像 registry ,只需把鏡像下載下來(lái),運(yùn)行容器并暴露5000端口,就可以使用了。

docker pull registry:2
docker run -di -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

Registry服務(wù)默認(rèn)會(huì)將上傳的鏡像保存在容器的/var/lib/registry,將主機(jī)的/opt/registry目錄掛載到該目錄,即可實(shí)現(xiàn)將鏡像保存到主機(jī)的/opt/registry目錄了。

瀏覽器訪問(wèn)http://node1.itcast.cn:5000/v2/_catalog,出現(xiàn)下面情況說(shuō)明registry運(yùn)行正常

圖片

9.1.2 驗(yàn)證

現(xiàn)在通過(guò)push鏡像到registry來(lái)驗(yàn)證一下。

查看本地鏡像

docker images

要通過(guò)docker tag將該鏡像標(biāo)志為要推送到私有倉(cāng)庫(kù):

docker tag nginx:latest localhost:5000/nginx:latest

通過(guò)docker push命令將nginx鏡像push到私有倉(cāng)庫(kù)中:

docker push localhost:5000/nginx:latest

圖片

訪問(wèn) http://node1.itcast.cn:5000/v2/_catalog 查看私有倉(cāng)庫(kù)目錄,可以看到剛上傳的鏡像了:

圖片

  • 下載私有倉(cāng)庫(kù)的鏡像,使用如下命令:

docker pull localhost:5000/鏡像名:版本號(hào)

docker pull localhost:5000/nginx:latest

9.2 Docker鏡像推送到阿里云鏡像倉(cāng)庫(kù)

首先需要有一個(gè)阿里云的賬號(hào)

鏡像倉(cāng)庫(kù)申請(qǐng)地址:https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

圖片

9.2.1 容器鏡像服務(wù)控制臺(tái)概覽

圖片

9.2.2 創(chuàng)建鏡像倉(cāng)庫(kù)

圖片

9.2.3 選擇本地倉(cāng)庫(kù)

圖片

9.2.4 點(diǎn)擊管理

圖片

圖片

9.2.5 Docker登錄阿里云容器鏡像倉(cāng)庫(kù)

$ sudo docker login --username=xxx@aliyun.com registry.cn-hangzhou.aliyuncs.com

圖片

9.2.6 推送創(chuàng)建的oracle11g_ centos7鏡像到阿里云鏡像倉(cāng)庫(kù)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    370

    瀏覽量

    40836
  • 前端
    +關(guān)注

    關(guān)注

    1

    文章

    192

    瀏覽量

    17749
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    457

    瀏覽量

    11846
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Dockerfile的最佳實(shí)踐

    ”微服務(wù)一條龍“最佳指南-“最佳實(shí)踐”篇:Dockerfile
    發(fā)表于 07-11 16:22

    Fuego快速入門指南

    Fuego快速入門指南只需幾個(gè)簡(jiǎn)單的步驟即可在你的硬件上從Fuego運(yùn)行測(cè)試。注意:這是快速入門指南。有關(guān)更多詳細(xì)信息和說(shuō)明,請(qǐng)參考:安裝Fuego概述這些步驟的概述是:安裝必備軟件下
    發(fā)表于 12-17 07:00

    一文詳解DockerFile基礎(chǔ)知識(shí)

    DockerFile用來(lái)構(gòu)建docker的鏡像文件,可以理解為命令參數(shù)腳本。構(gòu)建步驟編寫一個(gè)DockerFile文件Docker build構(gòu)建成為一個(gè)鏡像docke run運(yùn)行鏡像
    發(fā)表于 09-15 15:54

    Docker入門指南

    ?簡(jiǎn)化Arm硬件的應(yīng)用程序開(kāi)發(fā)?在開(kāi)始之前在云中工作并在邊緣部署本指南假設(shè)您熟悉容器概念。如果你不熟悉容器的概念,你可以在Docker入門中了解更多。 您還需要以下內(nèi)容: ?訪問(wèn)GitHub,以便您可
    發(fā)表于 08-02 06:09

    iPod數(shù)字音樂(lè)入門指南

    iPod數(shù)字音樂(lè)入門指南 現(xiàn)在,全球已售出5,000萬(wàn)臺(tái)蘋果公司(Apple)出品的iPod,以及許多其它品牌的MP3音樂(lè)播放器。自從幾年前數(shù)字音
    發(fā)表于 02-01 17:27 ?579次閱讀

    docker存儲(chǔ)驅(qū)動(dòng)的工作原理

    Docker的存儲(chǔ)驅(qū)動(dòng)官方有介紹其工作原理,這里只是簡(jiǎn)單概括一下。Docker使用了層的概念,docker在構(gòu)建鏡像的時(shí)候,會(huì)逐行執(zhí)行我們的Dockerfile中的每一行,每執(zhí)行一行的
    的頭像 發(fā)表于 06-26 11:49 ?4583次閱讀

    基于geant4的docker安裝方案

    linux支持好一些,不過(guò)這也正好貫徹了我們的一貫主張,堅(jiān)定不移的走linux路線。 下面以10.3.0為例 從dockerfile構(gòu)建 基本步驟 下載或克隆或者編寫dockerfile docker構(gòu)建
    的頭像 發(fā)表于 06-02 12:51 ?2366次閱讀

    全面詳解Dockerfile文件

    Docker 可以通過(guò)讀取 Dockerfile 中的指令自動(dòng)構(gòu)建鏡像。Dockerfile 是一個(gè)文本文檔,其中包含了用戶創(chuàng)建鏡像的所有命令和說(shuō)明。 一、 變量 變量用
    的頭像 發(fā)表于 09-22 15:38 ?1876次閱讀

    docker技術(shù)入門與實(shí)戰(zhàn)

    入門docker的首本書,系統(tǒng)化掌握容器技術(shù)棧
    發(fā)表于 06-09 14:38 ?0次下載

    信號(hào)的理念以及Dockerfile中ENTRYPOINT和CMD指令

    最近把 Docker 官方的 Docker Reference 文檔又讀了一遍,發(fā)現(xiàn)有些細(xì)節(jié)深究起來(lái),還是有很多可挖的。針對(duì)寫 Dockerfile ,大部分時(shí)候只要照葫蘆畫瓢,基本也不會(huì)有什么大的問(wèn)題,但是如果再深入理解一下那
    的頭像 發(fā)表于 06-12 16:42 ?7264次閱讀

    Dockerfile的最佳實(shí)踐

    隨著應(yīng)用的容器化、上云后,將伴隨著 Docker 鏡像的構(gòu)建,構(gòu)建 Docker 鏡像成為了最基本的一步,其中 Dockerfile 便是用來(lái)構(gòu)建鏡像的一種文本文件,鏡像的優(yōu)劣全靠
    的頭像 發(fā)表于 01-20 10:59 ?986次閱讀
    <b class='flag-5'>Dockerfile</b>的最佳實(shí)踐

    Dockerfile定義Docker鏡像的構(gòu)建過(guò)程

    了解Dockerfile Dockerfile 是一個(gè)文本文件,用于定義 Docker 鏡像的構(gòu)建過(guò)程。它以指令的形式描述了如何構(gòu)建鏡像,從基礎(chǔ)鏡像開(kāi)始逐步添加配置、文件和依賴,最終形成我們所需
    的頭像 發(fā)表于 09-30 10:22 ?2540次閱讀

    如何使用dockerfile創(chuàng)建鏡像

    Docker是一個(gè)開(kāi)源的平臺(tái),用于快速構(gòu)建、打包、部署應(yīng)用程序的容器化工具。而Dockerfile是一個(gè)文本文件,包含了一組可自動(dòng)化構(gòu)建Docker鏡像的指令。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-23 09:52 ?736次閱讀

    手動(dòng)構(gòu)建Docker鏡像的方法

    不推薦使用docker commit命令,而應(yīng)該使用更靈活、更強(qiáng)大的dockerfile來(lái)構(gòu)建docker鏡像。
    的頭像 發(fā)表于 08-05 15:30 ?516次閱讀
    手動(dòng)構(gòu)建<b class='flag-5'>Docker</b>鏡像的方法

    提升DevOps效率,從基礎(chǔ)到進(jìn)階的Dockerfile編寫技巧

    創(chuàng)建自定義鏡像。 Dockerfile 由一行行命令語(yǔ)句組成,并且支持以 # 開(kāi)頭的注釋行。 Docker分為四部分: 基礎(chǔ)鏡像信息 維護(hù)者信息 鏡像操作指令 容器啟動(dòng)時(shí)默認(rèn)要執(zhí)行的指令 例如
    的頭像 發(fā)表于 11-26 09:44 ?85次閱讀
    提升DevOps效率,從基礎(chǔ)到進(jìn)階的<b class='flag-5'>Dockerfile</b>編寫技巧
    RM新时代网站-首页