網(wǎng)站首頁 編程語言 正文
創(chuàng)建搭載flask的python容器,實現(xiàn)容器內(nèi)服務(wù)隨容器自啟動,需要使用shell腳本
和Dockerfile中的CMD
1 Docker下載python
# 下載python sudo docker pull python:3.8.2 # 創(chuàng)建python容器 sudo docker run -itd --name mypython python:3.8.2 # 進入mypython sudo docker exec -it mypython /bin/bash # 安裝flask和gunicorn pip install flask pip install gunicorn
2 搭建flask服務(wù)
2.1 創(chuàng)建flask腳本
在宿主機上創(chuàng)建flask腳本文件
touch app.py
app.py的內(nèi)容如下
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World"
將main.py復制到mypython容器中的/home/myflask目錄下
sudo docker cp app.py mypython:/home/myflask
2.2 創(chuàng)建gunicorn啟動腳本
在宿主機下創(chuàng)建啟動文件
touch start_flask.sh
在start_flask.sh文件中添加
#!/bin/bash # # Program: # mypython flask # History # 2022-06-08 mason # # 進入目錄 cd /home/myflask # 執(zhí)行程序 gunicorn -w 4 -b 0.0.0.0:5000 app:app
將start_flask.sh復制到mypython容器中的/home/myflask目錄下
sudo docker cp start_flask.sh mypython:/home/myflask
3 制作鏡像
3.1 將mypython容器制作成鏡像
# docker commit -m "說明" -a "作者" 容器名 鏡像名:版本號 sudo docker commit -m "my python " -a "mason" mypython mypython:v1.0 # 查看鏡像列表 sudo docker images # 返回結(jié)果 mypython v1.0 875738200451 9 seconds ago 945MB
3.2 Dockerfile制作
(1)創(chuàng)建mypython-v1.0-dockerfile目錄
mkdir mypython-v1.0-dockerfile
(2)在mypython-v1.0-dockerfile創(chuàng)建Dockerfile
# 進入目錄 cd mypython-v1.0-dockerfile # 創(chuàng)建文件 touch Dockerfile
(3)Dockerfile的內(nèi)容如下
注意:run是在 docker build構(gòu)建鏡像時, 會執(zhí)行的命令;cmd是在 docker run啟動容器時, 會執(zhí)行的命令
# 設(shè)置鏡像 FROM mypython:v1.0 # 設(shè)置作者 MAINTAINER mason # 開放5000端口 EXPOSE 5000 # 執(zhí)行命令 CMD ["sh", "/home/myflask/start_flask.sh"]
(4)執(zhí)行Dockerfile
sudo docker build -t mypython:v2.0 mypython-v1.0-dockerfile/
3.3 使用自定義的鏡像創(chuàng)建容器
# 創(chuàng)建容器 sudo docker run -itd --name mytest -p 5000:5000 mypython:v2.0 # 查看mytest的日志信息 sudo docker logs -f mytest
4 在聯(lián)網(wǎng)的情況下,直接使用Dockerfile制作鏡像
4.1 設(shè)置基本環(huán)境
# 創(chuàng)建目錄 sudo mkdir mypython-1.0 # 進入mypython-1.0 cd mypython-1.0 # 創(chuàng)建myflask目錄 sudo mkdir myflask
4.2 創(chuàng)建腳本
進入myflask目錄,創(chuàng)建app.py文件,文件內(nèi)容如下。
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World"
進入myflask目錄,創(chuàng)建start_flask.sh文件,文件內(nèi)容如下。
#!/bin/bash # # Program: # mypython flask # History # 2022-06-08 mason # # 進入目錄 cd /home/myflask # 執(zhí)行程序 gunicorn -w 4 -b 0.0.0.0:5000 app:app
4.3 創(chuàng)建Dockerfile文件
進入mypython-1.0目錄,注意不是myflask目錄,創(chuàng)建Dockerfile文件,文件內(nèi)容如下:
# 設(shè)置鏡像 FROM python:3.8.2 # 作者 MAINTAINER Maon # 在容器中安裝相關(guān)的環(huán)境 RUN pip install flask RUN pip install gunicorn # 設(shè)置工作目錄 WORKDIR /home # 復制文件,注意myflask目錄要與Dockerfile在同一個目錄 # COPY會將myflask目錄下的文件,全部拷貝到/home/myflask目錄下 COPY myflask /home/myflask # 開放端口5000 EXPOSE 5000 # 執(zhí)行命令 CMD ["sh", "/home/myflask/start_flask.sh"]
執(zhí)行文件
# 進入mypython-1.0目錄 cd mypython-1.0 # 執(zhí)行文件,注意后面的"." sudo docker build -t mypython:1.0 . # 執(zhí)行過程如下 Sending build context to Docker daemon 4.608kB Step 1/8 : FROM python:3.8.2 ---> 4f7cd4269fa9 Step 2/8 : MAINTAINER Maon ---> Running in 01bd71948685 Removing intermediate container 01bd71948685 ---> ddae7ce9a68d Step 3/8 : RUN pip install flask ---> Running in 58f3fcfe573c Collecting flask Downloading Flask-2.1.2-py3-none-any.whl (95 kB) Collecting Jinja2>=3.0 Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB) Collecting importlib-metadata>=3.6.0; python_version < "3.10" Downloading importlib_metadata-4.11.4-py3-none-any.whl (18 kB) Collecting click>=8.0 Downloading click-8.1.3-py3-none-any.whl (96 kB) Collecting itsdangerous>=2.0 Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB) Collecting Werkzeug>=2.0 Downloading Werkzeug-2.1.2-py3-none-any.whl (224 kB) Collecting MarkupSafe>=2.0 Downloading MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB) Collecting zipp>=0.5 Downloading zipp-3.8.0-py3-none-any.whl (5.4 kB) Installing collected packages: MarkupSafe, Jinja2, zipp, importlib-metadata, click, itsdangerous, Werkzeug, flask Successfully installed Jinja2-3.1.2 MarkupSafe-2.1.1 Werkzeug-2.1.2 click-8.1.3 flask-2.1.2 importlib-metadata-4.11.4 itsdangerous-2.1.2 zipp-3.8.0 WARNING: You are using pip version 20.1; however, version 22.1.2 is available. You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command. Removing intermediate container 58f3fcfe573c ---> a22c9de6e3d5 Step 4/8 : RUN pip install gunicorn ---> Running in 5b635d18e39b Collecting gunicorn Downloading gunicorn-20.1.0-py3-none-any.whl (79 kB) Requirement already satisfied: setuptools>=3.0 in /usr/local/lib/python3.8/site-packages (from gunicorn) (46.1.3) Installing collected packages: gunicorn Successfully installed gunicorn-20.1.0 WARNING: You are using pip version 20.1; however, version 22.1.2 is available. You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command. Removing intermediate container 5b635d18e39b ---> 8afabe6c3a62 Step 5/8 : WORKDIR /home ---> Running in 45040c10af7c Removing intermediate container 45040c10af7c ---> 15ef04626c92 Step 6/8 : COPY myflask /home ---> b6736b08b1e3 Step 7/8 : EXPOSE 5000 ---> Running in 0835fe7f5809 Removing intermediate container 0835fe7f5809 ---> ebd8bd33c8dc Step 8/8 : CMD ["sh", "/home/myflask/start_flask.sh"] ---> Running in e1f867903175 Removing intermediate container e1f867903175 ---> 8c1b7d276dbb Successfully built 8c1b7d276dbb Successfully tagged mypython:1.0
4.4 使用鏡像
# 創(chuàng)建容器 sudo docker run -itd --name mytest1.0 -p 5000:5000 mypython:1.0 # 查看日志 sudo docker logs -f mytest1.0
容器自動重啟后,查看結(jié)果
原文鏈接:https://blog.csdn.net/make_progress/article/details/125191940
相關(guān)推薦
- 2022-12-01 C++中單鏈表操作的示例代碼_C 語言
- 2022-12-04 python亂序字符串排序的實現(xiàn)方式_python
- 2022-06-20 Flutter?Navigator路由傳參的實現(xiàn)_Android
- 2022-09-01 Nginx?部署的虛擬主機使用?Let's?Encrypt?加密?https的方法_nginx
- 2022-08-15 利用calc函數(shù)實現(xiàn)簡單的自適應(yīng)
- 2022-12-05 useReducer?createContext代替Redux原理示例解析_React
- 2022-07-19 typedef struct LNode *p和typedef struct LNode筆記
- 2022-05-13 三分鐘搞懂react-hooks及實例代碼_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支