Dockerfile詳解

制作Docker image有兩種方式: 一是使用Docker container(docker save container_name -o test.tar ) ,再導(dǎo)出image,而是使用Dockerfile, 將所有動(dòng)作導(dǎo)入到文件中,使用build命令制作成鏡像。
一,Dockerfile基本結(jié)構(gòu)
一般的Dockerfile分為四個(gè)部分:基礎(chǔ)鏡像信息,維護(hù)者信息,鏡像操作指令和容器啟動(dòng)時(shí)的指令
FROM nginx:1.13.5-alpine MAINTAINER SXY Team <http://cywx.cn> #設(shè)置時(shí)區(qū) RUN echo 'Asia/Shanghai' >/etc/timezone ARG SIBE_VERSION=0 COPY images/files/entrypoint.sh /usr/local/bin/ RUN chmod u+x /usr/local/bin/entrypoint.sh # Update to get support for Zip/Unzip, Bash RUN apk --update add zip unzip bash wget ENV WWW_TARGET /var/www/html/ COPY images/files/mysite.template /etc/nginx/conf.d/default.conf ADD dist/ /tmp/ RUN mkdir -p ${WWW_TARGET} \ && mv /tmp/ ${WWW_TARGET} \ && rm -rf /tmp/ ENV MGMT_API_URL http://192.168.3.223:19980 ENV MGMT_API_AUTHORIZATION d2ViX2FwcDpjaGFuZ2VpdA== RUN cp /var/www/html/scripts/http/configuration.json /var/www/html/scripts/http/configuration.json.template RUN cp /var/www/html/scripts/http/configuration.json /var/www/html/scripts/http/configuration.json.template2 # forward request and error logs to docker log collector RUN mkdir -p /var/log/webui && ln -sf /dev/stdout /var/log/webui/access.log \ && ln -sf /dev/stderr /var/log/webui/error.log EXPOSE 80 443 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] CMD ["nginx", "-g", "daemon off;"] entrypoint中的信息 [root@test-227 files]# cat entrypoint.sh #!/bin/bash setup() { echo "Configure 1 management api url to ${MGMT_API_URL}" cat /var/www/html/scripts/http/configuration.json.template | \ sed "s#http://192.168.3.223:19980#${MGMT_API_URL}#g" > /var/www/html/scripts/http/configuration.json.template2 cat /var/www/html/scripts/http/configuration.json.template2 echo "Configure 2 AUTHORIZATION to ${MGMT_API_AUTHORIZATION}" cat /var/www/html/scripts/http/configuration.json.template2 | \ sed "s#d2ViX2FwcDpjaGFuZ2VpdA==#${MGMT_API_AUTHORIZATION}#g" > /var/www/html/scripts/http/configuration.json cat /var/www/html/scripts/http/configuration.json } setup exec "$@"
FROM:指定基礎(chǔ)鏡像,要在哪個(gè)鏡像建立
FROM <image> 或者 FROM <image>:<tag>
第一條指令必須為FROM指令

站在用戶的角度思考問題,與客戶深入溝通,找到全南網(wǎng)站設(shè)計(jì)與全南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋全南地區(qū)。

MAINTAINER: 指定維護(hù)者信息
MAINTAINER <name>

RUN: 在鏡像中要執(zhí)行的命令
RUN <command> 或者 RUN ["executable","param1","param2"]
前者將shell終端中運(yùn)行命令,即/bin/bash -c;后者則使用exec執(zhí)行,指定使用其他終端可以通過第二種方式實(shí)現(xiàn),例如RUN ["/bin/bash", "-c", "echo hello"]

WORKDIR: 指定當(dāng)前工作目錄,相當(dāng)于cd
WORKDIR /path/to/workdir
為后續(xù)的RUN,CMD,ENTRYPOINT指令配置工作目錄,可以使用多個(gè)WORKDIR指令,后續(xù)命令如果參數(shù)是相對路徑,則會(huì)基于之前命令指定的路徑,例如
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
則最終的路徑/a/b/c

EXPOSE:指定容器需要被打開的端口
EXPOSE 80
告訴docker服務(wù)容器需要暴露的端口,但是目前只在容器中暴露,如果想要在節(jié)點(diǎn)進(jìn)行暴露則需要-p 80:80,或者-P(主機(jī)將為其暴露一個(gè)隨機(jī)端口)

ENV: 定義環(huán)境變量
ENV <key> <value>
指定一個(gè)環(huán)境變量在容器中生成
ENV managementapi http://192.168.3.226

COPY: 復(fù)制本地dockerfile路徑根目錄下的文件到容器文件中
COPY <src> <dest>

ADD: 相當(dāng)于COPY,但比COPY功能強(qiáng)大
ADD <src> <dest>
此命令也是將主機(jī)任何地方文件到容器文件中,但是可以復(fù)制tar文件時(shí),也會(huì)自動(dòng)展開

VOLUME: 掛載目錄
VOLUME ["/data"]
創(chuàng)建一個(gè)可以從本地主機(jī)或者其他容器的掛載點(diǎn),一般用來存放數(shù)據(jù)

USER:
USER daemon
指定運(yùn)行容器時(shí)的用戶名或UID,后續(xù)的RUN也會(huì)使用指定用戶。當(dāng)服務(wù)不需要管理員權(quán)限時(shí),可以通過該命令指定運(yùn)行用戶,并且可以在之前創(chuàng)建需要的用戶 RUN useradd -s /sbin/nologin -M www。

ENTRYPOINT
兩種格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1 param2 (shell)
配置容器啟動(dòng)后執(zhí)行的命令,并且不可被docker run參數(shù)覆蓋,每個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,當(dāng)指定多個(gè)時(shí),只有最后一個(gè)生效

CMD:
支持三種格式
CMD ["executable","param1","param2"] 使用exec執(zhí)行
CMD command1 command2 command3 在/bin/bash中執(zhí)行,提供給需要交互應(yīng)用
CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認(rèn)參數(shù);
指定啟動(dòng)容器時(shí)執(zhí)行的命令,每個(gè)Dockerfile只能有一條CMD命令。如果指定了多條命令,只有最后一條會(huì)被執(zhí)行,則會(huì)覆蓋掉CMD指定命令

ENTRYPOINT和CMD的區(qū)別: ENTRYPOINT指定了該鏡像啟動(dòng)時(shí)入口,CMD則指定了容器啟動(dòng)時(shí)的命令,當(dāng)兩者共用時(shí),完整的啟動(dòng)命令像是ENTRYPOINT+CMD,使用ENTRYPOINT的好處是在我們啟動(dòng)鏡像就像是啟動(dòng)了一個(gè)可執(zhí)行程序,在CMD上僅需要指定參數(shù);另外在我們自定義CMD時(shí)不容易出錯(cuò)

使用CMD的Dockerfile:
FROM MySQL
CMD ["echo","test"]

使用ENTRYPOINT的Dockerfile
FROM mysql
ENTRYPOINT ["echo","test"]

ENTRYPOINT不能覆蓋掉執(zhí)行時(shí)的參數(shù),會(huì)把啟動(dòng)鏡像是的命令當(dāng)參數(shù),而CMD可以覆蓋掉默認(rèn)的參數(shù)

網(wǎng)頁題目:Dockerfile詳解
文章源于:http://bm7419.com/article26/jjcijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、商城網(wǎng)站、微信公眾號(hào)、外貿(mào)網(wǎng)站建設(shè)ChatGPT、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)