如何開發一個基於 Docker 的 Python 應用
點擊上方
「
Python開發
」,選擇「置頂公眾號」
關鍵時刻,第一時間送達!
前言
Python 家族成員繁多,解決五花八門的業務需求。這裡將通過 Python 明星項目 IPython Notebook,使其容器化,讓大家掌握基礎的 Docker 使用方法。
IPython Notebook 目前已經成為用 Python 做教學、計算、科研的一個重要工具。
Docker 化應用的關鍵元素
鏡像是 Docker 應用的靜態表示,是應用的交付件,鏡像中包含了應用運行所需的所有依賴:包括應用代碼、應用依賴庫、應用運行時和操作系統。
Dockerfile 是一個描述文件,描述了產生 Docker 鏡像的過程,詳細文檔可以參見官方文檔
Dockerfile reference
。
容器是鏡像運行時的動態表示,如果把鏡像想像為一個 Class 那麼容器就是這個 Class 的一個實例。
一個應用 Docker 化的第一步就是通過 Dockerfile 產生應用鏡像。
編寫 Dockerfile
選擇 Python 2.7 版本為我們依賴的系統鏡像。
FROM python
:
2.7
因所有官方鏡像均位於境外伺服器,為了確保所有示例能正常運行,可以使用與官方鏡像保持同步的 DaoCloud 境內鏡像: FROM daocloud . io / python :
2.7
。也推薦通過
DaoCloud Toolbox
極速下載官方鏡像!
設置鏡像的維護者,相當於鏡像的作者或發行方。
MAINTAINER
Captain
Dao
<
support@daocloud
.
io
>
向鏡像中添加文件並安裝依賴。
RUN mkdir
-
p
/
app
WORKDIR
/
app
ADD requirements
.
txt requirements
.
txt
RUN pip install
-
r requirements
.
txt
COPY docker
-
entrypoint
.
sh
/
usr
/
local
/
bin
/
ADD COPY
與
的區別
總體來說 ADD COPY ADD COPY ADD ADD
和
都是添加文件的操作,其中
比
功能更多,
允許後面的參數為 URL,還有
添加的文件為壓縮包的話,它將自動解壓。
使用 RUN
命令調用 pip 包管理器安裝 App 的依賴包
在編寫 Dockerfile 時盡量將安裝依賴的過程提前以提高鏡像層的復用率。
啟動應用進程
EXPOSE
8888
ENTRYPOINT
[
"docker-entrypoint.sh"
]
CMD
[
""
]
通過 EXPOSE
指定該鏡像需要公開的埠。
ENTRYPOINT CMD
與
的區別
ENTRYPOINT CMD ENTRYPOINT + CMD
指定了該鏡像啟動時的入口,
則指定了容器啟動時的命令,當兩者共用時,完整的啟動命令像是
這樣。
使用 ENTRYPOINT CMD CMD
的好處是在我們啟動鏡像就像是啟動了一個可執行程序,在
上僅需要指定參數;另外在我們需要自定義
時不容易出錯。
製作啟動腳本(docker-entrypoint.sh)
#!/bin/bash
# Strict mode
set
-
euo pipefail
# Create the hash to pass to the IPython notebook, but don"t export it so it doesn"t appear
# as an environment variable within IPython kernels themselves
HASH
=
$
(
python
-
c
"from IPython.lib import passwd; print(passwd("${PASSWORD:-admin}"))"
)
echo
"========================================================================"
echo
"You can now connect to this Ipython Notebook server using, for example:"
echo
""
echo
" docker run -d -p <your-port>:8888 -e password=<your-password> ipython/noetebook"
echo
""
echo
" use password: ${PASSWORD:-admin} to login"
echo
""
echo
"========================================================================"
unset PASSWORD
ipython notebook
--
no
-
browser
--
port
8888
--
ip
=*
--
NotebookApp
.
password
=
"$HASH"
一般我們會將初始化應用的過程編寫成一個啟動腳本,在腳本里以環境變數或命令行參數的形式獲取應用初始化所必須的信息,然後配置並啟動應用。
啟動容器
有了 Dockerfile 以後,我們可以運行下面的命令構建 Python 應用鏡像並命名為 ipython / notebook
:
通過指令建立鏡像
docker build
-
t ipython
/
notebook
.
通過以下指令啟動容器
docker run
-
d
-
p
8888
:
8888
-
e PASSWORD
=
admin ipython
/
notebook
注意哦,我們將初始登錄密碼以環境變數的形式傳入容器並告知應用。
打開遊覽器,訪問 8888 埠,就可以看到 IPython Notebook 了。
作者:wph95
原文:
http://open.daocloud.io/
Python開發整理髮布,轉載請聯繫作者獲得授權
【點擊成為Java大神】


※super 沒那麼簡單
※你用 Python 寫過哪些牛逼的程序/腳本?
TAG:Python開發 |