1. 安装Docker
本文所有操作均在ubuntu2204上进行,请知悉!同时Docker的官方文档最开始使用的dockerfile,但是对于新手来说,我个人感觉dockerfile不是太友好(比如对于我来说),因此本文只介绍如何手动在Docker容器里面部署flask应用!
通过apt命令查看软件源中是否包含有docker
apt-cache policy docker.io
如果出现类似下图的结果,则说明软件源中存在有docker的安装包直接通过下面的命令进行安装即可
sudo apt-get install docker.io
# 查看docker版本详细信息
sudo docker version
如果显示如下图所示的信息,则说明docker成功安装了
如果软件源里面没有docker的包,则可以直接去docker官网下载,然后通过dpkg -i命令进行安装
2. 创建Docker容器
在docker中有两个概念:镜像、容器。镜像顾名思义,就是我们平时所说的操作系统比如ubuntu、centos等,但是在docker中的镜像一般都是经过精简后只提供最小的运行单元,比如你通过docker pull ubuntu 会自动将最新的ubuntu镜像从docker的服务器拉去到本地,通过docker images 可以看到如下图所示的信息,镜像的大小只有77.8MB.
镜像是容器的基础,一个镜像可以创建多个容器,容器就是运行web应用的宿主机,简而言之就是类似于虚拟机,但是跟虚拟机还是有很大的差别,镜像与容器的关系如下图所示。
通过下面的命令就可以创建我们自己的docker容器了
sudo docker pull ubuntu # 从docker镜像仓库中拉去ubuntu最新的镜像
sudo docker run -p 8001:5000 -it ubuntu /bin/bash # 通过本地的ubuntu镜像去创建容器
sudo docker ps -a
通过上面的命令就可以创建一个docker容器了,结果如下图所示则说明容器创建成功了,下面解释一下上面的参数
- -p 由于我们是将web应用部署在docker容器内部,容器对于宿主机来说是两个不同的环境,通过-p参数就可以将容器的端口映射到宿主机的端口,比如外部客户端访问宿主机的8000端口的服务器,实际上是访问到容器内部5000端口的服务
- -it 加上这个参数我们就可以通过bash的方式进入容器内部
- -a ps命令默认只会显示出正在运行的容器,加上-a参数可以显示本机所有的容器
创建好容器之后,就可以通过start命令去运行容器了,显示下图的信息就说明容器已经成功运行了
sudo docker start adoring_wescoff # 跟容器名称
sudo docker ps
3. 进入容器手动部署应用
容器成功启动后,我们就可以通过exec命令进入容器内部,然后部署我们的应用了,不过在这之前我们可以通过rename去给容器重新修改一个名字,因为我们在执行run命令的时候,没有通过name参数给容器指定一个名称,因此docker会自动给我们的容器创建一个随机的名称,如下图所示,将容器重新命名为flask_app,然后通过ps命令去查看,容器显示命名称为flask_app,则说明容器名称修改成功。
sudo docker rename adoring_wescoff flask_app
sudo docker ps
成功修改容器名称后,通过exec命令进入容器内部
sudo docker exec -it flask_app /bin/bash
在根目录中通过下面的命令创建一个简单的flask应用,并启动
mkdir demo
apt update
apt install python3 python3-pip vim # 安装一些必要的包
pip install flask
cd demo
vim app.py
在app.py文件中输入下面的代码,通过python app.py运行应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, World![FROM DOCKER]"
if __name__ == '__main__':
app.run(host="0.0.0.0")
在宿主机中打开浏览器,访问http://127.0.0.1:8000 即可看到下面的内容
到此为止,使用docker容器手动部署flask web应用就完成了。
手动部署肯定不是最好的方式,但是我感觉适合我这种对Linux比较熟悉,但是对docker不是太熟悉的人,后面会继续更新通过DockerFile进行部署的内容!
dvlee2 用户 2023-04-18T10:28:29
11111111111