mirror of
https://github.com/yeasy/docker_practice.git
synced 2025-08-02 22:11:38 +00:00
Fix #117
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
在一切工作开始前,需要先设置好三个必要的文件。
|
||||
第一步,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
||||
|
||||
```
|
||||
```docker
|
||||
FROM python:2.7
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
RUN mkdir /code
|
||||
@@ -18,7 +18,7 @@ ADD . /code/
|
||||
|
||||
第二步,在 `requirements.txt` 文件里面写明需要安装的具体依赖包名 。
|
||||
|
||||
```
|
||||
```bash
|
||||
Django
|
||||
psycopg2
|
||||
```
|
||||
@@ -46,20 +46,20 @@ services:
|
||||
|
||||
现在我们就可以使用 `docker-compose run` 命令启动一个 Django 应用了。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose run web django-admin.py startproject django_example .
|
||||
```
|
||||
Compose 会先使用 `Dockerfile` 为 web 服务创建一个镜像,接着使用这个镜像在容器里运行 `django-admin.py startproject django_example . ` 指令。
|
||||
|
||||
这将在当前目录生成一个 Django 应用。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ ls
|
||||
Dockerfile docker-compose.yml django_example manage.py requirements.txt
|
||||
```
|
||||
首先,我们要为应用设置好数据库的连接信息。用以下内容替换 `django_example/settings.py` 文件中 `DATABASES = ...` 定义的节点内容。
|
||||
|
||||
```
|
||||
```bash
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||
@@ -73,7 +73,7 @@ DATABASES = {
|
||||
这些信息是在 [postgres](https://registry.hub.docker.com/_/postgres/) Docker 镜像固定设置好的。
|
||||
然后,运行 `docker-compose up` :
|
||||
|
||||
```
|
||||
```bash
|
||||
Recreating myapp_db_1...
|
||||
Recreating myapp_web_1...
|
||||
Attaching to myapp_db_1, myapp_web_1
|
||||
@@ -93,6 +93,6 @@ myapp_web_1 | Quit the server with CONTROL-C.
|
||||
|
||||
你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 `docker-compose up` 后,在另外一个终端运行以下命令即可:
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose run web python manage.py syncdb
|
||||
```
|
||||
|
@@ -11,12 +11,12 @@ Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直
|
||||
|
||||
执行安装命令:
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ sudo pip install -U docker-compose
|
||||
```
|
||||
|
||||
可以看到类似如下输出,说明安装成功。
|
||||
```sh
|
||||
```bash
|
||||
Collecting docker-compose
|
||||
Downloading docker-compose-1.8.0.tar.gz (149kB): 149kB downloaded
|
||||
...
|
||||
@@ -24,7 +24,7 @@ Successfully installed docker-compose cached-property requests texttable websock
|
||||
```
|
||||
|
||||
安装成功后,可以查看 `docker-compose` 命令的用法。
|
||||
```sh
|
||||
```bash
|
||||
$ docker-compose -h
|
||||
Define and run multi-container applications with Docker.
|
||||
|
||||
@@ -65,7 +65,7 @@ Commands:
|
||||
|
||||
之后,可以添加 bash 补全命令。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
|
||||
```
|
||||
|
||||
@@ -76,14 +76,14 @@ $ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/complet
|
||||
|
||||
例如,在 Linux 和 macOS 平台上。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ 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 chmod a+x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
可以使用 `docker-compose version` 命令来查看版本信息,以测试是否安装成功。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ docker-compose version
|
||||
docker-compose version 1.8.0, build 94f7016
|
||||
docker-py version: 1.9.0
|
||||
@@ -95,14 +95,14 @@ OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014
|
||||
|
||||
Compose 既然是一个 Python 应用,自然也可以直接用容器来执行它。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
|
||||
$ chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
实际上,查看下载的 `run.sh` 脚本内容,如下
|
||||
|
||||
```sh
|
||||
```bash
|
||||
set -e
|
||||
|
||||
VERSION="1.8.0"
|
||||
@@ -151,12 +151,12 @@ exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES
|
||||
### 卸载
|
||||
如果是二进制包方式安装的,删除二进制文件即可。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ sudo rm /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
如果是通过 python pip 工具安装的,则可以执行如下命令删除。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
$ sudo pip uninstall docker-compose
|
||||
```
|
||||
|
@@ -6,7 +6,7 @@
|
||||
在一切工作开始前,需要先设置好三个必要的文件。
|
||||
首先,因为应用将要运行在一个满足所有环境依赖的 Docker 容器里面,那么我们可以通过编辑 `Dockerfile` 文件来指定 Docker 容器要安装内容。内容如下:
|
||||
|
||||
```
|
||||
```docker
|
||||
FROM ruby
|
||||
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
|
||||
RUN mkdir /myapp
|
||||
@@ -18,7 +18,7 @@ ADD . /myapp
|
||||
以上内容指定应用将使用安装了 Ruby、Bundler 以及其依赖件的镜像。更多关于如何编写 Dockerfile 文件的信息可以查看 [镜像创建](../image/create.md#利用 Dockerfile 来创建镜像) 和 [Dockerfile 使用](../dockerfile/README.md)。
|
||||
下一步,我们需要一个引导加载 Rails 的文件 `Gemfile` 。 等一会儿它还会被 `rails new` 命令覆盖重写。
|
||||
|
||||
```
|
||||
```bash
|
||||
source 'https://rubygems.org'
|
||||
gem 'rails', '4.0.2'
|
||||
```
|
||||
@@ -44,12 +44,12 @@ services:
|
||||
```
|
||||
所有文件就绪后,我们就可以通过使用 `docker-compose run` 命令生成应用的骨架了。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose run web rails new . --force --database=postgresql --skip-bundle
|
||||
```
|
||||
Compose 会先使用 `Dockerfile` 为 web 服务创建一个镜像,接着使用这个镜像在容器里运行 `rails new ` 和它之后的命令。一旦这个命令运行完后,应该就可以看一个崭新的应用已经生成了。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ ls
|
||||
Dockerfile app docker-compose.yml tmp
|
||||
Gemfile bin lib vendor
|
||||
@@ -59,18 +59,18 @@ Rakefile db test
|
||||
```
|
||||
在新的 `Gemfile` 文件去掉加载 `therubyracer` 的行的注释,这样我们便可以使用 Javascript 运行环境:
|
||||
|
||||
```
|
||||
```bash
|
||||
gem 'therubyracer', platforms: :ruby
|
||||
```
|
||||
现在我们已经有一个新的 `Gemfile` 文件,需要再重新创建镜像。(这个会步骤会改变 Dockerfile 文件本身,仅仅需要重建一次)。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose build
|
||||
```
|
||||
应用现在就可以启动了,但配置还未完成。Rails 默认读取的数据库目标是 `localhost` ,我们需要手动指定容器的 `db` 。同样的,还需要把用户名修改成和 postgres 镜像预定的一致。
|
||||
打开最新生成的 `database.yml` 文件。用以下内容替换:
|
||||
|
||||
```
|
||||
```bash
|
||||
development: &default
|
||||
adapter: postgresql
|
||||
encoding: unicode
|
||||
@@ -86,19 +86,19 @@ test:
|
||||
```
|
||||
现在就可以启动应用了。
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose up
|
||||
```
|
||||
如果一切正常,你应该可以看到 PostgreSQL 的输出,几秒后可以看到这样的重复信息:
|
||||
|
||||
```
|
||||
```bash
|
||||
myapp_web_1 | [2014-01-17 17:16:29] INFO WEBrick 1.3.1
|
||||
myapp_web_1 | [2014-01-17 17:16:29] INFO ruby 2.0.0 (2013-11-22) [x86_64-linux-gnu]
|
||||
myapp_web_1 | [2014-01-17 17:16:29] INFO WEBrick::HTTPServer#start: pid=1 port=3000
|
||||
```
|
||||
最后, 我们需要做的是创建数据库,打开另一个终端,运行:
|
||||
|
||||
```
|
||||
```bash
|
||||
$ docker-compose run web rake db:create
|
||||
```
|
||||
这个 web 应用已经开始在你的 docker 守护进程里面监听着 3000 端口了。
|
||||
|
@@ -66,7 +66,7 @@ cap_drop:
|
||||
|
||||
覆盖容器启动后默认执行的命令。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
command: echo "hello world"
|
||||
```
|
||||
|
||||
@@ -102,7 +102,7 @@ devices:
|
||||
|
||||
自定义 DNS 服务器。可以是一个值,也可以是一个列表。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
dns: 8.8.8.8
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
@@ -113,7 +113,7 @@ dns:
|
||||
|
||||
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
dns_search: example.com
|
||||
dns_search:
|
||||
- domain1.example.com
|
||||
@@ -137,7 +137,7 @@ dockerfile: Dockerfile-alternate
|
||||
|
||||
如果有变量名称与 `environment` 指令冲突,则按照惯例,以后者为准。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
env_file: .env
|
||||
|
||||
env_file:
|
||||
@@ -148,7 +148,7 @@ env_file:
|
||||
|
||||
环境变量文件中每一行必须符合格式,支持 `#` 开头的注释行。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
# common.env: Set development environment
|
||||
PROG_ENV=development
|
||||
```
|
||||
@@ -178,7 +178,7 @@ environment:
|
||||
|
||||
`http://yaml.org/type/bool.html` 中给出了这些特定词汇,包括
|
||||
|
||||
```sh
|
||||
```bash
|
||||
y|Y|yes|Yes|YES|n|N|no|No|NO
|
||||
|true|True|TRUE|false|False|FALSE
|
||||
|on|On|ON|off|Off|OFF
|
||||
@@ -190,7 +190,7 @@ environment:
|
||||
|
||||
仅可以指定内部端口为参数
|
||||
|
||||
```sh
|
||||
```bash
|
||||
expose:
|
||||
- "3000"
|
||||
- "8000"
|
||||
@@ -200,7 +200,7 @@ expose:
|
||||
基于其它模板文件进行扩展。
|
||||
|
||||
例如我们已经有了一个 webapp 服务,定义一个基础模板文件为 `common.yml`。
|
||||
```sh
|
||||
```bash
|
||||
# common.yml
|
||||
webapp:
|
||||
build: ./webapp
|
||||
@@ -210,7 +210,7 @@ webapp:
|
||||
```
|
||||
|
||||
再编写一个新的 `development.yml` 文件,使用 `common.yml` 中的 webapp 服务进行扩展。
|
||||
```sh
|
||||
```bash
|
||||
# development.yml
|
||||
web:
|
||||
extends:
|
||||
@@ -255,7 +255,7 @@ extra_hosts:
|
||||
```
|
||||
|
||||
会在启动后的服务容器中 `/etc/hosts` 文件中添加如下两条条目。
|
||||
```sh
|
||||
```bash
|
||||
8.8.8.8 googledns
|
||||
52.1.157.61 dockerhub
|
||||
```
|
||||
@@ -265,7 +265,7 @@ extra_hosts:
|
||||
指定为镜像名称或镜像 ID。如果镜像在本地不存在,`Compose` 将会尝试拉去这个镜像。
|
||||
|
||||
例如:
|
||||
```sh
|
||||
```bash
|
||||
image: ubuntu
|
||||
image: orchardup/postgresql
|
||||
image: a4bc65fd
|
||||
@@ -284,7 +284,7 @@ labels:
|
||||
|
||||
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 `(SERVICE:ALIAS)` 格式都可以。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
links:
|
||||
- db
|
||||
- db:database
|
||||
@@ -293,7 +293,7 @@ links:
|
||||
|
||||
使用的别名将会自动在服务容器中的 `/etc/hosts` 里创建。例如:
|
||||
|
||||
```sh
|
||||
```bash
|
||||
172.17.2.186 db
|
||||
172.17.2.186 database
|
||||
172.17.2.187 redis
|
||||
@@ -326,7 +326,7 @@ log_opt:
|
||||
|
||||
设置网络模式。使用和 `docker client` 的 `--net` 参数一样的值。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
net: "bridge"
|
||||
net: "none"
|
||||
net: "container:[name or id]"
|
||||
@@ -336,7 +336,7 @@ net: "host"
|
||||
### `pid`
|
||||
跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
pid: "host"
|
||||
```
|
||||
|
||||
@@ -409,7 +409,7 @@ volume_driver: mydriver
|
||||
|
||||
从另一个服务或容器挂载它的数据卷。
|
||||
|
||||
```sh
|
||||
```bash
|
||||
volumes_from:
|
||||
- service_name
|
||||
- container_name
|
||||
@@ -493,4 +493,4 @@ db:
|
||||
image: "mongo:${MONGO_VERSION}"
|
||||
```
|
||||
|
||||
如果执行 `MONGO_VERSION=3.0 docker-compose up` 则会启动一个 `mongo:3.2` 镜像的容器;如果执行 `MONGO_VERSION=2.8 docker-compose up` 则会启动一个 `mongo:2.8` 镜像的容器。
|
||||
如果执行 `MONGO_VERSION=3.0 docker-compose up` 则会启动一个 `mongo:3.2` 镜像的容器;如果执行 `MONGO_VERSION=2.8 docker-compose up` 则会启动一个 `mongo:2.8` 镜像的容器。
|
||||
|
Reference in New Issue
Block a user