2019年5月12日 星期日

Docker 教學-2 Dockerfile基礎教學

Docker 教學2 -轉貼IT邦教學筆記參考



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 執行。
CMD 指定啟動容器時執行的命令, 每個 Dockerfile 只能有一條 CMD 命令 
如果指定了多條命令,只有最後一條會被執行。
CMD ["executable","param1","param2"]
使用 exec 執行,推薦使用;
CMD command param1 param2
/bin/sh 中執行,使用在給需要互動的指令;
CMD ["param1","param2"]
提供給 ENTRYPOINT 的預設參數;
ENTRYPOINT:每個 Dockerfile 中只能有一個 ENTRYPOINT,當指定多個時,只有最後一個會生效。
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
========================================================================










沒有留言:

張貼留言