Docker筆記三之運行Django系統(tǒng)

原文鏈接:Docker筆記三之運行Django系統(tǒng)

這一篇筆記介紹一下如何使用 Docker 運行 Django 系統(tǒng)贵扰。

流程大概是這樣熊昌,拉取一個 python 鏡像,然后將我們的 Django 系統(tǒng)放到該鏡像中構建一個新的鏡像,運行新鏡像產生的容器就有我們的 Django 服務了谷誓。

以下是本篇筆記目錄:

  1. 鏡像和系統(tǒng)準備
  2. Dockerfile 準備
  3. 構建鏡像
  4. 運行容器
  5. 其他Dockerfile命令

1、鏡像和系統(tǒng)準備

鏡像拉取

首先我們需要準備一個 Python 3.6 的鏡像髓废,用于后面構建我們的 Django 鏡像冬骚。

通過下面的命令拉取:

docker pull python:3.6

然后通過 docker images 可以看到在 REPOSITORY 下名一個 python别瞭, TAG 為 3.6 鏡像

Django 系統(tǒng)準備

根據隔壁 Django 筆記窿祥,我們可以創(chuàng)建一個新系統(tǒng),也可以用自己的項目系統(tǒng)蝙寨,這里我們命名為 hunter晒衩,放在 ~/ 目錄下,這個目錄地址可以自定義

python 依賴準備

然后準備一個 requirements.txt籽慢,這包含了我們運行系統(tǒng)所需要的全部依賴浸遗,可以在我們創(chuàng)建的 Django 系統(tǒng)下通過 pip freeze 命令獲得:

pip3 freeze > requirements.txt

requirements.txt 這個文件我們也放在 ~/ 目錄下

2、Dockerfile 準備

然后我們需要新建一個 Dockerfile 文件箱亿,這個文件的作用是依據我們寫好的命令跛锌,在一個基礎鏡像上將我們需要運行的 Django 系統(tǒng)或者其他系統(tǒng)傳到鏡像里成為一個新的鏡像

我們創(chuàng)建的 Dockerfile 也放在 ~/ 目錄下

FROM python:3.6

RUN mkdir /hunter -p

WORKDIR /hunter

ADD ./requirements.txt /hunter

RUN cd /hunter
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

ADD ./hunter /hunter

CMD ["python3", "manage.py", "runserver", "0:9898"]
  • FROM 構建新的鏡像的基礎鏡像,即使用哪個指定的鏡像作為基礎來構建新的鏡像
  • ADD 復制指令,類似于 COPY 指令髓帽,在這里菠赚,使用 COPY 指令也可以,不同點在于對壓縮文件的處理
  • RUN 執(zhí)行指令郑藏,在構建新鏡像的時候運行
  • CMD 也是執(zhí)行指令衡查,不過是在容器運行的時候執(zhí)行,相當于是容器啟動時的默認指令
  • WORKDIR 指定工作的目錄必盖,在容器運行起來后拌牲,使用命令進入容器,默認進入的也是 WORKDIR 的目錄

所以我們上面的 Dockerfile 的內容是:

  1. FROM 命令:在 python:3.6 的基礎鏡像上操作
  2. RUN 命令:在鏡像內創(chuàng)建 /hunter 文件夾
  3. WORKDIR 命令:指定鏡像內工作目錄為 /hunter
  4. ADD 命令:將宿主機的 requirements.txt 文件復制到鏡像內 /hunter 目錄下
  5. RUN 命令:在鏡像內進入 /hunter 文件夾下
  6. RUN 命令:在鏡像內根據 /hunter 文件夾下的 requirements.txt 文件安裝 python 依賴
  7. ADD 命令:將宿主機的 Django 系統(tǒng)文件整個復制到鏡像內的 /hunter 文件夾下
  8. CMD 命令:指定容器啟動時運行的命令

以上命令在我們構建鏡像的時候會依次執(zhí)行歌粥。

注意: CMD 指定的程序會被 docker run 的時候后面添加的程序指令覆蓋

與 CMD 還有個作用類似的命令塌忽,ENTRYPOINT,這個用法后面再介紹

就此失驶,我們構建新鏡像的步驟和命令就此指定了土居。

3、構建鏡像

接下來的操作就是根據 Dockerfile 構建一個新鏡像

進入 ~/ 文件夾下嬉探,有以下幾個文件及文件夾:

hunter/
requirements.txt
Dockerfile

基本的命令如下:

docker build . -t tag -f Dockerfile

-t 參數表示構建新鏡像時手動打的一個 tag

-f 表示指定的 Dockerfile 文件擦耀,如果不使用 -f 參數,會默認尋找當前文件夾的 Dockerfile

接下來我們打一個 tag 為 Django:1.0.0 的鏡像涩堤,使用前面我們創(chuàng)建的 Dockerfile

docker build . -t django:1.0.0 -f Dockerfile

在這里 -f 參數可以不添加眷蜓,因為會默認使用當前文件夾的 Dockerfile 文件

可以看到下面這種類似的輸出內容:

Step 7/8 : ADD ./hunter /hunter
 ---> 84a62ad79b51
Step 8/8 : CMD ["python3", "manage.py", "runserver", "0:9898"]
 ---> Running in 33bcc53af8cf
Removing intermediate container 33bcc53af8cf
 ---> 926fce7b8cea
Successfully built 926fce7b8cea
Successfully tagged django:1.0.0

然后使用 docker images 命令可以看到有一個 django:1.0.0 的鏡像了。

4定躏、運行容器

接下來我們可以根據 image id 或者 django:1.0.0 這個 tag 來運行容器:

docker run -p 9898:9898 django:1.0.0

然后當前界面會顯示 Watching for file changes with StatReloader 這種信息

然后訪問我們的系統(tǒng) localhost:9898 類似這種账磺,在當前界面就會輸出相應的訪問信息

而如果我們想要停止運行這個容器,可以在新開一個shell痊远,通過 docker ps 找到正在運行的容器垮抗,然后 docker stop xxxx停止或者直接在當前界面 ctrl + c

在后臺運行這個容器可以如下操作:

docker run -itd -p 9898:9898 django:1.0.0

在這里我們使用 -p 參數將容器的 9898 端口映射到宿主機的 9898 端口

注意: 為了以示區(qū)分,假設端口映射為 -p 5678:9898碧聪,前面的 5678 是宿主機的端口冒版,后面的 9898 是容器內的端口

在容器運行起來之后,如果想進入該容器逞姿,可以 通過 docker ps 找到這個運行的容器辞嗡,然后 使用下面的命令進入容器內查看

5、其他Dockerfile命令

除了在前面介紹的 Dockerfile 命令滞造,還有掛載的命令 VOLUME续室,端口聲明的命令 EXPOSE,環(huán)境變量設置的命令 ENV谒养,還有與 CMD 相似的指令執(zhí)行的命令 ENTRYPOINT 等

EXPOSE

可用于聲明這個鏡像使用的端口挺狰,在運行的時候可以使用 -p 參數映射這個端口,但似乎并無太多實際意義,可以用于在 Dockerfile 中聲明丰泊,后期便于查看

VOLUME

掛載的命令薯定,我們可以在后面的運行 MySQL 鏡像的時候介紹

ENV

命令為環(huán)境變量,可以在構建鏡像的時候就指定變量瞳购,也可以在 運行容器的時候指定命令话侄,可以直接在 Dockerfile 中如此聲明:

ENV key value

ENTRYPOINT

與 CMD 類似的作用,但 ENTRYPOINT 不會被容器啟動時的指定的指令覆蓋学赛,而 CMD 命令會被覆蓋

比如:

docker run -itd image_id bash

這里就指定了新的 CMD 命令為 bash年堆,那么原來的 CMD 命令就被覆蓋,不會執(zhí)行了

如果想要覆蓋 Dockerfile 中的 ENTRYPOINT 命令罢屈,僅在容器 run 的時候嘀韧,使用 --entrypoint 的參數,則會覆蓋 ENTRYPOINT 指定的程序

在 Dockerfile 中缠捌,如果存在多個 ENTRYPOINT 命令,僅最后一個生效译蒂,比如:

# Dockerfile

ENTRYPOINT ["python3", "manage.py", "runserver", "0:7979"]

ENTRYPOINT ["python3", "manage.py", "runserver", "0:9898"]

則系統(tǒng)會運行 最后一條曼月,使用 9898 的端口

ENTRYPOINT 和 CMD 搭配使用

因為 entrypoint 不會被覆蓋,所以可以放入不會變的命令

而 CMD 會被后面的參數覆蓋柔昼,所以可以放入會被更改的數據哑芹,比如端口,或者其他會變的配置文件位置

以 Django 系統(tǒng)為例捕透,我們可以將 python3 manage.py 這兩個命令給 entrypoint聪姿,將端口的設置給 CMD,因為端口我們是可以更改的乙嘀。

示例如下:

ENTRYPOINT ["python3", "manage.py", "runserver"]
CMD ["0:9898"]

然后我們重新構建鏡像末购,獲得新的 image_id,然后運行容器虎谢,加上 CMD 命令更換端口為 9999:

docker run -itd -p 9898:9999 image_id 0:9999

通過上面的命令將系統(tǒng)運行起來后盟榴,還是可以訪問宿主機的 localhost:9898,但是容器內部使用的端口已經變成了 9999

我們可以進入容器內部婴噩,查看運行的進程擎场,可以看到在容器內已經是 使用的 9999 端口在運行

docker exec -it container_id bash

ps aux
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市几莽,隨后出現的幾起案子迅办,更是在濱河造成了極大的恐慌,老刑警劉巖章蚣,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件站欺,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機镊绪,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門匀伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蝴韭,你說我怎么就攤上這事够颠。” “怎么了榄鉴?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵履磨,是天一觀的道長。 經常有香客問我庆尘,道長剃诅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任驶忌,我火速辦了婚禮矛辕,結果婚禮上,老公的妹妹穿的比我還像新娘付魔。我一直安慰自己聊品,他們只是感情好,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布几苍。 她就那樣靜靜地躺著翻屈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妻坝。 梳的紋絲不亂的頭發(fā)上伸眶,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音刽宪,去河邊找鬼厘贼。 笑死,一個胖子當著我的面吹牛纠屋,可吹牛的內容都是我干的涂臣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼售担,長吁一口氣:“原來是場噩夢啊……” “哼赁遗!你這毒婦竟也來了?” 一聲冷哼從身側響起族铆,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤岩四,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哥攘,有當地人在樹林里發(fā)現了一具尸體剖煌,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡材鹦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了耕姊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桶唐。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖茉兰,靈堂內的尸體忽然破棺而出尤泽,到底是詐尸還是另有隱情,我是刑警寧澤规脸,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布坯约,位于F島的核電站,受9級特大地震影響莫鸭,放射性物質發(fā)生泄漏闹丐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一被因、第九天 我趴在偏房一處隱蔽的房頂上張望卿拴。 院中可真熱鬧,春花似錦氏身、人聲如沸巍棱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至如贷,卻和暖如春陷虎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杠袱。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工尚猿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楣富。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓凿掂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親纹蝴。 傳聞我的和親對象是個殘疾皇子庄萎,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容