美文网首页
Pycharm 使用 Docker 配置 Django + My

Pycharm 使用 Docker 配置 Django + My

作者: 墨墨粑粑331 | 来源:发表于2019-08-11 12:28 被阅读0次

    一、系统环境

    • 操作系统: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
    

    相关文章

      网友评论

          本文标题:Pycharm 使用 Docker 配置 Django + My

          本文链接:https://www.haomeiwen.com/subject/qemjjctx.html