docker安装使用 + docker部署:flask + gunicorn
官方的一键安装方式:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动Docker的命令:
sudo systemctl start docker
通过运行hello-world镜像来验证是否正确安装了Docker Engine-Community。
// 拉取镜像 sudo docker pull hello-world // 执行hello-world sudo docker run hello-world
如果执行之后,控制台显示如下信息,则说明Docker安装和启动成功:
[root@iZ8vb8pfb2awsz4qy7vm7qZ ~]# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly.
docker部署应用:
test_main.py:
from flask import Flask # 安装依赖 # pip3 install -U flask app = Flask(__name__) @app.route('/') def index(): return "测试容器部署!" if __name__ == '__main__': app.run(host='0.0.0.0', port=8888) # 浏览器访问测试 # http://127.0.0.1:8888/
run_gunicorn.py:
下面options 是gunicorn配置项
from test_main import app,是把test_main 启动文件中的app获取过来
from gevent import monkey monkey.patch_all() from gunicorn.app.base import BaseApplication from test_main import app class StandaloneApplication(BaseApplication): def __init__(self, app, options=None): self.options = options or {} self.application = app super().__init__() def load_config(self): config = {key: value for key, value in self.options.items() if key in self.cfg.settings and value is not None} for key, value in config.items(): self.cfg.set(key.lower(), value) def load(self): return self.application if __name__ == '__main__': options = { # 'bind': '0.0.0.0:8888', # 'workers': 4, # 'worker_class': 'gevent' # 预加载资源 "preload_app" : True, # 绑定 ip + 端口 这个地方的ip和端口要和 flask文件一致 这样就能按照这个ip和端口访问到 "bind" : "0.0.0.0:8888", # 进程数 开多少个应用 "workers" : 3, # 线程数 = 进程数 * 2 "threads" : 6, #设置守护进程,将进程交给supervisor管理 他可以守护 执行的py文件,挂了能自动重启 "daemon" : 'true', # 等待队列最大长度,超过这个长度的链接将被拒绝连接 "backlog" : 2048, # 工作模式--协程 "worker_class" : "gevent", # 最大客户客户端并发数量 "worker_connections" : 1200 } StandaloneApplication(app, options).run()
Dockerfile:
# # Dockerfile FROM centos:7.9.2009 RUN yum makecache fast; RUN yum install python3-devel python3-pip -y RUN pip3 install --upgrade pip RUN pip3 install flask==2.0.3 RUN pip3 install gunicorn==21.2.0 RUN pip3 install gevent==22.10.2 COPY test_main.py run_gunicorn.py /opt WORKDIR /opt EXPOSE 8888 CMD ["python3","run_gunicorn.py"]
首先要构建镜像:-t是镜像的名字
1 | docker build -t my_flask_app . |
启动镜像: -d 标志告诉Docker将容器作为后台服务在后台运行
-d
1 | docker run -d -p 8888:8888 my_flask_app |
查看镜像:
1 | docker ps |
防火墙要打开8888 此时可以打开网址
打包镜像与加载镜像:
docker images
在哪个路径就会打包到哪里:my_flask_app:latest是镜像
1 | docker save -o my_flask_app.tar my_flask_app:latest |
可以先把现有的删除,做测试:
1 | docker rmi my_flask_app |
加载容器的方法
1 | docker load -i my_flask_app.tar |
启动容器:
1 | docker run -d -p 8888:8888 my_flask_app |
可以进入容器查看和安装
-
使用以下命令进入容器:
退出容器:exit
删除全部没使用的容器,释放资源:
docker container prune
删除所有镜像:
docker rmi $(docker images -a -q)
停止运行应用:
-
停止容器:docker stop 容器ID 删除容器:docker rm container_id
强制删除镜像 docker rmi -f image_id
容器无法启动,查看报错:docker logs CONTAINER_ID
Docker其他常见命令
安装完成Docker之后,这里汇总列一下常见的Docker操作命令:
- 搜索仓库镜像:docker search 镜像名
- 拉取镜像:docker pull 镜像名
- 查看正在运行的容器:docker ps
- 查看所有容器:docker ps -a
- 删除容器:docker rm container_id
- 查看镜像:docker images
- 删除镜像:docker rmi image_id / 强制删除镜像 docker rmi -f image_id
- 启动(停止的)容器:docker start 容器ID
- 停止容器:docker stop 容器ID
- 重启容器:docker restart 容器ID
- 启动(新)容器:docker run -it ubuntu /bin/bash
- 进入容器:
docker attach 容器ID
或docker exec -it 容器ID /bin/bash
,推荐使用后者。
更多的命令可以通过docker help
命令来查看。
https://blog.csdn.net/weixin_43715214/article/details/125951281
保存、导入镜像
docker save 是保存docker的镜像到本地
docker load 是把本地镜像加载到docker,然后,docker就可以启动这个镜像了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!