本节实践将本地项目部署在
Docker
容器中,以便于
CI/CD
(持续集成和持续交付),甚至是协作交付,因为
Docker
更容易进行移植。
常用部署方案主要有 挂载部署
和 构建镜像部署
两种方式,本文仅介绍第一种
言归正传,本次构建一个用于编写 Python
代码程序的 Docker
教程,代码很简单,就一行:print("Hello Datawhale Learner!")
。麻雀虽小,五脏俱全。部署步骤如下:
本文采用的是 win10 + wsl2 的 docker 环境
1. 挂载部署
这种方式类似于常规部署,通过数据卷的方式将宿主机的 python code
挂载到容器中,然后执行 python xxx.py
执行代码,此时选择容器中的代码而非采用本地代码。
1.1 准备本地文件
将 python code
放置于本地目录,比如 ~/.docker/app.py
。
1.2 拉取镜像
docker pull python:rc-alpine3.13
1.3 编写docker-compose.yml文件
version: '3.0'
services:
python:
image: python:rc-alpine3.13
restart: always
container_name: mypython
ports:
- 8080:8001
volumes:
- ~/.docker/app.py:/root/app.py # 挂载文件
- /etc/localtime:/etc/localtime
environment:
- TZ="Asia/Shanghai"
entrypoint: python /root/app.py
tty: true
参数解释:
-
build 指定dockerfile所在文件夹的路径 context指定dockerfile文件所在路径 dockerfile指定文件的具体名称
-
container_name 指定容器名称
-
volumes 挂载路径 z是用来设置selinux,或者直接在linux通过命令临时关闭或者永久关闭
-
ports 暴露端口信息
-
networks是用来给容器设置固定的ip
1.4 docker-compose up 批量启动容器
docker-compose up
过程中各种报错。。。
- 错误1:
当时没截图,(报错截图是剽窃的)。
经过仔细观察,错误是因为关键字和参数之前缺少空格导致的,存在此类错误的行,关键字是白色的,而不是彩色的。
- 错误2:
/usr/local/bin/python: can't find '__main__' module in '/root/app.py'
看的这个错误真的是一脸懵逼啊,app.py
中添加 main
函数也不行,各种搜索也没搞定,就睡了。无奈今天是打卡 ddl
了,只能硬钢。
功夫不负有心人,我在 stackoverflow 找到了点疑似有用的信息。
然后,我就去试了。刚开始我在本地目录创建了文件夹,在 wsl2 terminal
居然看不到,后来我直接在终端创建了目录并创建了文件:
然后,我就修改了 docker-compose.yml
,将目录 app
挂载到容器中:
version: '3.0'
services:
python:
image: python:rc-alpine3.13
restart: always
container_name: mypython
ports:
- 8080:8001
volumes:
- ~/.docker/app:/root/app # 挂载目录
- /etc/localtime:/etc/localtime
environment:
- TZ="Asia/Shanghai"
entrypoint: python /root/app/app.py
tty: true
修改后再执行 docker-compose up
居然跑起来了,真的好高兴啊。
我只能说,stackoverflow
真的神奇。