服務(wù)docker化

一、單獨使用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 進入容器


圖四

同時我們查看了python運行的進程

二、使用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

在訪問以下后臺

圖七

這里要說一下遇到的坑:

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)的說明

圖十一
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容