Dockerfile 說明
- Dockerfile
由一行行命令語句組成,並且支援以 # 開頭的註解行。
- Dockerfile
分為四部分:
- 基底映像檔資訊
- 維護者資訊
- 映像檔操作指令
========================================================================
# This dockerfile uses the ubuntu
image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction
[arguments / command] ..
# 基本映像檔,必須是第一個指令
FROM ubuntu
# 維護者: docker_user
<docker_user at email.com> (@docker_user)
MAINTAINER docker_user docker_user@email.com
# 更新映像檔的指令
RUN echo "deb
http://archive.ubuntu.com/ubuntu/ raring main universe" >>
/etc/apt/sources.list
RUN apt-get update
&& apt-get install -y nginx
RUN echo "\ndaemon
off;" >> /etc/nginx/nginx.conf
# 建立新容器時要執行的指令
CMD /usr/sbin/nginx
========================================================================
####Dockerfile
基本語法
指令
|
說明
|
範例
|
FROM :
|
映像檔來源
|
FROM
python:3.5
|
MAINTAINER
|
維護者訊息
|
MAINTAINER
docker_user docker_user@email.com
|
RUN
|
創建映像檔時執行動作
|
RUN apt-get
-y update && apt-get install -y supervisor
|
RUN
["executable", "param1", "param2"]
|
創建映像檔時執行動作
|
RUN
["/bin/bash", "-c", "echo hello"]
|
CMD command
param1 param2
|
啟動容器時執行的命令
|
CMD pserve
development.ini
|
CMD
["executable","param1","param2"]
|
啟動容器時執行的命令
|
|
CMD
["param1","param2"]
|
啟動容器時執行的命令
|
|
EXPOSE
|
容器對外的埠號
|
EXPOSE 8082
|
ADD
|
複製檔案(單檔)
|
ADD
requirements.txt /usr/src/app/
|
COPY
|
複製檔案(資料夾)
|
COPY .
/usr/src/app
|
ENV
|
環境變數
|
ENV
PG_VERSION 9.3.4
|
ENTRYPOINT
command param1 param2
|
指定容器啟動後執行的命令
|
|
ENTRYPOINT
["executable", "param1", "param2"]
|
指定容器啟動後執行的命令
|
ENTRYPOINT
["/docker-entrypoint.sh"]
|
VOLUME
["/data"]
|
掛載資料卷
|
VOLUME
/var/lib/postgresql/data
|
USER daemon
|
指定運行使用者
|
RUN groupadd
-r postgres && useradd -r -g postgres postgres
|
WORKDIR
/path/to/workdir
|
指定工作目錄
|
WORKDIR
/usr/src/app
|
ONBUILD
[INSTRUCTION]
|
基底映像檔建立時執行
|
ONBUILD COPY
. /usr/src/app
|
RUN 當命令較長時可以使用 \ 來換行。
RUN : 在 shell 終端中運行命令,即 /bin/sh -c;
RUN ["executable", "param1", "param2"] : 使用 exec 執行。
RUN : 在 shell 終端中運行命令,即 /bin/sh -c;
RUN ["executable", "param1", "param2"] : 使用 exec 執行。
CMD 指定啟動容器時執行的命令, 每個 Dockerfile 只能有一條 CMD 命令 。
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"] 使用 exec 執行,推薦使用;
CMD command param1 param2 在 /bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設參數;
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"] 使用 exec 執行,推薦使用;
CMD command param1 param2 在 /bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"] 提供給 ENTRYPOINT 的預設參數;
ENTRYPOINT:每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個會生效。
USER:要臨時取得管理員權限可以使用 gosu,而不推薦 sudo。
WORKDIR:可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑
USER:要臨時取得管理員權限可以使用 gosu,而不推薦 sudo。
WORKDIR:可以使用多個 WORKDIR 指令,後續命令如果參數是相對路徑,則會基於之前命令指定的路徑
Docker File
Base
========================================================================
# 映像檔Image
FROM python:3.5
# 維護者
MAINTAINER Pellok "pellok@double-cash.com"
# 更新
RUN apt-get -y update
&& apt-get install -y supervisor
# 創建專案資料夾
RUN mkdir -p
/usr/src/app
# 指定工作目錄在專案資料夾
WORKDIR /usr/src/app
# 預先要安裝的requirements複製到Docker裡面
ADD requirements.txt
/usr/src/app/
# 安裝需要用的插件
RUN pip install
--upgrade pip setuptools
RUN pip install
--no-cache-dir -r requirements.txt
# 下次Build 的時候複製專案目錄到Docker 裡面
ONBUILD COPY . /usr/src/app
========================================================================
建置
docker build -t sample:base .
========================================================================
Docker File
for Project
#
挑選Image
FROM sample:base
# 安裝cryptography
RUN pip install
cryptography
# 設定工作目錄
WORKDIR /usr/src/app/
# 執行Python Setup
RUN python setup.py
develop
# 開啟Port號
EXPOSE 8082
# 執行專案
CMD pserve
development.ini
========================================================================
建置
docker build -t project:v1 .
========================================================================
Pyramid 專案 Docker 化
#創建一個新專案
pcreate -s alchemy
pyramid_dockerlize
cd pyramid_dockerlize
# 創建dockerfile
touch Dockerfile
# 編輯 Dockerfile
# 建置映像檔
docker build -t
pyramid_dockerlize .
# 執行容器
docker run -d -P
pyramid_dockerlize
========================================================================
Dockerfile
# This dockerfile uses the python
pyramid
# VERSION 1 - EDITION 1
# Author: pellok
# Command describe
# 使用的python映像檔版本
FROM python:3.5
MAINTAINER pellok
pellok@okborn.com
# 創建存放專案的資料夾
RUN mkdir -p
/usr/src/app
# 複製當前目錄的所有檔案到容器內的,資料放在/usr/src/app
COPY . /usr/src/app
# 指定工作目錄
WORKDIR /usr/src/app/
# 安裝環境變數和相依性套件
RUN python setup.py
develop
# 初始化DB
RUN
initialize_pyramid_dockerlize_db development.ini
# 專案監聽的Port號
EXPOSE 6543
# 啟動專案
CMD pserve
production.ini
========================================================================
沒有留言:
張貼留言