1、使用Docker构建一个python容器,用于运行python相关应用
2、基于Dockerfile构建python容器
3、镜像的体积需要尽量的小(OS和python采用最小化安装)
Python版本:3.8.13
OS版本:Debian GNU/Linux 11 \n \l
这里是基于python:3.8.13-slim构建的镜像,需要切换版本可以在Docker Hub中查看python Tags | Docker Hub
需要特别注意的地方:

话不多说,开始编写Dockerfile
vi Dockerfile
- FROM python:3.8.13-slim
-
- USER root
-
- ENV TZ=UTC
-
- RUN echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free' > /etc/apt/sources.list && \
- echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free' >> /etc/apt/sources.list && \
- echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free' >> /etc/apt/sources.list && \
- echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free' >> /etc/apt/sources.list && \
- ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
- apt update && \
- apt install -y iptables iproute2 procps
-
- COPY ./demo-python /opt/demo-python/
-
- WORKDIR /opt/demo-python
-
- RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
-
- ENTRYPOINT [ "/opt/demo-python/docker-entrypoint.sh" ]
代码解释:
1、上述内容中RUN由多条命令组合而成:
2、将python的程序包复制到镜像指定目录中,并指定工作目录
3、通过pip安装python程序中所需的依赖
4、配置镜像的切入点(我这里的切入点是一个sh程序,内容如下所示,sh中含有其他的具体命令,我这里就省略了,各位可以自行根据项目编写,如果没有额外的处理逻辑,可以不配置具体的切入点,直接通过Dockerfile CMD启动python)
- #!/bin/bash
-
- # 额外的代码逻辑略
-
- # main.
- echo '#~ demo-python starting...'
- python bin/app.py
至此Dockerfile就编写完成了,在Dockerfile和demo-python的同级目录下执行:
> docker build -t demo-python:1.0.0 .
Tips: 注意命令最后有一个点,代表当前路径(具体docker build目录,Dockerfile构建可以自行查看相关资料)
vi docker-compose.yml
- version: '1.0.0'
-
- services:
- sinkhole:
- container_name: demo-python
- image: demo-python:1.0.0
- restart: unless-stopped
- privileged: true
- volumes:
- - /opt/demo-python/config:/opt/demo-python/config
- - /opt/demo-python/logs:/opt/demo-python/logs
- cap_add:
- - ALL
- stdin_open: true
- tty: true
- healthcheck:
- test: ["CMD", "ps -ef|grep demo-python |grep -v grep |grep -v 'vi ' |grep -v 'vim ' |wc -l"]
- interval: 1m
- timeout: 3s # 设置检测超时时间
- retries: 3 # 设置重试次数
- start_period: 10s # 启动后,多少秒开始启动检测程序
代码解释:
1、image指向通过Dockerfile构建的镜像
2、privileged 指容器使用root权限
3、cap_add 添加或删除容器拥有的宿主机的内核功能。配置ALL指开启全部权限
4、stdin_open、tty相当于docker run -it
5、healthcheck 用于检测 docker 服务是否健康运行
然后在docker-compose.yml同级目录下执行:
> docker-compose up -d
即可完成容器的创建和运行。