1.Dockerfile制作镜像

# 基于 ubuntu:20.04
FROM ubuntu:20.04

#复制该文件夹至镜像
RUN mkdir /APP
ADD . /APP
# 更新软件源为阿里云
RUN cat /APP/config/sources.list > /etc/apt/sources.list \
# 更新软件
 && apt-get -y update \
# 安装依赖
 && apt-get install -y python3-dev python3-pip \
 && apt-get install -y python3-setuptools \
 && apt-get install -y libmysqlclient-dev \
# 安装python依赖
 && pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ \
 && pip install -r /APP/config/requirements.txt

# 容器添加当前/django到/back
# 安装 python 依赖
# RUN pip install -r requirements.txt
#对外暴露端口
EXPOSE 80 8080 8000 3210
#设置环境变量
# ENV SPIDER=/back
docker image build -t djangoproject:1.0 .

2.编写docker-compose.yml

采用docker-compose的部署方式,traefik会自动申请域名的SSL证书,并监听端口(此处端口就是容器内部端口,映射端口不需要了)。

version: '3'

services:
  djangoproject:
    image: bithao/djangoproject:1.0
    # 挂载后只需修改源文件,容器会同步更新,修改后重启即可
    volumes:
      - ./django:/APP
    deploy:
      labels:
        traefik.enable: "true"
        traefik.http.services.djangoproject.loadbalancer.server.port: 8000
        traefik.http.routers.djangoproject-unsecure.rule: Host(`django.bitworkshop.cn`) 
        traefik.http.routers.djangoproject-unsecure.entrypoints: web
        traefik.http.routers.djangoproject.rule: Host(`django.bitworkshop.cn`) 
        traefik.http.routers.djangoproject.entrypoints: websecure
        traefik.http.routers.djangoproject.tls.certresolver: letsencrypt
    networks:
      - public-db
      - http-servers
    # 工作目录可以理解为进入容器的第一个目录
    working_dir: /APP
    restart: always
    command: /bin/bash /APP/config/start.sh
    # command: [python3, 'manage.py', 'runserver', '0.0.0.0:8000']


networks:
  public-db:
    external:
      name: db-net
  http-servers:
    external:
      name: traefik

docker stack deploy -c docker-compose.yml djangoproject --with-registry-auth