1、程序依赖包写入requirements.txt文件
requests
numpy
pillow
tornado
2、编写Dockerfile
# 拉取基础镜像
FROM python:3.6.5
# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive
# 把当前所有文件拷贝到容器的/code文件夹里,并根据requirements.txt安装python依赖包
RUN mkdir /code \
&& apt-get update -y \
&& apt-get install -y libsm6 \
&& pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . /code
RUN pip install -r /code/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /code
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
CMD ["python3","http_server.py"]
3、执行命令
Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务。
容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射。
宿主机的一个端口只能映射到容器内部的某一个端口上,比如:8080->80之后,就不能8080->81
容器内部的某个端口可以被宿主机的多个端口映射,比如:8080->80,8090->80,8099->80
启动容器时,选择一个端口映射到容器内部开放端口上
-p 小写p表示docker会选择一个具体的宿主机端口映射到容器内部开放的网络端口上。
-P 大写P表示docker会随机选择一个宿主机端口映射到容器内部开放的网络端口上。
# 制作镜像
sudo docker build -t python_fun:test .
# 运行镜像,docker容器的端口映射到宿主机的端口
sudo docker run -ti --name http_server -p 8888:8888 python_fun:test
4、docker-compose启动
docker-compose.yml.service,通过配置docker环境变量的方式,传入一些参数设置
version: '3.1'
services:
python_mini_service:
build:
context: .
dockerfile: Dockerfile.cpu
image: python3.6_cpu:v1
restart: always
working_dir: /root/projects
ports:
- 8888:8888
environment:
- TZ=Asia/Shanghai
- host-ip=192.168.34.168
- host-port=8888
工程代码中相应的run_cfg.py也要做修改
import os
http_config = {
# 本地服务 ip 线上的话需要写具体部署http服务的ip
'server_host': os.environ['host-ip'],
# 服务名
'app_name': 'video-python',
# 端口
'port': int(os.environ['host-port'])
}
运行
docker-compose -f docker-compose.yml.service up -d