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

  

可以进入容器查看和安装
  1. 使用以下命令进入容器:

docker exec -it CONTAINER_ID /bin/bash
退出容器: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 容器IDdocker exec -it 容器ID /bin/bash,推荐使用后者。

更多的命令可以通过docker help命令来查看。

 

https://blog.csdn.net/weixin_43715214/article/details/125951281

保存、导入镜像

docker save 是保存docker的镜像到本地   

docker load 是把本地镜像加载到docker,然后,docker就可以启动这个镜像了

 

 

 

 

 
posted @   Kevin0is0me  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示