docker-compose搭建django+mysql 简单的
2018-01-10 15:11
831 查看
目录结构
(1)Dockerfile
Dockerfile包含创建镜像所需要的全部指令。在项目根目录下创建
2
3
4
5
6
7
8
第1行的
第2行的
第3行的
第4行指定指定RUN、CMD与ENTRYPOINT命令的工作目录
第5行是将
第6行运行
Dockerfile详细可以参见《Docker入门实战》
以及官方参考
(2)docker-compose.yml
之前的Dockerfile定义了一个应用,而使用compose,可以在一个文件里,定义多容器的应用。该YAML配置语言,用于描述和组装多容器的分布式应用。在项目根目录创建
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
db标签:
images表示使用mysql镜像
expose表示暴露端口3306,但不发布到宿主机上
volume表示挂载宿主机的路径作为卷,冒号左边为宿主机路径,右边为镜像内路径
environment为环境变量,每个容器都有自己定义的环境变量,具体查看镜像手册中的mysql
web标签:
build指定建立Dockerfile路径
command将覆盖默认的命令
ports指定主机开放的端口
links指向其他容器中的服务
更多该配置文件参见这里
(3)requirements.txt
在子目录mysite下
2
在项目根目录执行以下命令
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
如果本地没有python和mysql镜像的话下载需要多等待一些时间。完成之后就构建好了python+django+mysql的镜像。
完成之后就在子目录mysite下创建了一个新的django工程
因为在镜像内是以root权限创建的,所以宿主机中对工程文件无法进行更改,这里修改一下权限
修改
2
3
4
5
6
7
8
9
10
浏览器地址栏中输入:http://127.0.0.1:8000/
可以看到成功运行
(1)查看镜像
2
3
4
5
6
(2)打包
2
3
最后目录如下所示
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
镜像打包好后就可以分发给别的其他的开发人员,只需要加载镜像即可。
这里在本机进行测试镜像的加载,首先将原来的镜像删除了
2
3
4
5
运行看看
2
3
4
发现无法运行了
接下来加载镜像
再次运行
ok没问题了~
还可以运行python shell,命令如下:
注意按照自己目录结构修改manage.py的位置
9。 如果出现 问题 数据库 端口别占用 或者 连接不成功
看一下 项目配置文件的设置 'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'iot',
'NAME': 'iot10',
'USER': 'root',
'PASSWORD': 'mysql',
# 'PASSWORD': '',
'HOST':'db',
'PORT':'3306',
}
端口 占用 杀死所有docker 进程 重启 在docker-compose up
2、配置文件
(1)DockerfileDockerfile包含创建镜像所需要的全部指令。在项目根目录下创建
Dockerfile文件,其内容如下:
FROM python:2.7 ENV PYTHONUNBUFFERED 1 RUN mkdir /code RUN mkdir /code/db WORKDIR /code ADD ./mysite/requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/1
2
3
4
5
6
7
8
第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: - db1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
db标签:
images表示使用mysql镜像
expose表示暴露端口3306,但不发布到宿主机上
volume表示挂载宿主机的路径作为卷,冒号左边为宿主机路径,右边为镜像内路径
environment为环境变量,每个容器都有自己定义的环境变量,具体查看镜像手册中的mysql
web标签:
build指定建立Dockerfile路径
command将覆盖默认的命令
ports指定主机开放的端口
links指向其他容器中的服务
更多该配置文件参见这里
(3)requirements.txt
在子目录mysite下
requirements.txt文件,该文件内容如下:
django==1.7.5 MySQL-python1
2
3、构建镜像
在项目根目录执行以下命令yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose build db uses an image, skipping Building web... Step 0 : FROM python:2.7 ---> d833e0b23482 Step 1 : ENV PYTHONUNBUFFERED 1 ---> Using cache ---> df633fc1ab0e Step 2 : RUN mkdir /code ---> Using cache ---> 49bb20e37bfc Step 3 : WORKDIR /code ---> Using cache ---> f84fca46a343 Step 4 : ADD ./mysite/requirements.txt /code/ ---> e8f756bed13e Removing intermediate container 91e677d50cd4 Step 5 : RUN pip install -r requirements.txt ---> Running in 7eb86e071025 Collecting 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-python Successfully installed MySQL-python-1.2.5 django-1.7.5 ---> 3e5c9b891397 Removing intermediate container 7eb86e071025 Step 6 : ADD . /code/ ---> 251dea7e2af2 Removing intermediate container b4b0c2b08538 Successfully built 251dea7e2af21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
如果本地没有python和mysql镜像的话下载需要多等待一些时间。完成之后就构建好了python+django+mysql的镜像。
4、同步数据库
执行以下命令
docker-compose run web python ./mysite/manage.py migrate
注意 要与 command 的一一致2
完成之后就在子目录mysite下创建了一个新的django工程
因为在镜像内是以root权限创建的,所以宿主机中对工程文件无法进行更改,这里修改一下权限
yhc@yhc-E540:~/workspaces/docker/mysite$ sudo chmod -R 777 mysite/1
修改
setttings.py文件中数据库配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysitedb', 'USER': 'root', 'PASSWORD': '11111111', 'HOST': 'db', 'PORT': 3306, } }1
2
3
4
5
6
7
8
9
10
5、运行
yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose up1
浏览器地址栏中输入:http://127.0.0.1:8000/
可以看到成功运行
6、打包镜像
(1)查看镜像yhc@yhc-E540:~/workspaces/docker/mysite$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mysite_web latest 251dea7e2af2 8 minutes ago 783 MB python 2.7 d833e0b23482 13 days ago 747.9 MB postgres latest b733b00eb1ae 13 days ago 213.9 MB mysql latest 56f320bd6adc 3 weeks ago 282.9 MB1
2
3
4
5
6
(2)打包
yhc@yhc-E540:~/workspaces/docker/mysite$ docker save -o docker-mysite-image.tar.gz mysite_web yhc@yhc-E540:~/workspaces/docker/mysite$ ls db docker-compose.yml Dockerfile docker-mysite-image.tar.gz mysite1
2
3
最后目录如下所示
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.txt 6 directories, 17 files1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
7、加载镜像
镜像打包好后就可以分发给别的其他的开发人员,只需要加载镜像即可。 这里在本机进行测试镜像的加载,首先将原来的镜像删除了
yhc@yhc-E540:~/workspaces/docker/mysite$ docker rmi -f mysite_web Untagged: mysite_web:latest Deleted: 251dea7e2af26522b9e74612163972cb0aca2ec071e7b1696d815097db105770 Deleted: 3e5c9b8913971f90b4c94e8b0e04ed4dc2a09da6261fe0a9b3dffa7b0392ce92 Deleted: e8f756bed13e2172a8f522b93728f6aca75795bec0bb032ba154003f4a15b4401
2
3
4
5
运行看看
yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose up Recreating mysite_db_1... Recreating mysite_web_1... No such image: mysite_web:latest (tag: latest)1
2
3
4
发现无法运行了
接下来加载镜像
yhc@yhc-E540:~/workspaces/docker/mysite$ docker load -i docker-mysite-image.tar.gz1
再次运行
yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose up1
ok没问题了~
8、其他
还可以运行python shell,命令如下:yhc@yhc-E540:~/workspaces/docker/mysite$ docker-compose run web mysite/manage.py shell1
注意按照自己目录结构修改manage.py的位置
9。 如果出现 问题 数据库 端口别占用 或者 连接不成功
看一下 项目配置文件的设置 'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'iot',
'NAME': 'iot10',
'USER': 'root',
'PASSWORD': 'mysql',
# 'PASSWORD': '',
'HOST':'db',
'PORT':'3306',
}
端口 占用 杀死所有docker 进程 重启 在docker-compose up
相关文章推荐
- docker-compose搭建django+mysql开发环境
- Django + mysql 快速搭建简单web投票系统
- Docker Compose搭建mysql主从复制
- Docker + Nodejs + Kafka + Redis + MySQL搭建简单秒杀环境
- docker-web搭建(mysql,redis,django,nginx)
- Docker之docker-compose部署django+mysql示例
- 基于docker swarm和docker-compose搭建相异宿主机上的mysql和tomcat容器
- Docker + Nodejs + Kafka + Redis + MySQL搭建简单秒杀环境
- 使用docker快速搭建MySQL主从集群
- Apache+MySQL+Python+Django在Windows下环境搭建指南
- Django:快速搭建简单的Blog
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
- php环境搭建问题(简单记录二------php5.2不加载mysql扩展)
- HIVE+mysql环境搭建及简单应用
- docker-compose搭建Nginx+Tomcat负载均衡环境
- 如何使用Docker、Docker-Compose和Rancher搭建部署Pipeline(二)
- docker应用-6(mysql+mycat 搭建数据库集群)
- mybatis+maven+mysql 项目简单搭建与junit空指针异常解决办法
- Django搭建简单网页的学习笔记之四(Form)
- Django使用-Django搭建简单博客