docker-compose搭建django+mysql开发环境

来源:互联网 发布:上海哪家java培训机构 编辑:程序博客网 时间:2024/05/22 03:15

使用docker来搭建开发环境不仅能够跟我们主机的已有的各种软件配置隔离,而且也能够很方便地分发给别人,从而使团队能够在统一的开发环境下快速开始开发、测试和部署。本文采用Docker的docker-compose来搭建python2.7+django1.7.5+mysql的web开发环境,希望可以给需要的同学参考。

1、项目目录

创建工程目录mysite

yhc@yhc-E540:~/workspaces/docker$ mkdir mysite && cd mysite

创建以下2个目录(这里为方便放置各个文件,可以根据需要自己组织,后面配置文件做相应修改即可)

yhc@yhc-E540:~/workspaces/docker/mysite$ mkdir db mysite

2、配置文件

(1)Dockerfile

Dockerfile包含创建镜像所需要的全部指令。在项目根目录下创建Dockerfile文件,其内容如下:

FROM python:2.7ENV PYTHONUNBUFFERED 1RUN mkdir /codeRUN mkdir /code/dbWORKDIR /codeADD ./mysite/requirements.txt /code/RUN pip install -r requirements.txtADD . /code/

第1行的FROM指令表示新的镜像将基于python:2.7的镜像来构建
第2行的ENV为环境变量(PYTHONUNBUFFERED见这里)
第3行的RUN指令表示在镜像内新建/code目录
第4行指定指定RUN、CMD与ENTRYPOINT命令的工作目录
第5行是将./mysite/requirements.txt文件添加到刚才新建的code目录中
第6行运行pip安装所需的软件

Dockerfile详细可以参见《Docker入门实战》
以及官方参考

(2)docker-compose.yml

之前的Dockerfile定义了一个应用,而使用compose,可以在一个文件里,定义多容器的应用。该YAML配置语言,用于描述和组装多容器的分布式应用。在项目根目录创建docker-compose.yml文件,其内容如下:

db:  image: mysql  expose:    - "3306"  volumes:    - ./db:/var/lib/mysql  environment:    - MYSQL_DATABASE=mysitedb    - MYSQL_ROOT_PASSWORD=11111111  web:  build: .  command: python ./mysite/manage.py runserver 0.0.0.0:8000  volumes:    - .:/code  ports:    - "8000:8000"  links:    - db

db标签:
images表示使用mysql镜像
expose表示暴露端口3306,但不发布到宿主机上
volume表示挂载宿主机的路径作为卷,冒号左边为宿主机路径,右边为镜像内路径
environment为环境变量,每个容器都有自己定义的环境变量,具体查看镜像手册中的mysql

web标签:
build指定建立Dockerfile路径
command将覆盖默认的命令
ports指定主机开放的端口
links指向其他容器中的服务

更多该配置文件参见这里

(3)requirements.txt

在子目录mysite下requirements.txt文件,该文件内容如下:

django==1.7.5MySQL-python

3、构建镜像

在项目根目录执行以下命令

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose builddb uses an image, skippingBuilding web...Step 0 : FROM python:2.7 ---> d833e0b23482Step 1 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> df633fc1ab0eStep 2 : RUN mkdir /code ---> Using cache ---> 49bb20e37bfcStep 3 : WORKDIR /code ---> Using cache ---> f84fca46a343Step 4 : ADD ./mysite/requirements.txt /code/ ---> e8f756bed13eRemoving intermediate container 91e677d50cd4Step 5 : RUN pip install -r requirements.txt ---> Running in 7eb86e071025Collecting django==1.7.5 (from -r requirements.txt (line 1))  Downloading Django-1.7.5-py2.py3-none-any.whl (7.4MB)Collecting MySQL-python (from -r requirements.txt (line 2))  Downloading MySQL-python-1.2.5.zip (108kB)Installing collected packages: django, MySQL-python  Running setup.py install for MySQL-pythonSuccessfully installed MySQL-python-1.2.5 django-1.7.5 ---> 3e5c9b891397Removing intermediate container 7eb86e071025Step 6 : ADD . /code/ ---> 251dea7e2af2Removing intermediate container b4b0c2b08538Successfully built 251dea7e2af2

如果本地没有python和mysql镜像的话下载需要多等待一些时间。完成之后就构建好了python+django+mysql的镜像。

4、创建django工程

执行以下命令

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose run web django-admin.py startproject mysite ./mysiteStarting dockermysite_db_1...

完成之后就在子目录mysite下创建了一个新的django工程
因为在镜像内是以root权限创建的,所以宿主机中对工程文件无法进行更改,这里修改一下权限

yhc@yhc-E540:~/workspaces/docker/mysite$ sudo chmod -R 777 mysite/

修改setttings.py文件中数据库配置

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': 'mysitedb',        'USER': 'root',        'PASSWORD': '11111111',        'HOST': 'db',        'PORT': 3306,    }}

5、运行

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose up

这里写图片描述

浏览器地址栏中输入:http://127.0.0.1:8000/
可以看到成功运行

这里写图片描述

6、打包镜像

(1)查看镜像

yhc@yhc-E540:~/workspaces/docker/mysite$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZEmysite_web          latest              251dea7e2af2        8 minutes ago       783 MBpython              2.7                 d833e0b23482        13 days ago         747.9 MBpostgres            latest              b733b00eb1ae        13 days ago         213.9 MBmysql               latest              56f320bd6adc        3 weeks ago         282.9 MB

(2)打包

yhc@yhc-E540:~/workspaces/docker/mysite$ docker save -o docker-mysite-image.tar.gz mysite_webyhc@yhc-E540:~/workspaces/docker/mysite$ lsdb  docker-compose.yml  Dockerfile  docker-mysite-image.tar.gz  mysite

最后目录如下所示

yhc@yhc-E540:~/workspaces/docker/mysite$ tree.├── db│   ├── auto.cnf│   ├── ibdata1│   ├── ib_logfile0│   ├── ib_logfile1│   ├── mysitedb [error opening dir]│   ├── mysql [error opening dir]│   └── performance_schema [error opening dir]├── docker-compose.yml├── Dockerfile├── docker-mysite-image.tar.gz└── mysite    ├── manage.py    ├── mysite    │   ├── __init__.py    │   ├── __init__.pyc    │   ├── settings.py    │   ├── settings.pyc    │   ├── urls.py    │   ├── urls.pyc    │   ├── wsgi.py    │   └── wsgi.pyc    └── requirements.txt6 directories, 17 files

7、加载镜像

​镜像打包好后就可以分发给别的其他的开发人员,只需要加载镜像即可。
这里在本机进行测试镜像的加载,首先将原来的镜像删除了

yhc@yhc-E540:~/workspaces/docker/mysite$ docker rmi -f mysite_webUntagged: mysite_web:latestDeleted: 251dea7e2af26522b9e74612163972cb0aca2ec071e7b1696d815097db105770Deleted: 3e5c9b8913971f90b4c94e8b0e04ed4dc2a09da6261fe0a9b3dffa7b0392ce92Deleted: e8f756bed13e2172a8f522b93728f6aca75795bec0bb032ba154003f4a15b440

运行看看

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose upRecreating mysite_db_1...Recreating mysite_web_1...No such image: mysite_web:latest (tag: latest)

发现无法运行了
​接下来加载镜像

yhc@yhc-E540:~/workspaces/docker/mysite$ docker load -i docker-mysite-image.tar.gz

​再次运行

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose up

​ok没问题了~

8、其他

还可以运行python shell,命令如下:

yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose run web mysite/manage.py shell

注意按照自己目录结构修改manage.py的位置

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 成为伪娘身上的毛怎么办 军官升不上去了怎么办 王者荣耀代练封号怎么办 cf淘宝代练封号怎么办 买音乐会的票过期怎么办 十年多年前被怨错拘留了怎么办 与室友关系闹僵怎么办 开庭后被告威胁我们证人怎么办 开车撞了豪车怎么办 我把人撞了全责怎么办 开车撞伤人没钱赔怎么办 开车撞伤无证驾驶人怎么办 开车把人撞伤了只买交强险怎么办 开车撞伤人赔不起怎么办 如果车撞死人了怎么办 给车撞了跑了怎么办 开车把人撞死了怎么办 开车把人蹭了怎么办 驾照被扣54分怎么办? 驾照被扣了12分怎么办 驾驶证丢失后被扣分怎么办 驾照扣了三十分怎么办 一次被扣了12分怎么办 驾照被扣35分后怎么办 我驾驶证扣了6分怎么办 c1驾照被扣6分怎么办 被扣了6分怎么办 今年扣了6分怎么办 驾照分不够扣了怎么办 被扣6分怎么办罚款15 驾照分数扣36分怎么办 驾照12分不够扣怎么办 驾照b证扣分了怎么办 违章18分不够扣怎么办 b2驾驶证扣11分怎么办 驾照一共扣30分怎么办 驾照扣了100分怎么办 驾照扣40多分怎么办 驾照被扣69分怎么办 驾照被扣200多分怎么办 b2驾照扣了分怎么办