# 基础镜像
FROM python:3.6-slim
LABEL author="xiaoqiao99"
# 替换源
RUN sed -i s/deb.debian.org/mirrors.aliyun.com/g /etc/apt/sources.list
RUN sed -i s/security.debian.org/mirrors.aliyun.com/g /etc/apt/sources.list
RUN apt-get update
#mysql-client 依赖
RUN apt-get install -y default-libmysqlclient-dev gcc
# 远程(开发使用)
RUN apt-get install -y openssh-server openssh-client && \
echo root:123456 | chpasswd && \
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
RUN apt-get clean
#定义时区参数
ENV TZ=Asia/Shanghai
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
#print()时在控制台正常显示中文
ENV PYTHONIOENCODING=utf-8
RUN mkdir -p ~/.pip && mkdir -p /etc/supervisor && mkdir -p /opt/project/logs && mkdir -p /run/sshd
# pip源
RUN echo "[global]" >> ~/.pip/pip.conf
RUN echo "trusted-host=mirrors.aliyun.com" >> ~/.pip/pip.conf
RUN echo "index-url=http://mirrors.aliyun.com/pypi/simple/" >> ~/.pip/pip.conf
# supervisor_conf 进程管理
RUN pip install supervisor
RUN /usr/local/bin/echo_supervisord_conf > /etc/supervisor/supervisord.conf
RUN echo "[include]">>/etc/supervisor/supervisord.conf
RUN echo "files = /etc/supervisor/*.ini">>/etc/supervisor/supervisord.conf
# 拷贝项目进程文件
COPY deploy/supervisor_conf /etc/supervisor
WORKDIR /opt/project
#项目依赖
COPY requirements.txt /opt/project
RUN pip install -r requirements.txt
# 启动
#EXPOSE 8000 22
#CMD ["supervisord","-n","-c","/etc/supervisor/supervisord.conf"]
sshd.ini 内容如下:
[program:sshd]
# 执行用户
;user = root
# 执行的命令
command = /usr/sbin/sshd -D
# 日志文件配置
;loglevel = info
;stdout_logfile = /opt/project/logs/ssh.log
;stderr_logfile = /opt/project/logs/ssh_error.log
;stdout_logfile_maxbytes = 100MB
;stdout_logfile_backups = 3
# 给每个进程命名,便于管理
;process_name = ssh_worker%(process_num)s
# 启动的进程数,设置成云服务器的vCPU数
numprocs_start = 1
numprocs = 1
# 设置自启和重启
autostart = true
autorestart = true
;redirect_stderr = True
docker-compose.yml
version: "3"
services:
app:
restart: always
build: .
command: bash -c "supervisord -n -c /etc/supervisor/supervisord.conf"
container_name: dj_app
volumes:
- .:/opt/project/dj_server
ports:
- "9022:22"
- "9001:8000"
depends_on:
- db
- redis
networks:
- db_network
db:
image: mysql:5.7
container_name: dj_mysql
volumes:
- "./mysql:/var/lib/mysql"
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=dj_server
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
networks:
- db_network
redis:
image: redis:alpine
container_name: dj_redis
ports:
- "6379:6379"
restart: always
networks:
- db_network
networks:
db_network:
driver: bridge