国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker 筆記(2):Dockerfile

DesGemini / 1986人閱讀

摘要:是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像。每個中只能有一個,當指定多個時,只有最后一個生效。是改變工作目錄,則是改變之后層的執行以及這類命令的身份。

Dockerfile是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像。

常用的選項

例子:

FROM node:latest
MAINTAINER my_name
ADD ./my_project /code
VOLUME ["/data1", "/data2"]
WORKDIR /code
RUN apt-get install mysql
EXPOSE 6777
ENV SRC_URL www.xxxxxxxxxxx.com/xxxxxxx
RUN wget $SRC_URL
CMD ["node","bin/www"]

FROM: 指定基礎鏡像,如果本地不存在基礎鏡像,會自動從遠程倉庫拉取。FROM必須是Dockerfile中除了注釋外的第一行語句。

MAINTAINER: 用于指定鏡像的構建者,當發現坑的時候可以找他

ADD: 將本機的文件或目錄復制到鏡像的某個目錄下,在后續的構建命令和容器運行中可以在容器中訪問該目錄

WORKDIR: 指定后續的構建命令的工作路徑

RUN: 在鏡像中運行某條命令,如安裝相關的依賴庫

CMD:用于指定鏡像運行時的第一條命令。CMD只能出現一次,如果出現多次,前面的會被覆蓋

    CMD ["executable","param1","param2"] 使用 exec 執行,推薦方式;

    CMD command param1 param2 在 /bin/sh 中執行,提供給需要交互的應用;

    CMD ["param1","param2"] 提供給 ENTRYPOINT 的默認參數;

EXPOSE:暴露容器的端口,其他容器可以通過該端口訪問本容器提供的服務,前提是這些容器在同一個網絡中,例子中暴露了6777端口

ENV: 設置環境變量。這些環境變量可以在后續的構建命令中使用,當運行容器時,也可以在容器中使用這些變量

COPY: 將本機的文件或目錄復制到鏡像的某個目錄下,在后續的構建命令和容器運行中可以在容器中訪問該目錄。該命令作用同ADD,只是ADD更加強大,如:當拷貝的是壓縮包,ADD會自動解壓

ENTRYPOINT: 容器啟動后執行的命令。每個 Dockerfile 中只能有一個ENTRYPOINT,當指定多個時,只有最后一個生效。(CMD指令指定的容器啟動時命令可以被docker run指定的命令覆蓋;而ENTRYPOINT指令指定的命令不能被覆蓋,而是將docker run指定的參數當做ENTRYPOINT指定命令的參數。)

    ENTRYPOINT ["executable", "param1", "param2"]

    ENTRYPOINT command param1 param2(shell中執行)

VOLUME: 容器卷是一個可供一個或多個容器使用的特殊目錄,它繞過 UFS,將主機目錄掛在到容器里面,可以提供很多有用的特性:

數據卷 可以在容器之間共享和重用

對 數據卷 的修改會立馬生效

對 數據卷 的更新,不會影響鏡像

數據卷 默認會一直存在,即使容器被刪除,除非在刪除容器的時候使用-v選項: docker rm -v container_id/container_name

注意: 數據卷 的使用,類似于 Linux 下對目錄或文件進行 mount,鏡像中的被指定為掛載點的目錄中的文件會隱藏掉,能顯示看的是掛載的 數據卷 。因此你的容器目錄dir有一個文件為temp.data,如果你在dir掛載了一個數據卷

在Dockerfile中,無法指定主機上對應的目錄

,那么你就再也不能讀取temp.data,除非你移除該數據卷。

其他選項 USER

格式:

 USER <用戶名>

USER 指令和 WORKDIR 相似,都是改變環境狀態并影響以后的層。 WORKDIR 是改變工作目錄, USER 則是改變之后層的執行 RUN , CMD 以及 ENTRYPOINT 這類命令的身份。

當然,和 WORKDIR 一樣, USER 只是幫助你切換到指定用戶而已,這個用戶必須是事先建立好的,否則無法切換。

RUN groupadd -r redis && useradd -r -g redis redis
USER redis
RUN [ "redis-server" ]

如果以 root 執行的腳本,在執行期間希望改變身份,比如希望以某個已經建立好的用戶來運行某個服務進程,不要使用 su 或者 sudo ,這些都需要比較麻煩的配置,而且在 TTY 缺失的環境下經常出錯。建議使用 gosu 。

# 建立 redis 用戶,并使用 gosu 換另一個用戶執行命令
RUN groupadd -r redis && useradd -r -g redis redis
# 下載 gosu
RUN wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.7/
gosu-amd64" 
&& chmod +x /usr/local/bin/gosu 
&& gosu nobody true
# 設置 CMD,并以另外的用戶執行
CMD [ "exec", "gosu", "redis", "redis-server" ]
ONBUILD

格式: ONBUILD <其它指令> 。

ONBUILD 是一個特殊的指令,它后面跟的是其它指令,比如 RUN , COPY 等,而這些指令,在當前鏡像構建時并不會被執行。只有當以當前鏡像為基礎鏡像,去構建下一級鏡像的時候才會被執行。

Dockerfile 中的其它指令都是為了定制當前鏡像而準備的,唯有 ONBUILD 是為了幫助別人定制自己而準備的。

fundamental/Dockerfile

FROM node:slim
RUN mkdir /app
WORKDIR /app
ONBUILD COPY ./package.json /app
ONBUILD RUN [ "npm", "install" ]
ONBUILD COPY . /app/
CMD [ "npm", "start" ]

project1/Dockerfile

FROM fundamental
do other thing

在構建 project1 的時候 ONBUILD的命令才會生效。

例子

我們將基于官方的python鏡像,搭建一個后端的環境鏡像(需要用的庫含redis、flask等)。

FROM python:3.6-alpine
# 復制代碼到鏡像
ADD the_path_of_project /code   
# 設置后面的命令的pwd
WORKDIR /code
# 安裝依賴
RUN pip install redis flask
# 運行服務的命令
CMD ["python", "app.py"]

例子中:

FROM:指定基礎鏡像為python:3.6-alpine

ADD:項目代碼被復制到容器的code目錄下

WORKDIR:指定后續命令的pwd為code

RUN:安裝依賴庫

CMD:指定啟動容器時需要運行的命令,即啟動我們的項目

參考

docker pratice


上一節:Docker 筆記(1):介紹、鏡像、容器及其基本操作

下一節:Docker 筆記(3):docker-compose

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27454.html

相關文章

  • 慕課網_《Docker入門》學習總結

    摘要:時間年月日星期六說明本文部分內容均來自慕課網。必填用于執行命令,當執行完畢后,將產生一個新的文件層??蛇x指定此鏡像啟動時默認執行命令??蛇x用于指定需要暴露的網絡端口號??蛇x向鏡像中掛載一個卷組。 時間:2017年09月16日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:無 學習源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...

    CoorChice 評論0 收藏0
  • Dockerfile 與 Compose 環境搭建學習筆記(一)

    摘要:的主要作用是自己根據基礎鏡像,重新定制鏡像,而不是直接從官方倉庫拿現成的使用。以接下來要構建的環境來說明下,下面我將要搭建一個的開發環境,需要進行配合。它的主要作用是持久化數據,避免容器銷毀后內部數據丟失暴露到宿主機的端口。 以前一直使用 Vagrant 作為自己的開發環境,并且在上家公司也推行大家采用 Vagrant 作為開發環境,保障公司使用的是同一套開發環境。隨著docker的流...

    TZLLOG 評論0 收藏0
  • Dockerfile 與 Compose 環境搭建學習筆記(一)

    摘要:的主要作用是自己根據基礎鏡像,重新定制鏡像,而不是直接從官方倉庫拿現成的使用。以接下來要構建的環境來說明下,下面我將要搭建一個的開發環境,需要進行配合。它的主要作用是持久化數據,避免容器銷毀后內部數據丟失暴露到宿主機的端口。 以前一直使用 Vagrant 作為自己的開發環境,并且在上家公司也推行大家采用 Vagrant 作為開發環境,保障公司使用的是同一套開發環境。隨著docker的流...

    ityouknow 評論0 收藏0
  • 程序員筆記——如何編寫優雅的Dockerfile

    摘要:導讀要從容器化開始,而容器又需要從開始,本文將介紹如何寫出一個優雅的文件。只要記住以上三點就能寫出不錯的。執行完成項目的構建。 導讀 Kubernetes要從容器化開始,而容器又需要從Dockerfile開始,本文將介紹如何寫出一個優雅的Dockerfile文件。 文章主要內容包括: Docker容器 Dockerfile 使用多階構建 感謝公司提供大量機器資源及時間讓我們可以實踐...

    曹金海 評論0 收藏0

發表評論

0條評論

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