在很久很久以前,我已经听过Docker的大名,当时服务着急上线虽然考虑过用Docker来部署我的服务,但是因为赶期的原因放弃了。
这两天因为华为云服务器到期,而且阿里云服务器优惠力度特别大的原因,我要把华为云服务器里的工程迁移到阿里云。
迁移的过程中,大量的时间精力浪费在了重装python,加载依赖,迁移项目,配置端口等环境配置的工作上。
我在想,如果当时用了Docker部署,我至于受这气?
于是,一不做二不休,就花了点时间把部署以docker的形式部署了。
在部署前,我以为是一件多么苦难的事,结果,操作后才发现,原来最难的一步是跨出第一步。
还好,在之前我半途而废的过程中,我把经验已经积累下来了。
需要注意的是Docker桌面目前仅支持以下几个操作系统
我的服务器是CentOS,所以这个桌面应该是用不了了,但是影响应该不大。因为Docker引擎目前支持绝大多数操作系统。
如果需要安装Docker引擎,需要的系统版本必须是7、8、9的版本。并且官方建议Linux内核为3.10及以上。
lsb_release -a
版本为7.9,符合条件。
uname -r
内核为3.10。符合条件。
官方说明,该存储库默认情况下处于启用状态,但是如果你之前禁用过它,则需要重新启用它。
yum repolist enabled
可以看到,extras存储库已启用
如果你之前不巧,使用过以下命令或者其他命令禁用过extras存储库:
sudo vi /etc/yum.repos.d/CentOS-Base.repo
enabled为1 表示正在启用,为0表示已被禁用。
在进行更改后,建议清除YUM缓存,以确保使用最新的仓库配置。
sudo yum clean all
温馨提示,不要随便禁用库。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
因为,我没安装过旧版Docker,所以这里显示没有删除任何东西。
这边使用官方推荐的存储库安装。
首先需要安装一个工具包yum-util,它提供了yum-config-manager功能:
sudo yum install -y yum-utils
这个是官网的中央仓库,国内速度会有一些慢。
sudo yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
国内的朋友推荐再加一个阿里云的镜像仓库,体验会好很多。
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
官网给出了直接安装最新版本和安装指定版本的指令。
需要一起安装 Docker Engine、containerd 和 Docker Compose
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
首先列出所有版本
yum list docker-ce --showduplicates | sort -r
框住的就是版本号,选择指定版本,然后使用下面的命令进行安装。
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
<VERSION_STRING>部分换为指定版本号即可。
1. 启动 Docker。
sudo systemctl start docker
2. 通过运行映像来验证 Docker 引擎安装是否成功。hello-world
sudo docker run hello-world
1. 卸载 Docker Engine、CLI、containerd 和 Docker Compose 包:
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
2. 主机上的image、containerd或自定义配置文件不会自动删除,需要手动执行。
sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
提前声明,Dockerfile虽然看起来有点复杂,但是其实还是挺容易理清的。可以先参考下我这个工程的Dockerfile,其实并不复杂。
FROM python:3.6 # 设置工作目录 WORKDIR /app # 复制项目文件到容器中 COPY . /app # 如果你的镜像中没有 tzdata,则需要安装它 # 注意:python:3.6 官方镜像可能已包含 tzdata # RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/* # 设置时区为东八区(中国标准时间) RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone # 安装依赖 RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 暴露端口 EXPOSE 7010 # 设置容器启动时运行的命令 CMD ["python3", "api.py"]
FROM python:3.6
WORKDIR /app
COPY . /app
# RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
EXPOSE 7010
CMD ["python3", "api.py"]
编写完dockerfile,我们一般喜欢放在需要打包的地方的根路径,然后直接运行
docker build -t opendrop .
运行之后,docker会自动完成dockerfile里面的每一个步骤。打包完成后,我们就可以看到images。
大家直接docker images 即可看到。
如果要重新打包,需要先删除原来的镜像,执行以下命令即可。
docker rmi a9765c2d0703(镜像id)
操作如下:
根据镜像创建容器执行以下命令
`docker run -d -p 要映射的本机端口:docker中项目运行的端口 镜像名称`
我这里端口都是7010,你们根据需要自行配置。
docker run -d -p 7010:7010 opendrop
然后用docker ps就能看到执行的容器了。
如果想看项目日志,可以执行以下命令进入docker查看。
docker exec -it 3843cbd6fb40(容器id) /bin/bash
docker stop 【容器id】
docker restart 【容器id】
3. 删除容器
docker rm 【容器id】
4. 导出/导入容器
docker export 【容器id】 > file.tar docker import file.tar 【镜像名字】
到此这篇关于python项目以docker形式打包部署的文章就介绍到这了,更多相关python以docker打包部署内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!