Docker容器化部署

前言:要在Docker上运行应用程序,首先必须构建一个容器,而且必须包含使用的所有依赖项。因此,docker容器化部署的基本流程是:
1.新建一个包含所有依赖包的 requirements.txt 文件;
2.创建一个Dockerfile,该文件用来描述构建映像过程;
3.生成docker镜像;
3.实例化该镜像得到一个容器,启动该容器完成部署;当启动容器时还需要放开应用程序的HTTP端口。

python生成requests.txt文件

有三种方法可以自动生成requests.txt文件。

pip

进入所需的python环境,在命令行里输入:

pip freeze > ./requirements.txt

生成的requirements.txt里包含这个环境里下所有的python包。

pipreqs

进入所需的python环境,在命令行里输入:

pip install pipreqs
pipreqs . --encoding=utf8 --force

生成的requirements.txt里只包含代码里import的python包。

pip-compile

使用前需要先进行安装:

 pip install pip-tools 

如果权限不够,请使用sudo先在项目目录中创建 requirements.in 文件,然后手动写入包文件名称,然后执行 pip-compile requirements.in, 最后 cat requirements.txt。

总结

在这里插入图片描述
PS:在我的项目中,使用了第二种方法,一般的项目用第二种基本够用

创建Dockerfile

确定程序目录结构

接下来,需要将整个应用程序工程都放在顶层文件夹中下,同时建议将主入口程序命名为 app.py(相当于工程中的main.py) ,将脚本中创建的Flask对象命名为 app 是一种通常的做法,这样也可以简化部署。最后,形成的目录结构如下:

XXXApp  
    ├── requirements.txt
    ├── Dockerfile
    └── app.py
    └── <other python packges>

PS:这一步的工作和Dockerfile中的内容息息相关,如果程序结构改变,Dockerfile的内容需要相应改变。
在这里,本机Pycharm测试时,工程的目录如下(main.py即app.py):

XXXProject  
    └── main.py
    └── <other python packges>
Dockerfile创建

Dockerfile是一个文本文件,包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。它是创建镜像的必须文件,示例如下:

# 基于镜像基础
FROM python:3.6.8  
# 设置代码在docker中的工作目录为 /app
# 相当于在docker中创建一个名为app的文件夹
WORKDIR /app
# 将(运行docker命令时的)当前目录下的所有内容复制到 /app 下
# 即XXXApp/下的所有内容复制到/app下
ADD . /app  
# 允许外界访问容器的19958端口
EXPOSE 19958
# 安装所需的包
RUN pip install --trusted-host  pypi.douban.com -r requirements.txt
#RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Run app.py when the container launches
CMD ["python", "app.py"]
生成镜像

本文采用的CentOS7环境:进入到工程目录下,即:XXXApp/下,输入以下命令。

docker build -t my_dev:v1 -f Dockerfile .

说明:
(1)“.”表示dockerfile在当前打开的目录之下;my_dev是对镜像的命名;v1是版本号
(2)确认新镜像已经安装的方法:在终端中输入下面命令,可查看本机中已有的镜像。

docker images

可能会报错:
找不到Dockerfile文件:

unable to prepare context: unable to evaluate symlinks in Dockerfile path: GetFileAttributesEx D:\EvaluationApp\Dockerfile: The system cannot find the file specified.

解决问题的办法是最好在终端对dockerfile进行创建、保存和修改:

#创建Dockerfile,注意这里的Dockerfile的首字母是大写的
touch Dockerfile
#使用windows的记事本打开Dockerfile文件
notepad Dockerfile&

输入内容后,点击保存

实例化镜像并启动容器、设置映射端口、

输入以下命令:

docker run -itd -p 19958:19958 --name my_dev --restart=always my_dev:v1

说明
(1)my_dev为容器名;my_dev:v1为镜像名
(2)有可以查看docker容器运行时状态的启动方法,如下:

docker run -it -d -p 19958:19958 --name my_dev my_dev:v1 /bin/bash
docker exec -it my_dev /bin/bash

(3)在终端中输入下面命令,可查看本机中已有的容器及其运行状态:

docker ps -a

(4)可以对镜像打包成tar包,方便传输,输入以下命令:

#压缩命令
docker save -o /home/my/my_dev.v1.tar my_dev:v1

/home/my/my_dev.v1.tar为压缩后的文件的地址
my_dev:v1为需要打包的镜像名(包括版本号)
(5)进行部署时,可以将压缩后的文件传输到某一目录下,在该目录下,运行解压命令,如下:

#解压命令
docker load -i my_dev.v1.tar

解压后,即可使用相应命令看到镜像已存在,然后使用启动命令即可完成部署。

Docker管理镜像和容器

可以参见:
Docker 删除镜像

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值