A. 如何運用docker配合python開發環境實例
1. 創建一個用於開發Django App的目錄
mkdir django-example && cd django-example
2. 構建基本開發環境
touch Dockerfile
touch pip.conf requirements.txt
pip.conf文件填入以下內容,以便一會用pip安裝Python 模塊時使用阿里雲鏡像加速:
[global]
index-url =
[install]
trusted-host=mirrors.aliyun.com
requirements.txt文件中填入要安裝的Python 模塊:
django
編寫構建開發環境的Dockerfile文件,填入以下內容:
# MAINTAINER Gevin
# DOCKER-VERSION 1.12.0
#
# Dockerizing Python: Dockerfile for building python applications
FROM python:2.7.12
MAINTAINER Gevin
WORKDIR /usr/src/app
# 使用阿里雲的pip鏡像
COPY pip.conf /root/.pip/pip.conf
COPY requirements.txt /usr/src/app/requirements.txt
RUN pip install -r /usr/src/app/requirements.txt
EXPOSE 8000
CMD ["bash"]
然後執行下面命令構建鏡像:
docker build -t gevin/django-example:0.1 .
構建成功後,執行docker images命令,可以查看到當前構建好的image
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gevin/django-example 0.1 1855fc3c8062 12 hours ago 698.9 MB
3. 使用構建的image拉起開發環境
執行下面命令,可以以前台形式拉起django-example鏡像的一個container:
docker run -it --rm -v $(pwd):/usr/src/app gevin/django-example:0.1
上面命令使用了data volume,把當前目錄掛載到container中的工作目錄下,這樣當前目錄下的所有文件都會映射到container的工作目錄下,在工作目錄下的所有改動,也都會保存到宿主機的當前目錄下。
4. 創建django項目
上一步的命令創建了一個安裝了django的互動式的container,直接在該container中執行創建django項目的命令即可:
root@7c91f460599f:/usr/src/app# django-admin startproject dj_example
上述命令,在container中基於django的命令創建了一個django項目,由於上一步操作時把宿主機的當前目錄掛載到container的工作目錄下,因此,剛剛在container中創建的django項目,在宿主機上也能看到。
container:
root@7c91f460599f:/usr/src/app# ls
Dockerfile dj_example pip.conf requirements.txt
宿主機:
django-example ls
Dockerfile dj_example pip.conf requirements.txt
5. 啟動django項目
docker run -it --rm -p 8000:8000 -v $(pwd):/usr/src/app gevin/django-example:0.1 python dj_example/manage.py runserver 0.0.0.0:8000
B. docker-compose 部署python項目
docker-compose.yml
啟滑蘆動容器
項目文件夾:demo01 的結構羨讓褲
app.py文件內容如下:
requirements.txt文兄簡件內容如下:
Dockerfile文件內容如下:
Dockerfile還可以這樣寫:
和上一種寫法稍稍有一點區別 。
docker-compose.yml
啟動
打開鏈接: http://localhost:5000
C. 怎樣在Python中操作Docker容器
Docker容器運行後,如何進入容器進行操作呢?起初我是用SSH。如果只啟動一個容器,用SSH還能應付,只需要將容器的22埠映射到本機的一個埠即可。當我啟動了五個容器後,每個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH埠,實在是麻煩。 我發現很多Docker鏡像都是沒有安裝SSHD服務的,難道有其他方法進入Docker容器? 有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。 nsenter 可以訪問另一個進程的名字空間。 為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。 PID=$(docker inspect –format 「{{ .State.Pid }}」 <container>) //將<container>換成你的容器id 通過這個 PID,就可以連接到這個容器: $ nsenter –target $PID –mount –uts –ipc –net –pid 更簡單的,建議大家下載 .bashrc_docker,並將內容放到 .bashrc 中。