中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dockerfile入門和實戰案例

發布時間:2020-10-09 11:22:25 來源:網絡 閱讀:383 作者:wx5c1078d59f836 欄目:云計算

1、概念

Dockerfile是一個文本文件,其內包含了一行行的指令和參數,每一行指令構建一層,因此每一行指令的內容,就是描述該層應當如何構建;它們極大簡化了從頭到尾流程上的部署工作;DockerfileFROM命令開始,緊接著跟隨者各種方法,命令和參數,最終產出一個新的可以用于創建容器的鏡像。

?

2、命令詳解

指令

描述

示例

FROM

必須為第一個命令,指定基礎鏡像

FROM centos:latest

MAINTAINER

這個命令用于聲明作者,應該放在FROM的下一行

MAINTAINER wzs

RUN

構建鏡像時執行的shell命令,是Dockerfile執行命令的核心部分;

?

RUN yun install httpd

RUN [yum,install ,httpd]

CMD

RUN命令相似,都是執行shell命令;和RUN不同的是,RUN在構建鏡像過程中執行,CMD是在用鏡像構建容器后被調用;如果我們在 docker run時指定了命令或者有entrypoint,那么CMD會被覆蓋;Dockerfile中多個CMD命令僅最后一個生效

用法一:不帶中括號

CMD echo "hello cmd!"

用法二:帶中括號,默認無任何shell

CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]

用法三:傳參給ENTRYPOINT

CMD [-l]

ENTRYPOINT

CMD命令相似,都是運行容器時執行的shell命令;與CMD不同的是,CMD可以在執行docker run的時候指定命令覆蓋,ENTRYPOINT則只有使用--entrypoint才能覆蓋;CMDENTRYPOINT可以搭配使用,ENTRYPOINT用做固定命令,CMD用做ENTRYPOINT中命令攜帶的可變參數

用法一:不使用[]任何runCMD都不能被傳入,也會覆蓋CMD

ENTRYPOINT /bin/bash -c start.sh

用法二:使用[]可傳入CMD中的-l參數,即ls -l

CMD [-l]

ENTRYPOINT [ls]

EXPOSE

暴露容器的端口;還可以指定端口是偵聽TCP還是UDP,默認為TCP

EXPOSE 80,443

EXPOSE 80/udp

ENV

設置容器內的環境變量,可以在啟動容器時--env <key>=<value>修改環境變量的值

ENV MYSQL_ROOT_PASSWD 123456

ADD

拷貝文件或目錄到鏡像,如果是URL或壓縮包會自動下載或解壓

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

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

COPY

拷貝文件或目錄到鏡像

COPY ./test.txt /tmp/test.txt

USER

RUNCMDENTRYPOINTCOPYADD執行命令指定運行用戶

USER wzs

WORKDIR

RUNCMDENTRYPOINTCOPYADD設置工作目錄

WORKDIR /data

ARG

在構建鏡像時指定一些參數

ARG user

USER $user

?

3、CMDENTRYPOINT用法講解

說明:因CMDENTRYPOINT的用法比較復雜,這里舉幾個案例對CMDENTRYPOINT的區別和用法進行解讀

案例一:CMD用法1

Dockerfile入門和實戰案例

docker build -t cmd:v1 ?-f /var/Dockerfile/cmd-1.txt /var/Dockerfile/

使用Dockerfile構建cmd:v1鏡像后,執行docke run cmd:v1可以看到使用了Dockfile中的CMD echo 123?命令

Dockerfile入門和實戰案例?

執行docke run cmd:v1 echo abc?會將Dockfile中的CMD命令覆蓋

Dockerfile入門和實戰案例?

?

案例二:CMD用法2

Dockerfile入門和實戰案例

docker build -t cmd:v2 ?-f /var/Dockerfile/cmd-2.txt /var/Dockerfile/

使用[]中括號方式;這時,命令沒有再任何shell終端環境下,如果我們要執行shell,必須把shell加入到中括號的參數中

Dockerfile入門和實戰案例

執行docker run cmd:v2 ls /tmp/?會將Dockfile中的CMD命令覆蓋

Dockerfile入門和實戰案例

?

案例三:CMD用法3ENTRYPOINT用法1

CMD的第三種用法用于傳參,不攜帶任何命令;所以要配合ENTRYPOINT使用

Dockerfile入門和實戰案例

Dockefile文件中ENTRYPOINT中的echo 作為命令,CMDhello cmd作為傳參,執行后如下:

Dockerfile入門和實戰案例

也可以在docker run時攜帶參數 hello entrypoint?覆蓋CMD的內容

Dockerfile入門和實戰案例


案例四:CMD用法3ENTRYPOINT用法2

Dockerfile入門和實戰案例

Dockerfile中的ENTRYPOINT不使用中括號后,會覆蓋CMD的內容;docker run只會執行ENTRYPOINT

Dockerfile入門和實戰案例

docker run時攜帶任何參數或命令都無法被傳入到entrypoint

Dockerfile入門和實戰案例

4、實戰案例

案例一、tomcat部署

首先創建一個制定tomcat鏡像的目錄,存放鏡像所需的安裝包和Dockerfile文件

Dockerfile入門和實戰案例

Dockerfile文件內容

#使用基礎鏡像

FROM centos:latest

#注明作者

MAINTAINER wzs

#創建目錄

RUN mkdir -p /usr/local

#添加安裝包到鏡像

ADD apache-tomcat-7.0.93.tar.gz /usr/local/

ADD jdk-8u221-linux-x64.tar.gz /usr/local/

#定義環境變量

ENV JAVA_HOME /usr/local/jdk1.8.0_221

ENV JRE_HOME $JAVA_HOME/jre

ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.93

ENV PATH $CATALINA_HOME/bin:$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

#暴露端口

EXPOSE 8080

#啟動時運行tomcat進程

CMD ["/usr/local/apache-tomcat-7.0.93/bin/catalina.sh","run"]

使用Dockerfile構建鏡像

docker build -t tomcat:v1 -f ./Dockfile.txt ./

Dockerfile入門和實戰案例

使用鏡像創建并運行容器

docker run -itd --name tomcat-docker -p 8081:8080 tomcat:v1

Dockerfile入門和實戰案例


案例二、nginx部署

創建一個制定nginx鏡像的目錄,存放鏡像所需的安裝包和Dockerfile文件

Dockerfile入門和實戰案例

Dockerfile文件內容

#使用基礎鏡像

FROM centos:latest

#聲明作者

MAINTAINER wzs

#安裝依賴庫

RUN yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssh-devel zlib

#添加安裝包到鏡像

ADD nginx-1.8.0.tar.gz /usr/local

#編譯部署

RUN cd /usr/local/nginx-1.8.0 && \

????./configure --prefix=/usr/local/nginx && \

????make && \

????make install

#刪除安裝包文件

RUN rm -rf /usr/local/nginx-1.8.0

#暴露端口

EXPOSE 80

#定義工作目錄

WORKDIR /usr/local/nginx

#啟動時運行nginx

CMD ["./sbin/nginx","-g","daemon off;"]

使用Dockerfile文件構建鏡像

docker build -t nginx:v1 -f ./Dockerfile.txt ./

Dockerfile入門和實戰案例

使用鏡像創建運行容器

docker run -itd --name nginx-docker -p 81:80 nginx:v1

Dockerfile入門和實戰案例


案例三、mysql部署

創建一個制定tomcat鏡像的目錄,因為mysql使用yum安裝;所以這里只有Dockerfile文件

Dockerfile入門和實戰案例

Dockerfile文件內容

#使用基礎鏡像

FROM centos:latest

#作者

MAINTAINER wzs

#添加mysql用戶

RUN useradd -d /opt/mysql mysql

#下載mysqlyum安裝包文件

ADD http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm /opt/

RUN rpm -ivh /opt/mysql-community-release-el7-5.noarch.rpm

#安裝mysql-server

RUN yum install -y mysql-server

#mysql初始化

RUN mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/

#暴露端口

EXPOSE 3306

#這里使用CMDENTRYPOINT組合,ENTRYPOINT中為mysql服務啟動的固定命令,CMD指定mysql的運行用戶,所在docker run時可以覆蓋修改

CMD ["--user=mysql"]

ENTRYPOINT ["/usr/sbin/mysqld"]

使用Dockerfile構建mysql鏡像

docker build -t mysql:v1 -f ./Dockerfile ./

Dockerfile入門和實戰案例

使用鏡像創建運行容器

docker run -itd --name mysql-docker mysql:v1

Dockerfile入門和實戰案例


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲沃县| 新泰市| 隆尧县| 铜山县| 资源县| 彝良县| 安龙县| 防城港市| 班戈县| 扎囊县| 张家界市| 公主岭市| 博客| 高密市| 玉树县| 襄樊市| 朝阳市| 武宣县| 沙洋县| 中宁县| 孟津县| 库尔勒市| 沛县| 永川市| 南木林县| 九龙城区| 新蔡县| 耒阳市| 寿宁县| 莱州市| 临安市| 平湖市| 石嘴山市| 澄城县| 曲阳县| 中西区| 山丹县| 江永县| 洪洞县| 丰都县| 泗阳县|