一、單獨使用docker container部署
1.首先我們開始編寫dockerfile凰浮, 我可以通過dockerfile生成image,在生成container
FROM python:3.6 # 源鏡像
ENV DJANGO_DEBUG=True # 設(shè)置環(huán)境變量, 項目中為了安全一些關(guān)鍵的配置項沒有卸載settings中袜茧,而是通過環(huán)境變量獲取的
ENV PYTHONIOENCODING=utf-8?
env TZ='Asia/Shanghai'? # env和ENV是同一個
run mkdir /logs? # 創(chuàng)建logs日志文件夾
WORKDIR /code? # 創(chuàng)建項目的文件夾
ADD project /code #? 將項目project拷貝到image中code文件夾
RUN pip install? -r requirements/deploy.txt # run安裝python依賴包
EXPOSE 8000 # 指定開發(fā)端口
ENV NAME iam? # 設(shè)置環(huán)境變量
CMD python manage.py runserver 0.0.0.0:8000 # 運行服務(wù)
2.在寫好dockerfile文件之后屿良,我們就可以構(gòu)建image了
docker build -t pr1 .
這樣我們就構(gòu)建一個名為pr鏡像, 使用docker images就可在鏡像列表中查看了
然后我就可以跑個容器了惫周,我將這個container命名為pr
docker run -d -p 0.0.0.0:8007:8000 --name=pr1 pre
我可是看看服務(wù)有沒有啟動, 打開http://localhost:8007/admin/查看后臺是否正常
使用docker log 可以查看運行情況
docker log 93ccfe3094e90078606542f6e0e603b14e728a2575a9d4c3072c0769765ac274
同時我們可以使用docker exec 進(jìn)入容器
同時我們查看了python運行的進(jìn)程
二康栈、使用docker-compose編排工具
1.我們?nèi)孕枰狣ockerfile递递, 在Dockerfile所在的新增docker-compose.yml, 內(nèi)容也挺簡單
version: '3'
services:
web:
? ? build: .
ports:
? ? -"5002:8000"
? ? network_mode: "bridge"
然后我們使用
docker-compose build
這里會生成一個以當(dāng)前文件夾為前綴的image
接下來我們使用
docker-compose up -d
我們看一下啟動的容器
在訪問以下后臺
這里要說一下遇到的坑:
1.一開始并未加入network_mode模式啥么,導(dǎo)致每次build之后會產(chǎn)生一個新的network局域網(wǎng)
而數(shù)據(jù)庫在bridge這個局域網(wǎng)中登舞,導(dǎo)致無法訪問數(shù)據(jù)庫
我們先來看一下生成局域網(wǎng)的信息,使用docker network inspect命令
這個所在ip段是“172.22”悬荣, 然后我們在看看數(shù)據(jù)庫所在容器的IP段bridge
由于太長我截取了部分菠秒,這個局域網(wǎng)說在IP段是“172.17”, 同時也能看出這個containers中包含了我們生成pr_docker_web_1容器
還要說的是bridge是自動生成局域網(wǎng)
我們在文件里寫bridge是‘?network_mode: "bridge"’是網(wǎng)絡(luò)模式氯迂, 為容器選擇什么樣的網(wǎng)絡(luò)模式践叠,下面是官網(wǎng)的說明