diff --git a/SUMMARY.md b/SUMMARY.md index 3489ec7..88529c8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -82,7 +82,7 @@ * [容器格式](underly/container_format.md) * [网络](underly/network.md) * [Docker 三剑客之 Compose 项目](compose/README.md) - * [简介](compose/intro.md) + * [简介](compose/introduction.md) * [安装与卸载](compose/install.md) * [使用](compose/usage.md) * [命令说明](compose/commands.md) diff --git a/compose/django.md b/compose/django.md index 0214643..b5101be 100644 --- a/compose/django.md +++ b/compose/django.md @@ -1,9 +1,9 @@ ## 使用 Django -我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用。在此之前,先确保 Compose 已经 [安装](install.md)。 +我们现在将使用 Docker Compose 配置并运行一个 `Django/PostgreSQL` 应用。 在一切工作开始前,需要先设置好三个必要的文件。 -第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: +第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: ``` FROM python:2.7 @@ -24,20 +24,23 @@ psycopg2 ``` 就是这么简单。 -第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。 +第三步,`docker-compose.yml` 文件将把所有的东西关联起来。它描述了应用的构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂载到容器的卷,以及服务开放的端口。 -``` -db: - image: postgres -web: - build: . - command: python manage.py runserver 0.0.0.0:8000 - volumes: - - .:/code - ports: - - "8000:8000" - links: - - db +```yaml +version: "3" +services: + + db: + image: postgres + web: + build: . + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/code + ports: + - "8000:8000" + links: + - db ``` 查看 [`docker-compose.yml` 章节](yml_ref.md) 了解更多详细的工作机制。 @@ -69,7 +72,7 @@ DATABASES = { ``` 这些信息是在 [postgres](https://registry.hub.docker.com/_/postgres/) Docker 镜像固定设置好的。 然后,运行 `docker-compose up` : - + ``` Recreating myapp_db_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 | Quit the server with CONTROL-C. ``` -这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。 +这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了。 你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 `docker-compose up` 后,在另外一个终端运行以下命令即可: diff --git a/compose/install.md b/compose/install.md index da2c9ff..0d2f29a 100644 --- a/compose/install.md +++ b/compose/install.md @@ -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 @@ -161,4 +159,4 @@ $ sudo rm /usr/local/bin/docker-compose ```sh $ sudo pip uninstall docker-compose -``` \ No newline at end of file +``` diff --git a/compose/intro.md b/compose/introduction.md similarity index 93% rename from compose/intro.md rename to compose/introduction.md index 3399434..2b4254c 100644 --- a/compose/intro.md +++ b/compose/introduction.md @@ -14,7 +14,7 @@ Compose 恰好满足了这样的需求。它允许用户通过一个单独的 `d Compose 中有两个重要的概念: -* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 +* 服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。 * 项目(project):由一组关联的应用容器组成的一个完整业务单元,在 `docker-compose.yml` 文件中定义。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。 diff --git a/compose/rails.md b/compose/rails.md index 7625a8d..3fdc9a3 100644 --- a/compose/rails.md +++ b/compose/rails.md @@ -1,10 +1,10 @@ ## 使用 Rail -我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。在开始之前,先确保 Compose 已经 [安装](install.md)。 +我们现在将使用 Compose 配置并运行一个 Rails/PostgreSQL 应用。 在一切工作开始前,需要先设置好三个必要的文件。 -首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: +首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下: ``` FROM ruby @@ -24,23 +24,26 @@ gem 'rails', '4.0.2' ``` 最后,`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: - 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` 命令生成应用的骨架了。 + ``` $ 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 ``` -这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了(如果你有使用 boot2docker ,执行 `boot2docker ip` ,就会看到它的地址)。 +这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了。 ![](../_images/docker-compose-rails-screenshot.png) diff --git a/compose/usage.md b/compose/usage.md index 76c5c05..769261b 100644 --- a/compose/usage.md +++ b/compose/usage.md @@ -3,8 +3,8 @@ ### 术语 首先介绍几个术语。 -* 服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。 -* 项目(project):由一组关联的应用容器组成的一个完整业务单元。 +* 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。 +* 项目 (project):由一组关联的应用容器组成的一个完整业务单元。 可见,一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理。 @@ -98,7 +98,7 @@ $ touch index.html ``` #### Dockerfile -生成一个 Dockerfile,内容为 +编写 `Dockerfile` 文件,内容为 ```bash FROM python:2.7 WORKDIR /code @@ -108,7 +108,7 @@ CMD python index.py ``` ### haproxy 目录 -在其中生成一个 `haproxy.cfg` 文件,内容为 +编写 `haproxy.cfg` 文件,内容为 ```bash global log 127.0.0.1 local0 @@ -146,23 +146,25 @@ backend web_backends ### docker-compose.yml 编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。内容十分简单,指定 3 个 web 容器,以及 1 个 haproxy 容器。 -```bash -weba: +```yaml +version: "3" +services: + weba: build: ./web expose: - 80 -webb: + webb: build: ./web expose: - 80 -webc: + webc: build: ./web expose: - 80 -haproxy: + haproxy: image: haproxy:latest volumes: - ./haproxy:/haproxy-override @@ -180,7 +182,7 @@ haproxy: ``` ### 运行 compose 项目 -现在 compose-haproxy-web 目录长成下面的样子。 +现在 compose-haproxy-web 目录结构如下: ```bash compose-haproxy-web ├── docker-compose.yml diff --git a/compose/wordpress.md b/compose/wordpress.md index e3d05f4..227377a 100644 --- a/compose/wordpress.md +++ b/compose/wordpress.md @@ -1,14 +1,15 @@ ## 使用 Wordpress -Compose 让 Wordpress 运行在一个独立的环境中很简易。 -[安装](install.md) Compose ,然后下载 Wordpress 到当前目录: +Compose 可以很便捷的让 Wordpress 运行在一个独立的环境中。 -``` +首先下载 Wordpress 到当前目录: + +```bash wordpress.org/latest.tar.gz | tar -xvzf - ``` 这将会创建一个叫 wordpress 目录,你也可以重命名成你想要的名字。在目录里面,创建一个 `Dockerfile` 文件,定义应用的运行环境: -``` +```docker FROM orchardup/php5 ADD . /code ``` @@ -17,25 +18,28 @@ ADD . /code 下一步,`docker-compose.yml` 文件将开启一个 web 服务和一个独立的 MySQL 实例: -``` -web: - build: . - command: php -S 0.0.0.0:8000 -t /code - ports: - - "8000:8000" - links: - - db - volumes: - - .:/code -db: - image: orchardup/mysql - environment: - MYSQL_DATABASE: wordpress +```yaml +version: "3" +services: + + web: + build: . + command: php -S 0.0.0.0:8000 -t /code + ports: + - "8000:8000" + links: + - db + volumes: + - .:/code + db: + image: orchardup/mysql + environment: + MYSQL_DATABASE: wordpress ``` 要让这个应用跑起来还需要两个文件。 第一个,`wp-condocker-compose.php` ,它是一个标准的 Wordpress 配置文件,有一点需要修改的是把数据库的配置指向 `db` 容器。 -``` +```php