Pycharm 使用 Docker 配置 Django + My

2019-08-11  本文已影响0人  墨墨粑粑331

一、系统环境

二、镜像准备

sudo usermod -aG docker [USER] # 重启系统后生效
docker pull python:latest
docker pull mysql:5.7
# 在本地创建 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)文件
# 更换 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 容器终端
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 配置部署环境

在浏览器打开:127.0.0.1:8000


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
上一篇下一篇

猜你喜欢

热点阅读