Update docker-compose

pull/204/head
khs1994 2017-11-01 00:20:30 +08:00
parent 833aa02d92
commit 4f42a0e730
7 changed files with 85 additions and 76 deletions

View File

@ -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)

View File

@ -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` 后,在另外一个终端运行以下命令即可:

View File

@ -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
``` ```

View File

@ -14,7 +14,7 @@ Compose 恰好满足了这样的需求。它允许用户通过一个单独的 `d
Compose 中有两个重要的概念: Compose 中有两个重要的概念:
* 服务service:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 * 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
* 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。 * 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。
Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。

View File

@ -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)

View File

@ -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

View File

@ -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 网站了。