花了一點時間看了一下docker部署django項目,特此記錄
臨時創建個django項目以做測試,django-admin startproject docker_test,項目名:docker_test,然後隨便寫個測試函數
整體的目錄結構如下:
首先創建一個Dockerfile文件(沒有後綴名)
Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容,就是描述該層應當如何構建。有了 Dockerfile,就可以創建我們所需要的鏡像
Dockerfile文件內容如下:
#基於的基礎鏡像
FROM python:3.5
#代碼添加到code文件夾
ADD ./package /code
# 設置code文件夾是工作目錄
WORKDIR /code
# 安裝支持
RUN pip install -i https://pypi.doubanio.com/simple/ -r requirements.txt
CMD ["python", "/code/docker_test/run.py"]
requirements.txt的生成方法
第一種 適用於 單虛擬環境的情況: :
1 |
|
爲什麼只適用於單虛擬環境?因爲這種方式,會將環境中的依賴包全都加入,如果使用的全局環境,則下載的所有包都會在裏面,不管是不時當前項目依賴的
第二種 (推薦) 使用 pipreqs
,github地址爲: https://github.com/bndr/pipreqs
1 2 3 4 |
|
注意 --encoding=utf8
爲使用utf8編碼,不然可能會報UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 406: illegal multibyte sequence 的錯誤。
--force
強制執行,當 生成目錄下的requirements.txt存在時覆蓋
requirements.txt 文件裏是python項目所需要的第三方庫,內容如下
django==1.8.7
numpy
pandas
創建鏡像
docker build -t test_docker .
查看鏡像
docker images
運行鏡像,生成並啓動容器
docker run -it -p 8000:8000 --name test-docker test_docker
-it:表示交互式終端的容器,非啓動後立刻結束的容器
-p 8000:8000:表示將docker的8000端口,映射到Linux的8000端口
--name test-docker:給容器取個名字,嫌麻煩可以省去
test_docker:容器是用哪個鏡像啓動的(一個容器,必須依賴一個鏡像啓動)
瀏覽器輸入ip+port+url即可查看