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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容