Update docker-compose
parent
833aa02d92
commit
4f42a0e730
|
@ -82,7 +82,7 @@
|
||||||
* [容器格式](underly/container_format.md)
|
* [容器格式](underly/container_format.md)
|
||||||
* [网络](underly/network.md)
|
* [网络](underly/network.md)
|
||||||
* [Docker 三剑客之 Compose 项目](compose/README.md)
|
* [Docker 三剑客之 Compose 项目](compose/README.md)
|
||||||
* [简介](compose/intro.md)
|
* [简介](compose/introduction.md)
|
||||||
* [安装与卸载](compose/install.md)
|
* [安装与卸载](compose/install.md)
|
||||||
* [使用](compose/usage.md)
|
* [使用](compose/usage.md)
|
||||||
* [命令说明](compose/commands.md)
|
* [命令说明](compose/commands.md)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
## 使用 Django
|
## 使用 Django
|
||||||
|
|
||||||
我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用。在此之前,先确保 Compose 已经 [安装](install.md)。
|
我们现在将使用 Docker Compose 配置并运行一个 `Django/PostgreSQL` 应用。
|
||||||
|
|
||||||
在一切工作开始前,需要先设置好三个必要的文件。
|
在一切工作开始前,需要先设置好三个必要的文件。
|
||||||
第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
FROM python:2.7
|
FROM python:2.7
|
||||||
|
@ -24,20 +24,23 @@ psycopg2
|
||||||
```
|
```
|
||||||
|
|
||||||
就是这么简单。
|
就是这么简单。
|
||||||
第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。
|
第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
db:
|
version: "3"
|
||||||
image: postgres
|
services:
|
||||||
web:
|
|
||||||
build: .
|
db:
|
||||||
command: python manage.py runserver 0.0.0.0:8000
|
image: postgres
|
||||||
volumes:
|
web:
|
||||||
- .:/code
|
build: .
|
||||||
ports:
|
command: python manage.py runserver 0.0.0.0:8000
|
||||||
- "8000:8000"
|
volumes:
|
||||||
links:
|
- .:/code
|
||||||
- db
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
links:
|
||||||
|
- db
|
||||||
```
|
```
|
||||||
查看 [`docker-compose.yml` 章节](yml_ref.md) 了解更多详细的工作机制。
|
查看 [`docker-compose.yml` 章节](yml_ref.md) 了解更多详细的工作机制。
|
||||||
|
|
||||||
|
@ -69,7 +72,7 @@ DATABASES = {
|
||||||
```
|
```
|
||||||
这些信息是在 [postgres](https://registry.hub.docker.com/_/postgres/) Docker 镜像固定设置好的。
|
这些信息是在 [postgres](https://registry.hub.docker.com/_/postgres/) Docker 镜像固定设置好的。
|
||||||
然后,运行 `docker-compose up` :
|
然后,运行 `docker-compose up` :
|
||||||
|
|
||||||
```
|
```
|
||||||
Recreating myapp_db_1...
|
Recreating myapp_db_1...
|
||||||
Recreating myapp_web_1...
|
Recreating myapp_web_1...
|
||||||
|
@ -86,7 +89,7 @@ myapp_web_1 | Django version 1.6.1, using settings 'django_example.settings'
|
||||||
myapp_web_1 | Starting development server at http://0.0.0.0:8000/
|
myapp_web_1 | Starting development server at http://0.0.0.0:8000/
|
||||||
myapp_web_1 | Quit the server with CONTROL-C.
|
myapp_web_1 | Quit the server with CONTROL-C.
|
||||||
```
|
```
|
||||||
这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。
|
这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了。
|
||||||
|
|
||||||
你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 `docker-compose up` 后,在另外一个终端运行以下命令即可:
|
你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 `docker-compose up` 后,在另外一个终端运行以下命令即可:
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
## 安装与卸载
|
## 安装与卸载
|
||||||
|
|
||||||
Compose 目前支持 Linux 和 Mac OS 平台,两者的安装过程大同小异。
|
Compose 目前支持 Linux、macOS、Windows 10 三大平台。
|
||||||
|
|
||||||
安装 Compose 之前,要先安装 Docker(需要 Docker Engine 1.7.1+),请参考第一部分中章节,在此不再赘述。
|
Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至直接运行在 Docker 容器中。
|
||||||
|
|
||||||
Compose 可以通过 Python 的 pip 工具进行安装,可以直接下载编译好的二进制文件使用,甚至直接运行在 Docker 容器中。
|
|
||||||
|
|
||||||
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
|
前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。
|
||||||
|
|
||||||
|
@ -76,7 +74,7 @@ $ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/complet
|
||||||
|
|
||||||
这些二进制文件,下载后直接放到执行路径下,并添加执行权限即可。
|
这些二进制文件,下载后直接放到执行路径下,并添加执行权限即可。
|
||||||
|
|
||||||
例如,在 Linux 平台上。
|
例如,在 Linux 和 macOS 平台上。
|
||||||
|
|
||||||
```
|
```
|
||||||
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
|
$ sudo curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
|
||||||
|
@ -161,4 +159,4 @@ $ sudo rm /usr/local/bin/docker-compose
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
$ sudo pip uninstall docker-compose
|
$ sudo pip uninstall docker-compose
|
||||||
```
|
```
|
||||||
|
|
|
@ -14,7 +14,7 @@ Compose 恰好满足了这样的需求。它允许用户通过一个单独的 `d
|
||||||
|
|
||||||
Compose 中有两个重要的概念:
|
Compose 中有两个重要的概念:
|
||||||
|
|
||||||
* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
|
* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
|
||||||
* 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。
|
* 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。
|
||||||
|
|
||||||
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
|
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
|
|
@ -1,10 +1,10 @@
|
||||||
## 使用 Rail
|
## 使用 Rail
|
||||||
|
|
||||||
我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。在开始之前,先确保 Compose 已经 [安装](install.md)。
|
我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。
|
||||||
|
|
||||||
|
|
||||||
在一切工作开始前,需要先设置好三个必要的文件。
|
在一切工作开始前,需要先设置好三个必要的文件。
|
||||||
首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
FROM ruby
|
FROM ruby
|
||||||
|
@ -24,23 +24,26 @@ gem 'rails', '4.0.2'
|
||||||
```
|
```
|
||||||
最后,`docker-compose.yml` 文件才是最神奇的地方。 `docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、每个镜像的来源(数据库运行在使用预定义的 PostgreSQL 镜像,web 应用侧将从本地目录创建)、镜像之间的连接,以及服务开放的端口。
|
最后,`docker-compose.yml` 文件才是最神奇的地方。 `docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、每个镜像的来源(数据库运行在使用预定义的 PostgreSQL 镜像,web 应用侧将从本地目录创建)、镜像之间的连接,以及服务开放的端口。
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres
|
||||||
|
ports:
|
||||||
|
- "5432"
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
command: bundle exec rackup -p 3000
|
||||||
|
volumes:
|
||||||
|
- .:/myapp
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
links:
|
||||||
|
- db
|
||||||
```
|
```
|
||||||
db:
|
所有文件就绪后,我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了。
|
||||||
image: postgres
|
|
||||||
ports:
|
|
||||||
- "5432"
|
|
||||||
web:
|
|
||||||
build: .
|
|
||||||
command: bundle exec rackup -p 3000
|
|
||||||
volumes:
|
|
||||||
- .:/myapp
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
links:
|
|
||||||
- db
|
|
||||||
```
|
|
||||||
所有文件就绪后,我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了。
|
|
||||||
|
|
||||||
```
|
```
|
||||||
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
|
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
|
||||||
```
|
```
|
||||||
|
@ -98,6 +101,6 @@ myapp_web_1 | [2014-01-17 17:16:29] INFO WEBrick::HTTPServer#start: pid=1 port=
|
||||||
```
|
```
|
||||||
$ docker-compose run web rake db:create
|
$ docker-compose run web rake db:create
|
||||||
```
|
```
|
||||||
这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。
|
这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了。
|
||||||
|
|
||||||
![](../_images/docker-compose-rails-screenshot.png)
|
![](../_images/docker-compose-rails-screenshot.png)
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
### 术语
|
### 术语
|
||||||
首先介绍几个术语。
|
首先介绍几个术语。
|
||||||
|
|
||||||
* 服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。
|
* 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。
|
||||||
* 项目(project):由一组关联的应用容器组成的一个完整业务单元。
|
* 项目 (project):由一组关联的应用容器组成的一个完整业务单元。
|
||||||
|
|
||||||
可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。
|
可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ $ touch index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Dockerfile
|
#### Dockerfile
|
||||||
生成一个 Dockerfile,内容为
|
编写 `Dockerfile` 文件,内容为
|
||||||
```bash
|
```bash
|
||||||
FROM python:2.7
|
FROM python:2.7
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
|
@ -108,7 +108,7 @@ CMD python index.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### haproxy 目录
|
### haproxy 目录
|
||||||
在其中生成一个 `haproxy.cfg` 文件,内容为
|
编写 `haproxy.cfg` 文件,内容为
|
||||||
```bash
|
```bash
|
||||||
global
|
global
|
||||||
log 127.0.0.1 local0
|
log 127.0.0.1 local0
|
||||||
|
@ -146,23 +146,25 @@ backend web_backends
|
||||||
### docker-compose.yml
|
### docker-compose.yml
|
||||||
编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。
|
编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。
|
||||||
|
|
||||||
```bash
|
```yaml
|
||||||
weba:
|
version: "3"
|
||||||
|
services:
|
||||||
|
weba:
|
||||||
build: ./web
|
build: ./web
|
||||||
expose:
|
expose:
|
||||||
- 80
|
- 80
|
||||||
|
|
||||||
webb:
|
webb:
|
||||||
build: ./web
|
build: ./web
|
||||||
expose:
|
expose:
|
||||||
- 80
|
- 80
|
||||||
|
|
||||||
webc:
|
webc:
|
||||||
build: ./web
|
build: ./web
|
||||||
expose:
|
expose:
|
||||||
- 80
|
- 80
|
||||||
|
|
||||||
haproxy:
|
haproxy:
|
||||||
image: haproxy:latest
|
image: haproxy:latest
|
||||||
volumes:
|
volumes:
|
||||||
- ./haproxy:/haproxy-override
|
- ./haproxy:/haproxy-override
|
||||||
|
@ -180,7 +182,7 @@ haproxy:
|
||||||
```
|
```
|
||||||
|
|
||||||
### 运行 compose 项目
|
### 运行 compose 项目
|
||||||
现在 compose-haproxy-web 目录长成下面的样子。
|
现在 compose-haproxy-web 目录结构如下:
|
||||||
```bash
|
```bash
|
||||||
compose-haproxy-web
|
compose-haproxy-web
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
|
|
|
@ -1,14 +1,15 @@
|
||||||
## 使用 Wordpress
|
## 使用 Wordpress
|
||||||
Compose 让 Wordpress 运行在一个独立的环境中很简易。
|
|
||||||
|
|
||||||
[安装](install.md) Compose ,然后下载 Wordpress 到当前目录:
|
Compose 可以很便捷的让 Wordpress 运行在一个独立的环境中。
|
||||||
|
|
||||||
```
|
首先下载 Wordpress 到当前目录:
|
||||||
|
|
||||||
|
```bash
|
||||||
wordpress.org/latest.tar.gz | tar -xvzf -
|
wordpress.org/latest.tar.gz | tar -xvzf -
|
||||||
```
|
```
|
||||||
这将会创建一个叫 wordpress 目录,你也可以重命名成你想要的名字。在目录里面,创建一个 `Dockerfile` 文件,定义应用的运行环境:
|
这将会创建一个叫 wordpress 目录,你也可以重命名成你想要的名字。在目录里面,创建一个 `Dockerfile` 文件,定义应用的运行环境:
|
||||||
|
|
||||||
```
|
```docker
|
||||||
FROM orchardup/php5
|
FROM orchardup/php5
|
||||||
ADD . /code
|
ADD . /code
|
||||||
```
|
```
|
||||||
|
@ -17,25 +18,28 @@ ADD . /code
|
||||||
|
|
||||||
下一步,`docker-compose.yml` 文件将开启一个 web 服务和一个独立的 MySQL 实例:
|
下一步,`docker-compose.yml` 文件将开启一个 web 服务和一个独立的 MySQL 实例:
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
web:
|
version: "3"
|
||||||
build: .
|
services:
|
||||||
command: php -S 0.0.0.0:8000 -t /code
|
|
||||||
ports:
|
web:
|
||||||
- "8000:8000"
|
build: .
|
||||||
links:
|
command: php -S 0.0.0.0:8000 -t /code
|
||||||
- db
|
ports:
|
||||||
volumes:
|
- "8000:8000"
|
||||||
- .:/code
|
links:
|
||||||
db:
|
- db
|
||||||
image: orchardup/mysql
|
volumes:
|
||||||
environment:
|
- .:/code
|
||||||
MYSQL_DATABASE: wordpress
|
db:
|
||||||
|
image: orchardup/mysql
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: wordpress
|
||||||
```
|
```
|
||||||
要让这个应用跑起来还需要两个文件。
|
要让这个应用跑起来还需要两个文件。
|
||||||
第一个,`wp-condocker-compose.php` ,它是一个标准的 Wordpress 配置文件,有一点需要修改的是把数据库的配置指向 `db` 容器。
|
第一个,`wp-condocker-compose.php` ,它是一个标准的 Wordpress 配置文件,有一点需要修改的是把数据库的配置指向 `db` 容器。
|
||||||
|
|
||||||
```
|
```php
|
||||||
<?php
|
<?php
|
||||||
define('DB_NAME', 'wordpress');
|
define('DB_NAME', 'wordpress');
|
||||||
define('DB_USER', 'root');
|
define('DB_USER', 'root');
|
||||||
|
@ -64,7 +68,7 @@ require_once(ABSPATH . 'wp-settings.php');
|
||||||
```
|
```
|
||||||
第二个,`router.php` ,它告诉 PHP 内置的服务器怎么运行 Wordpress:
|
第二个,`router.php` ,它告诉 PHP 内置的服务器怎么运行 Wordpress:
|
||||||
|
|
||||||
```
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$root = $_SERVER['DOCUMENT_ROOT'];
|
$root = $_SERVER['DOCUMENT_ROOT'];
|
||||||
|
@ -83,5 +87,4 @@ if(file_exists($root.$path))
|
||||||
}else include_once 'index.php';
|
}else include_once 'index.php';
|
||||||
```
|
```
|
||||||
|
|
||||||
这些配置文件就绪后,在你的 Wordpress 目录里面执行 `docker-compose up` 指令,Compose 就会拉取镜像再创建我们所需要的镜像,然后启动 web 和数据库容器。 接着访问 docker 守护进程监听的 8000 端口就能看你的 Wordpress 网站了。(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。
|
这些配置文件就绪后,在你的 Wordpress 目录里面执行 `docker-compose up` 指令,Compose 就会拉取镜像再创建我们所需要的镜像,然后启动 web 和数据库容器。 接着访问 docker 守护进程监听的 8000 端口就能看你的 Wordpress 网站了。
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue