Pycharm 使用 Docker 配置 Django + MySQL 开发环境

一、系统环境

  • 操作系统:deepin 15.10.2 桌面版 64位
  • Pycharm:PyCharm Professional 2019.1.2(必须是专业版,社区版不提供远程服务)
  • Docker:Docker CE 18.09.6

二、镜像准备

  • 系统用户加入 docker 组,这样不用sudo也能运行 docker 指令了,同时避免系统用户运行 Pycharm 连接 Docker 时的权限问题
sudo usermod -aG docker [USER] # 重启系统后生效
  • 拉取镜像
docker pull python:latest
docker pull mysql:5.7
  • 创建 docker 容器
# 在本地创建 mysql 容器需要挂载的目录
mkdir -p /my/mysql/conf
mkdir -p /my/mysql/data
mkdir -p /my/mysql/logs

# 在本地 /my/mysql/conf 目录下配置 mysqld.cnf 文件
vi mysqld.cnf
# 输入以下内容,并保存退出
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

# 创建 mysql 容器
docker run --name mysql \
-v /my/mysql/conf:/etc/mysql/mysql.conf.d \
-v /my/mysql/data:/var/lib/mysql \
-v /my/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

# 创建 python 容器
docker run --name python -p 8000:8000 -p 8022:22 --link=mysql:mysql -it python /bin/bash

# --­­name 指定容器名,名称自定义,如果不指定会自动命名
# ­-i 以交互模式运行容器;-­t 分配一个伪终端,即命令行,通常组合使用­ -it
# -p 指定端口映射,将主机端口映射到容器内的端口,一定要留一个端口映射到 22 端口,因为 SFTP 默认使用 22 端口
# -e 设置环境变量参数,此处设置 mysql 的 root 密码
# ­-d 以后台运行,即守护式运行容器
# --link 实现 python 容器与 mysql 容器的通信,格式:--link=[容器名]:[别名],相当于更改 python 容器的 /etc/hosts 配置文件
# ­创建 python 容器时,建议不要使用 -v 挂载主机目录到容器目录,不然在用 Pycharm 开发项目过程中会遇到比较头疼的权限问题,目前我没有较好的解决办法,路过的朋友可以留言提供思路和方法
# 创建 mysql 容器时,-v 挂载数据库的配置(conf)、数据(data)和日志(logs)文件
  • 配置 SSH 服务(python 容器内)
# 更换 apt 源(根据镜像的 Linux 系统情况进行配置),不然下载安装会很慢
sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# 下载安装 openssh-server
apt update
apt install -y openssh-server

# 下载安装 sudo,不然用 Pycharm 创建 Django 项目时会报错
apt install -y sudo

# 设置 root 用户密码
echo 'root:[passwd]' | chpasswd # passwd 为你想设置密码

# 修改配置文件
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config # 注意在 PermitRootLogin 前加 #,因为 sshd_config 文件里该参数是被注释的
sed 's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
echo "export VISIBLE=now" >> /etc/profile

# 重启 SSH 激活配置
service ssh restart

# 创建项目目录,为后续本地项目目录与容器内项目目录的映射
mkdir /mysite

# 创建 pip 源配置文件的目录,为后续更换 pip 源准备
mkdir /root/.pip

# 退出 python 容器,在本地编辑并拷贝 pip.conf 源配置文件至容器内
vi pip.conf
# 输入以下内容,并保存退出
[global]
index-url = https://mirrors.aliyun.com/pypi/simple
# 将 pip.conf 文件拷贝至容器
docker cp pip.conf python:/root/.pip
# 进入 python 容器,升级 pip
docker exec -it python /bin/bash
pip install -U pip

以上操作可以编辑 Dockerfile 文件,执行docker build -f [Dockerfile 文件路径] -t [镜像名]:[标签] [命令执行上下文]指令生成新的镜像

FROM python
MAINTAINER xxxxxxxxx@qq.com
ENV MYPATH /mysite
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt update
RUN apt install -y sudo
RUN apt install -y openssh-server
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN echo "export VISIBLE=now" >> /etc/profile
RUN mkdir $MYPATH
RUN mkdir /root/.pip
COPY pip.conf /root/.pip
RUN pip install -U pip
WORKDIR $MYPATH
CMD ["/bin/bash"]

执行以下指令生成新的镜像,-f [Dockerfile 文件路径] -t [镜像名]:[标签] 参数根据自己情况设定

docker build -f dockerfile -t lnn/python:1.0 .

最后别忘了创建容器,并进入容器内执行service ssh restart

  • 创建数据库(mysql 容器内)
# 进入 mysql 容器终端
docker exec -it mysql /bin/bash
# 创建数据库
mysql -uroot -p # 输入密码登录 mysql
create database [db name]; # 为后续 django 项目准备

# 顺便查看以下字符集是否设置成功
show variables like "char%";
# 出现以下配置表示成功
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

三、PyCharm 配置部署环境

  • File > New Project






  • File > Settings > Project Interpreter,项目解释器界面如下图所示,此时已经完成远程解释器的本地化:


  • 本地测试启动 Django 服务





在浏览器打开:127.0.0.1:8000


  • Tools > Start SSH session,可以在 Docker 环境中执行命令
  • 点击底端的 Python Console,使用远程 Docker 环境中的 Python
  • Tools > Deployment > Upload/Download,实现主机与容器间的数据上传/下传
  • 配置 django 项目 settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'sms', # sms 为之前在 mysql 容器中创建的数据库
        'HOST': 'mysql', # mysql 为之前创建 python 容器时,--link 设置的 mysql 容器 ip 的别名
        'USER': 'root',
        'PASSWORD': 'root',
        'PORT': '3306',
    }
}

可以尝试进行数据迁移测试配置是否成功,测试前别忘了pip install mysqlclient,并在__init__.py文件中import MySQLdb

四、需要注意的问题

docker 容器停止后,容器内的 SSH 服务也会相应停止,容器重启后需要进到容器内重启 ssh 服务:

service ssh restart
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容