docker 部署django开发环境

使用Mac来开发。主机在Google Cloud Platform上,项目的使用的是Django+Mysql+Nginx,IDE使用的是Visual Studio Code,最开始使用pyenv在开发目录上创建隔离的Python环境,pip安装的依赖包也都能被IDE智能感知到,有语法提示等等。但是在将代码推到远程服务器上以后,需要处理依赖的第三方包和一些环境变量,包括数据库初始数据等等,就想着使用docker来解决这个问题,希望能够在本地就容易和开发的环境保存到,到时候推送到远程机器上,但是学习了一些docker的相关内容以后,Python与Django相关的Demo也都练习了,打宝石还是有一些实践的问题不太清楚。
在Dockerfile指明环境镜像的配置,如下:

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN mkdir /code/db
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt 
ADD . /code/

docker-compose.yml文件如下:

version: '3'
services:
  db:
    image: mysql
    expose:
      - "3306"
    volumes:
      - ./db:/var/lib/mysql
    ports:
      - "3307:3306"
    environment:
      - MYSQL_DATABASE=myblogdb
      - MYSQL_ROOT_PASSWORD=*******

  web:
    build: .
    command: python ./mysite/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    links:
      - db

requirements.txt如下:

Django
pymysql

有如下几个问题:
1.pip安装的依赖包都在镜像里,开发的时候如何使用镜像里依赖的库和代码
2.调试的时候如何使用镜像里的Python环境
3.代码是直接包含到镜像里还是关联volume?
4.数据库该如何通过docker迁移已经存在的数据?

阅读 5.9k
1 个回答

1.在Dockerfile文件里写入代码,把你需要的依赖包在构建镜像时都安装好。
2.可以用Pycharm进行远程调试,具体操作方法一Google一把。
3.看你们团队自己定义的规范,和采取的操作方式,打包到镜像和挂载到宿主机都是可行的。如果采用镜像打包,建议结合Jenkins做一个CI,以版本号自动构建。挂载的话也可以结合Jenkins持续集成用,也可以直接git到挂载路径,上传代码就行了。另外,如果使用挂载的方式做分布式的话,还需要配置全局挂载卷。因为默认是挂载宿主机的。
4.迁移数据库这个简单,直接rsync物理盘的整个mysql目录到你挂载的目录就行了,以后就算镜像删除了,挂载的数据还是在的,直接再次挂载立马可以使用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题