parent
d8be8f15a9
commit
df94a6e1fb
|
@ -5,7 +5,7 @@
|
||||||
执行 `docker-compose [COMMAND] --help` 查看具体某个命令的使用说明。
|
执行 `docker-compose [COMMAND] --help` 查看具体某个命令的使用说明。
|
||||||
|
|
||||||
基本的使用格式是
|
基本的使用格式是
|
||||||
```sh
|
```bash
|
||||||
docker-compose [options] [COMMAND] [ARGS...]
|
docker-compose [options] [COMMAND] [ARGS...]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ docker-compose [options] [COMMAND] [ARGS...]
|
||||||
### `kill`
|
### `kill`
|
||||||
|
|
||||||
通过发送 `SIGKILL` 信号来强制停止服务容器。支持通过参数来指定发送的信号,例如
|
通过发送 `SIGKILL` 信号来强制停止服务容器。支持通过参数来指定发送的信号,例如
|
||||||
```sh
|
```bash
|
||||||
$ docker-compose kill -s SIGINT
|
$ docker-compose kill -s SIGINT
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -6,12 +6,12 @@
|
||||||
这种方式最为推荐。
|
这种方式最为推荐。
|
||||||
|
|
||||||
执行命令。
|
执行命令。
|
||||||
```sh
|
```bash
|
||||||
$ sudo pip install -U docker-compose
|
$ sudo pip install -U docker-compose
|
||||||
```
|
```
|
||||||
|
|
||||||
安装成功后,可以查看 `docker-compose` 命令的用法。
|
安装成功后,可以查看 `docker-compose` 命令的用法。
|
||||||
```sh
|
```bash
|
||||||
$ docker-compose -h
|
$ docker-compose -h
|
||||||
Fast, isolated development environments using Docker.
|
Fast, isolated development environments using Docker.
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Commands:
|
||||||
```
|
```
|
||||||
|
|
||||||
之后,可以添加 bash 补全命令。
|
之后,可以添加 bash 补全命令。
|
||||||
```sh
|
```bash
|
||||||
$ curl -L https://raw.githubusercontent.com/docker/compose/1.2.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
|
$ curl -L https://raw.githubusercontent.com/docker/compose/1.2.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
#### index.py
|
#### index.py
|
||||||
|
|
||||||
编写一个 `index.py` 作为服务器文件,代码为
|
编写一个 `index.py` 作为服务器文件,代码为
|
||||||
```sh
|
```bash
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#authors: yeasy.github.com
|
#authors: yeasy.github.com
|
||||||
#date: 2013-07-05
|
#date: 2013-07-05
|
||||||
|
@ -93,13 +93,13 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
#### index.html
|
#### index.html
|
||||||
生成一个临时的 `index.html` 文件,其内容会被 index.py 更新。
|
生成一个临时的 `index.html` 文件,其内容会被 index.py 更新。
|
||||||
```sh
|
```bash
|
||||||
$ touch index.html
|
$ touch index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Dockerfile
|
#### Dockerfile
|
||||||
生成一个 Dockerfile,内容为
|
生成一个 Dockerfile,内容为
|
||||||
```sh
|
```bash
|
||||||
FROM python:2.7
|
FROM python:2.7
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
ADD . /code
|
ADD . /code
|
||||||
|
@ -109,7 +109,7 @@ CMD python index.py
|
||||||
|
|
||||||
### haproxy 目录
|
### haproxy 目录
|
||||||
在其中生成一个 `haproxy.cfg` 文件,内容为
|
在其中生成一个 `haproxy.cfg` 文件,内容为
|
||||||
```sh
|
```bash
|
||||||
global
|
global
|
||||||
log 127.0.0.1 local0
|
log 127.0.0.1 local0
|
||||||
log 127.0.0.1 local1 notice
|
log 127.0.0.1 local1 notice
|
||||||
|
@ -146,7 +146,7 @@ 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 容器。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
weba:
|
weba:
|
||||||
build: ./web
|
build: ./web
|
||||||
expose:
|
expose:
|
||||||
|
@ -181,7 +181,7 @@ haproxy:
|
||||||
|
|
||||||
### 运行 compose 项目
|
### 运行 compose 项目
|
||||||
现在 compose-haproxy-web 目录长成下面的样子。
|
现在 compose-haproxy-web 目录长成下面的样子。
|
||||||
```sh
|
```bash
|
||||||
compose-haproxy-web
|
compose-haproxy-web
|
||||||
├── docker-compose.yml
|
├── docker-compose.yml
|
||||||
├── haproxy
|
├── haproxy
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
指定为镜像名称或镜像 ID。如果镜像在本地不存在,`Compose` 将会尝试拉去这个镜像。
|
指定为镜像名称或镜像 ID。如果镜像在本地不存在,`Compose` 将会尝试拉去这个镜像。
|
||||||
|
|
||||||
例如:
|
例如:
|
||||||
```sh
|
```bash
|
||||||
image: ubuntu
|
image: ubuntu
|
||||||
image: orchardup/postgresql
|
image: orchardup/postgresql
|
||||||
image: a4bc65fd
|
image: a4bc65fd
|
||||||
|
@ -29,7 +29,7 @@ build: /path/to/build/dir
|
||||||
|
|
||||||
覆盖容器启动后默认执行的命令。
|
覆盖容器启动后默认执行的命令。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
command: bundle exec thin -p 3000
|
command: bundle exec thin -p 3000
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ command: bundle exec thin -p 3000
|
||||||
|
|
||||||
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 `(SERVICE:ALIAS)` 格式都可以。
|
链接到其它服务中的容器。使用服务名称(同时作为别名)或服务名称:服务别名 `(SERVICE:ALIAS)` 格式都可以。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
links:
|
links:
|
||||||
- db
|
- db
|
||||||
- db:database
|
- db:database
|
||||||
|
@ -46,7 +46,7 @@ links:
|
||||||
|
|
||||||
使用的别名将会自动在服务容器中的 `/etc/hosts` 里创建。例如:
|
使用的别名将会自动在服务容器中的 `/etc/hosts` 里创建。例如:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
172.17.2.186 db
|
172.17.2.186 db
|
||||||
172.17.2.186 database
|
172.17.2.186 database
|
||||||
172.17.2.187 redis
|
172.17.2.187 redis
|
||||||
|
@ -88,7 +88,7 @@ ports:
|
||||||
|
|
||||||
仅可以指定内部端口为参数
|
仅可以指定内部端口为参数
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
expose:
|
expose:
|
||||||
- "3000"
|
- "3000"
|
||||||
- "8000"
|
- "8000"
|
||||||
|
@ -98,7 +98,7 @@ expose:
|
||||||
|
|
||||||
卷挂载路径设置。可以设置宿主机路径 (`HOST:CONTAINER`) 或加上访问模式 (`HOST:CONTAINER:ro`)。
|
卷挂载路径设置。可以设置宿主机路径 (`HOST:CONTAINER`) 或加上访问模式 (`HOST:CONTAINER:ro`)。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/mysql
|
- /var/lib/mysql
|
||||||
- cache/:/tmp/cache
|
- cache/:/tmp/cache
|
||||||
|
@ -109,7 +109,7 @@ volumes:
|
||||||
|
|
||||||
从另一个服务或容器挂载它的所有卷。
|
从另一个服务或容器挂载它的所有卷。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
volumes_from:
|
volumes_from:
|
||||||
- service_name
|
- service_name
|
||||||
- container_name
|
- container_name
|
||||||
|
@ -138,7 +138,7 @@ environment:
|
||||||
|
|
||||||
如果有变量名称与 `environment` 指令冲突,则以后者为准。
|
如果有变量名称与 `environment` 指令冲突,则以后者为准。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
env_file: .env
|
env_file: .env
|
||||||
|
|
||||||
env_file:
|
env_file:
|
||||||
|
@ -149,14 +149,14 @@ env_file:
|
||||||
|
|
||||||
环境变量文件中每一行必须符合格式,支持 `#` 开头的注释行。
|
环境变量文件中每一行必须符合格式,支持 `#` 开头的注释行。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# common.env: Set Rails/Rack environment
|
# common.env: Set Rails/Rack environment
|
||||||
RACK_ENV=development
|
RACK_ENV=development
|
||||||
```
|
```
|
||||||
|
|
||||||
### `extends`
|
### `extends`
|
||||||
基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为 `common.yml`。
|
基于已有的服务进行扩展。例如我们已经有了一个 webapp 服务,模板文件为 `common.yml`。
|
||||||
```sh
|
```bash
|
||||||
# common.yml
|
# common.yml
|
||||||
webapp:
|
webapp:
|
||||||
build: ./webapp
|
build: ./webapp
|
||||||
|
@ -166,7 +166,7 @@ webapp:
|
||||||
```
|
```
|
||||||
|
|
||||||
编写一个新的 `development.yml` 文件,使用 `common.yml` 中的 webapp 服务进行扩展。
|
编写一个新的 `development.yml` 文件,使用 `common.yml` 中的 webapp 服务进行扩展。
|
||||||
```sh
|
```bash
|
||||||
# development.yml
|
# development.yml
|
||||||
web:
|
web:
|
||||||
extends:
|
extends:
|
||||||
|
@ -188,7 +188,7 @@ db:
|
||||||
|
|
||||||
设置网络模式。使用和 `docker client` 的 `--net` 参数一样的值。
|
设置网络模式。使用和 `docker client` 的 `--net` 参数一样的值。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
net: "bridge"
|
net: "bridge"
|
||||||
net: "none"
|
net: "none"
|
||||||
net: "container:[name or id]"
|
net: "container:[name or id]"
|
||||||
|
@ -198,7 +198,7 @@ net: "host"
|
||||||
### `pid`
|
### `pid`
|
||||||
跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。
|
跟主机系统共享进程命名空间。打开该选项的容器可以相互通过进程 ID 来访问和操作。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
pid: "host"
|
pid: "host"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ pid: "host"
|
||||||
|
|
||||||
配置 DNS 服务器。可以是一个值,也可以是一个列表。
|
配置 DNS 服务器。可以是一个值,也可以是一个列表。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
dns: 8.8.8.8
|
dns: 8.8.8.8
|
||||||
dns:
|
dns:
|
||||||
- 8.8.8.8
|
- 8.8.8.8
|
||||||
|
@ -215,7 +215,7 @@ dns:
|
||||||
|
|
||||||
### `cap_add, cap_drop`
|
### `cap_add, cap_drop`
|
||||||
添加或放弃容器的 Linux 能力(Capabiliity)。
|
添加或放弃容器的 Linux 能力(Capabiliity)。
|
||||||
```sh
|
```bash
|
||||||
cap_add:
|
cap_add:
|
||||||
- ALL
|
- ALL
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ cap_drop:
|
||||||
|
|
||||||
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
|
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
dns_search: example.com
|
dns_search: example.com
|
||||||
dns_search:
|
dns_search:
|
||||||
- domain1.example.com
|
- domain1.example.com
|
||||||
|
|
|
@ -10,7 +10,7 @@ Docker 需要安装在 64 位的平台,并且内核版本不低于 3.10。 Cen
|
||||||
|
|
||||||
Docker 官方为了简化安装流程,提供了一套安装脚本,CentOS 系统上可以使用这套脚本安装:
|
Docker 官方为了简化安装流程,提供了一套安装脚本,CentOS 系统上可以使用这套脚本安装:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.docker.com/ | sh
|
curl -sSL https://get.docker.com/ | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,13 +20,13 @@ curl -sSL https://get.docker.com/ | sh
|
||||||
|
|
||||||
#### 阿里云的安装脚本
|
#### 阿里云的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
||||||
```
|
```
|
||||||
|
|
||||||
#### DaoCloud 的安装脚本
|
#### DaoCloud 的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.daocloud.io/docker | sh
|
curl -sSL https://get.daocloud.io/docker | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -36,14 +36,14 @@ curl -sSL https://get.daocloud.io/docker | sh
|
||||||
|
|
||||||
默认配置下,在 CentOS 使用 Docker 可能会碰到下面的这些警告信息:
|
默认配置下,在 CentOS 使用 Docker 可能会碰到下面的这些警告信息:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
WARNING: bridge-nf-call-iptables is disabled
|
WARNING: bridge-nf-call-iptables is disabled
|
||||||
WARNING: bridge-nf-call-ip6tables is disabled
|
WARNING: bridge-nf-call-ip6tables is disabled
|
||||||
```
|
```
|
||||||
|
|
||||||
添加内核配置参数以启用这些功能。
|
添加内核配置参数以启用这些功能。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo tee -a /etc/sysctl.conf <<-EOF
|
$ sudo tee -a /etc/sysctl.conf <<-EOF
|
||||||
net.bridge.bridge-nf-call-ip6tables = 1
|
net.bridge.bridge-nf-call-ip6tables = 1
|
||||||
net.bridge.bridge-nf-call-iptables = 1
|
net.bridge.bridge-nf-call-iptables = 1
|
||||||
|
@ -52,7 +52,7 @@ EOF
|
||||||
|
|
||||||
然后重新加载 `sysctl.conf` 即可
|
然后重新加载 `sysctl.conf` 即可
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo sysctl -p
|
$ sudo sysctl -p
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ $ sudo sysctl -p
|
||||||
|
|
||||||
执行下面的命令添加 `yum` 软件源。
|
执行下面的命令添加 `yum` 软件源。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
|
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
|
||||||
[dockerrepo]
|
[dockerrepo]
|
||||||
name=Docker Repository
|
name=Docker Repository
|
||||||
|
@ -77,14 +77,14 @@ EOF
|
||||||
|
|
||||||
更新 `yum` 软件源缓存,并安装 `docker-engine`。
|
更新 `yum` 软件源缓存,并安装 `docker-engine`。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo yum update
|
$ sudo yum update
|
||||||
$ sudo yum install docker-engine
|
$ sudo yum install docker-engine
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 启动 Docker 引擎
|
#### 启动 Docker 引擎
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo systemctl enable docker
|
$ sudo systemctl enable docker
|
||||||
$ sudo systemctl start docker
|
$ sudo systemctl start docker
|
||||||
```
|
```
|
||||||
|
@ -95,13 +95,13 @@ $ sudo systemctl start docker
|
||||||
|
|
||||||
建立 `docker` 组:
|
建立 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo groupadd docker
|
$ sudo groupadd docker
|
||||||
```
|
```
|
||||||
|
|
||||||
将当前用户加入 `docker` 组:
|
将当前用户加入 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo usermod -aG docker $USER
|
$ sudo usermod -aG docker $USER
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ Docker 需要安装在 64 位的 x86 平台或 ARM 平台上(如[树莓派](ht
|
||||||
|
|
||||||
用户可以通过如下命令检查自己的内核版本详细信息:
|
用户可以通过如下命令检查自己的内核版本详细信息:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ uname -a
|
$ uname -a
|
||||||
Linux debian-512mb-nyc3-01 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.36-1+deb8u2~bpo70+1 (2016-10-19) x86_64 GNU/Linux
|
Linux debian-512mb-nyc3-01 3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.36-1+deb8u2~bpo70+1 (2016-10-19) x86_64 GNU/Linux
|
||||||
```
|
```
|
||||||
|
@ -25,13 +25,13 @@ Debian 7 的内核默认为 3.2,为了满足 Docker 的需求,应该安装 `
|
||||||
|
|
||||||
执行下面的命令添加 `backports` 源:
|
执行下面的命令添加 `backports` 源:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ echo "deb http://http.debian.net/debian wheezy-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
|
$ echo "deb http://http.debian.net/debian wheezy-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
|
||||||
```
|
```
|
||||||
|
|
||||||
升级到 `backports` 内核:
|
升级到 `backports` 内核:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get -t wheezy-backports install linux-image-amd64
|
$ sudo apt-get -t wheezy-backports install linux-image-amd64
|
||||||
```
|
```
|
||||||
|
@ -42,13 +42,13 @@ Debian 8 的内核默认为 3.16,满足基本的 Docker 运行条件。但是
|
||||||
|
|
||||||
执行下面的命令添加 `backports` 源:
|
执行下面的命令添加 `backports` 源:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ echo "deb http://http.debian.net/debian jessie-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
|
$ echo "deb http://http.debian.net/debian jessie-backports main" | sudo tee /etc/apt/sources.list.d/backports.list
|
||||||
```
|
```
|
||||||
|
|
||||||
升级到 `backports` 内核:
|
升级到 `backports` 内核:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get -t jessie-backports install linux-image-amd64
|
$ sudo apt-get -t jessie-backports install linux-image-amd64
|
||||||
```
|
```
|
||||||
|
@ -59,7 +59,7 @@ $ sudo apt-get -t jessie-backports install linux-image-amd64
|
||||||
|
|
||||||
在 Docker 使用期间,或者在 `docker info` 信息中,可能会看到下面的警告信息:
|
在 Docker 使用期间,或者在 `docker info` 信息中,可能会看到下面的警告信息:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
WARNING: No memory limit support
|
WARNING: No memory limit support
|
||||||
WARNING: No swap limit support
|
WARNING: No swap limit support
|
||||||
WARNING: No oom kill disable support
|
WARNING: No oom kill disable support
|
||||||
|
@ -69,7 +69,7 @@ WARNING: No oom kill disable support
|
||||||
|
|
||||||
然后不要忘记了更新 GRUB,并重启:
|
然后不要忘记了更新 GRUB,并重启:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo update-grub
|
$ sudo update-grub
|
||||||
$ sudo reboot
|
$ sudo reboot
|
||||||
```
|
```
|
||||||
|
@ -78,7 +78,7 @@ $ sudo reboot
|
||||||
|
|
||||||
Docker 官方为了简化安装流程,提供了一套安装脚本,Debian 系统上可以使用这套脚本安装:
|
Docker 官方为了简化安装流程,提供了一套安装脚本,Debian 系统上可以使用这套脚本安装:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.docker.com/ | sh
|
curl -sSL https://get.docker.com/ | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -88,13 +88,13 @@ curl -sSL https://get.docker.com/ | sh
|
||||||
|
|
||||||
#### 阿里云的安装脚本
|
#### 阿里云的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
||||||
```
|
```
|
||||||
|
|
||||||
#### DaoCloud 的安装脚本
|
#### DaoCloud 的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.daocloud.io/docker | sh
|
curl -sSL https://get.daocloud.io/docker | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -106,14 +106,14 @@ curl -sSL https://get.daocloud.io/docker | sh
|
||||||
|
|
||||||
*国内的一些软件源镜像(比如[阿里云](http://mirrors.aliyun.com/docker-engine/))不是太在意系统安全上的细节,可能依旧使用不安全的 HTTP,对于这些源可以不执行这一步。*
|
*国内的一些软件源镜像(比如[阿里云](http://mirrors.aliyun.com/docker-engine/))不是太在意系统安全上的细节,可能依旧使用不安全的 HTTP,对于这些源可以不执行这一步。*
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get install apt-transport-https ca-certificates
|
$ sudo apt-get install apt-transport-https ca-certificates
|
||||||
```
|
```
|
||||||
|
|
||||||
为了确认所下载软件包的合法性,需要添加 Docker 官方软件源的 GPG 密钥。
|
为了确认所下载软件包的合法性,需要添加 Docker 官方软件源的 GPG 密钥。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -127,13 +127,13 @@ $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys
|
||||||
|
|
||||||
用下面的命令将 APT 源添加到 `source.list`(将其中的 `<REPO>` 替换为上表的值):
|
用下面的命令将 APT 源添加到 `source.list`(将其中的 `<REPO>` 替换为上表的值):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ echo "<REPO>" | sudo tee /etc/apt/sources.list.d/docker.list
|
$ echo "<REPO>" | sudo tee /etc/apt/sources.list.d/docker.list
|
||||||
```
|
```
|
||||||
|
|
||||||
添加成功后,更新 apt 软件包缓存。
|
添加成功后,更新 apt 软件包缓存。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ $ sudo apt-get update
|
||||||
|
|
||||||
在一切准备就绪后,就可以安装最新版本的 Docker 了,软件包名称为 `docker-engine`。
|
在一切准备就绪后,就可以安装最新版本的 Docker 了,软件包名称为 `docker-engine`。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get install docker-engine
|
$ sudo apt-get install docker-engine
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -151,13 +151,13 @@ $ sudo apt-get install docker-engine
|
||||||
|
|
||||||
##### Debian 7 Wheezy
|
##### Debian 7 Wheezy
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo service docker start
|
$ sudo service docker start
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Debian 8 Jessie/Stretch
|
##### Debian 8 Jessie/Stretch
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo systemctl enable docker
|
$ sudo systemctl enable docker
|
||||||
$ sudo systemctl start docker
|
$ sudo systemctl start docker
|
||||||
```
|
```
|
||||||
|
@ -168,13 +168,13 @@ $ sudo systemctl start docker
|
||||||
|
|
||||||
建立 `docker` 组:
|
建立 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo groupadd docker
|
$ sudo groupadd docker
|
||||||
```
|
```
|
||||||
|
|
||||||
将当前用户加入 `docker` 组:
|
将当前用户加入 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo usermod -aG docker $USER
|
$ sudo usermod -aG docker $USER
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -16,14 +16,14 @@ Docker 需要安装在 64 位的 x86 平台或 ARM 平台上(如[树莓派](ht
|
||||||
|
|
||||||
用户可以通过如下命令检查自己的内核版本详细信息:
|
用户可以通过如下命令检查自己的内核版本详细信息:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ uname -a
|
$ uname -a
|
||||||
Linux device 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
|
Linux device 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
|
||||||
```
|
```
|
||||||
|
|
||||||
或者
|
或者
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ cat /proc/version
|
$ cat /proc/version
|
||||||
Linux version 4.4.0-45-generic (buildd@lcy01-08) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016
|
Linux version 4.4.0-45-generic (buildd@lcy01-08) (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) ) #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016
|
||||||
```
|
```
|
||||||
|
@ -34,19 +34,19 @@ Linux version 4.4.0-45-generic (buildd@lcy01-08) (gcc version 4.8.4 (Ubuntu 4.8.
|
||||||
|
|
||||||
##### Ubuntu 12.04 LTS
|
##### Ubuntu 12.04 LTS
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sudo apt-get install -y --install-recommends linux-generic-lts-trusty
|
sudo apt-get install -y --install-recommends linux-generic-lts-trusty
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Ubuntu 14.04 LTS
|
##### Ubuntu 14.04 LTS
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sudo apt-get install -y --install-recommends linux-generic-lts-xenial
|
sudo apt-get install -y --install-recommends linux-generic-lts-xenial
|
||||||
```
|
```
|
||||||
|
|
||||||
升级完内核后不要忘记了重启以生效。
|
升级完内核后不要忘记了重启以生效。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sudo reboot
|
sudo reboot
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ sudo reboot
|
||||||
|
|
||||||
在 Docker 使用期间,或者在 `docker info` 信息中,可能会看到下面的警告信息:
|
在 Docker 使用期间,或者在 `docker info` 信息中,可能会看到下面的警告信息:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
|
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
|
||||||
kernel does not support swap limit capabilities. Limitation discarded.
|
kernel does not support swap limit capabilities. Limitation discarded.
|
||||||
```
|
```
|
||||||
|
@ -63,7 +63,7 @@ kernel does not support swap limit capabilities. Limitation discarded.
|
||||||
|
|
||||||
然后不要忘记了更新 GRUB:
|
然后不要忘记了更新 GRUB:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo update-grub
|
$ sudo update-grub
|
||||||
$ sudo reboot
|
$ sudo reboot
|
||||||
```
|
```
|
||||||
|
@ -72,7 +72,7 @@ $ sudo reboot
|
||||||
|
|
||||||
Docker 官方为了简化安装流程,提供了一套安装脚本,Ubuntu 系统上可以使用这套脚本安装:
|
Docker 官方为了简化安装流程,提供了一套安装脚本,Ubuntu 系统上可以使用这套脚本安装:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.docker.com/ | sh
|
curl -sSL https://get.docker.com/ | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -82,13 +82,13 @@ curl -sSL https://get.docker.com/ | sh
|
||||||
|
|
||||||
#### 阿里云的安装脚本
|
#### 阿里云的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
|
||||||
```
|
```
|
||||||
|
|
||||||
#### DaoCloud 的安装脚本
|
#### DaoCloud 的安装脚本
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
curl -sSL https://get.daocloud.io/docker | sh
|
curl -sSL https://get.daocloud.io/docker | sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ curl -sSL https://get.daocloud.io/docker | sh
|
||||||
|
|
||||||
如果系统没有安装可选内核模块的话,可以执行下面的命令来安装可选内核模块包:
|
如果系统没有安装可选内核模块的话,可以执行下面的命令来安装可选内核模块包:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
|
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ $ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
|
||||||
|
|
||||||
在 Ubuntu 12.04 桌面环境下,需要一些额外的软件包,可以用下面的命令安装。
|
在 Ubuntu 12.04 桌面环境下,需要一些额外的软件包,可以用下面的命令安装。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get install xserver-xorg-lts-trusty libgl1-mesa-glx-lts-trusty
|
$ sudo apt-get install xserver-xorg-lts-trusty libgl1-mesa-glx-lts-trusty
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -122,14 +122,14 @@ $ sudo apt-get install xserver-xorg-lts-trusty libgl1-mesa-glx-lts-trusty
|
||||||
|
|
||||||
*国内的一些软件源镜像(比如[阿里云](http://mirrors.aliyun.com/docker-engine/))不是太在意系统安全上的细节,可能依旧使用不安全的 HTTP,对于这些源可以不执行这一步。*
|
*国内的一些软件源镜像(比如[阿里云](http://mirrors.aliyun.com/docker-engine/))不是太在意系统安全上的细节,可能依旧使用不安全的 HTTP,对于这些源可以不执行这一步。*
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get install apt-transport-https ca-certificates
|
$ sudo apt-get install apt-transport-https ca-certificates
|
||||||
```
|
```
|
||||||
|
|
||||||
为了确认所下载软件包的合法性,需要添加 Docker 官方软件源的 GPG 密钥。
|
为了确认所下载软件包的合法性,需要添加 Docker 官方软件源的 GPG 密钥。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -143,13 +143,13 @@ $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys
|
||||||
|
|
||||||
用下面的命令将 APT 源添加到 `source.list`(将其中的 `<REPO>` 替换为上表的值):
|
用下面的命令将 APT 源添加到 `source.list`(将其中的 `<REPO>` 替换为上表的值):
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ echo "<REPO>" | sudo tee /etc/apt/sources.list.d/docker.list
|
$ echo "<REPO>" | sudo tee /etc/apt/sources.list.d/docker.list
|
||||||
```
|
```
|
||||||
|
|
||||||
添加成功后,更新 apt 软件包缓存。
|
添加成功后,更新 apt 软件包缓存。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ $ sudo apt-get update
|
||||||
|
|
||||||
在一切准备就绪后,就可以安装最新版本的 Docker 了,软件包名称为 `docker-engine`。
|
在一切准备就绪后,就可以安装最新版本的 Docker 了,软件包名称为 `docker-engine`。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo apt-get install docker-engine
|
$ sudo apt-get install docker-engine
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -167,13 +167,13 @@ $ sudo apt-get install docker-engine
|
||||||
|
|
||||||
##### Ubuntu 12.04/14.04
|
##### Ubuntu 12.04/14.04
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo service docker start
|
$ sudo service docker start
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Ubuntu 16.04
|
##### Ubuntu 16.04
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo systemctl enable docker
|
$ sudo systemctl enable docker
|
||||||
$ sudo systemctl start docker
|
$ sudo systemctl start docker
|
||||||
```
|
```
|
||||||
|
@ -184,13 +184,13 @@ $ sudo systemctl start docker
|
||||||
|
|
||||||
建立 `docker` 组:
|
建立 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo groupadd docker
|
$ sudo groupadd docker
|
||||||
```
|
```
|
||||||
|
|
||||||
将当前用户加入 `docker` 组:
|
将当前用户加入 `docker` 组:
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ sudo usermod -aG docker $USER
|
$ sudo usermod -aG docker $USER
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
[kubectl](https://github.com/GoogleCloudPlatform/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
|
[kubectl](https://github.com/GoogleCloudPlatform/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
|
||||||
|
|
||||||
使用格式有两种:
|
使用格式有两种:
|
||||||
```sh
|
```bash
|
||||||
kubectl [flags]
|
kubectl [flags]
|
||||||
kubectl [command]
|
kubectl [command]
|
||||||
```
|
```
|
||||||
|
|
|
@ -9,24 +9,24 @@
|
||||||
Kubernetes 依赖 Etcd 服务来维护所有主节点的状态。
|
Kubernetes 依赖 Etcd 服务来维护所有主节点的状态。
|
||||||
|
|
||||||
## 启动 Etcd 服务。
|
## 启动 Etcd 服务。
|
||||||
```sh
|
```bash
|
||||||
docker run --net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
|
docker run --net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
|
||||||
```
|
```
|
||||||
|
|
||||||
## 启动主节点
|
## 启动主节点
|
||||||
启动 kubelet。
|
启动 kubelet。
|
||||||
```sh
|
```bash
|
||||||
docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube kubelet --api_servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable_server --hostname_override=127.0.0.1 --config=/etc/kubernetes/manifests
|
docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube kubelet --api_servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable_server --hostname_override=127.0.0.1 --config=/etc/kubernetes/manifests
|
||||||
```
|
```
|
||||||
|
|
||||||
## 启动服务代理
|
## 启动服务代理
|
||||||
```sh
|
```bash
|
||||||
docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
|
docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v0.17.0 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
|
||||||
```
|
```
|
||||||
|
|
||||||
## 测试状态
|
## 测试状态
|
||||||
在本地访问 8080 端口,应该获取到类似如下的结果:
|
在本地访问 8080 端口,应该获取到类似如下的结果:
|
||||||
```sh
|
```bash
|
||||||
$ curl 127.0.0.1:8080
|
$ curl 127.0.0.1:8080
|
||||||
{
|
{
|
||||||
"paths": [
|
"paths": [
|
||||||
|
@ -49,7 +49,7 @@ $ curl 127.0.0.1:8080
|
||||||
|
|
||||||
## 查看服务
|
## 查看服务
|
||||||
所有服务启动后过一会,查看本地实际运行的 Docker 容器,应该有如下几个。
|
所有服务启动后过一会,查看本地实际运行的 Docker 容器,应该有如下几个。
|
||||||
```sh
|
```bash
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
ee054db2516c gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube schedule 2 days ago Up 1 days k8s_scheduler.509f29c9_k8s-master-127.0.0.1_default_9941e5170b4365bd4aa91f122ba0c061_e97037f5
|
ee054db2516c gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube schedule 2 days ago Up 1 days k8s_scheduler.509f29c9_k8s-master-127.0.0.1_default_9941e5170b4365bd4aa91f122ba0c061_e97037f5
|
||||||
3b0f28de07a2 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube apiserve 2 days ago Up 1 days k8s_apiserver.245e44fa_k8s-master-127.0.0.1_default_9941e5170b4365bd4aa91f122ba0c061_6ab5c23d
|
3b0f28de07a2 gcr.io/google_containers/hyperkube:v0.17.0 "/hyperkube apiserve 2 days ago Up 1 days k8s_apiserver.245e44fa_k8s-master-127.0.0.1_default_9941e5170b4365bd4aa91f122ba0c061_6ab5c23d
|
||||||
|
|
|
@ -6,13 +6,13 @@ Docker Machine 可以在多种操作系统平台上安装,包括 Linux、Mac O
|
||||||
在 Linux/Mac OS 上的安装十分简单,推荐从 [官方 Release 库](https://github.com/docker/machine/releases) 直接下载编译好的二进制文件即可。
|
在 Linux/Mac OS 上的安装十分简单,推荐从 [官方 Release 库](https://github.com/docker/machine/releases) 直接下载编译好的二进制文件即可。
|
||||||
|
|
||||||
例如,在 Linux 64 位系统上直接下载对应的二进制包。
|
例如,在 Linux 64 位系统上直接下载对应的二进制包。
|
||||||
```sh
|
```bash
|
||||||
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.3.1-rc1/docker-machine_linux-amd64 > /usr/local/bin/docker-machine
|
$ sudo curl -L https://github.com/docker/machine/releases/download/v0.3.1-rc1/docker-machine_linux-amd64 > /usr/local/bin/docker-machine
|
||||||
$ chmod +x /usr/local/bin/docker-machine
|
$ chmod +x /usr/local/bin/docker-machine
|
||||||
```
|
```
|
||||||
|
|
||||||
完成后,查看版本信息,验证运行正常。
|
完成后,查看版本信息,验证运行正常。
|
||||||
```sh
|
```bash
|
||||||
$ docker-machine -v
|
$ docker-machine -v
|
||||||
docker-machine version 0.3.1-rc1 (993f2db)
|
docker-machine version 0.3.1-rc1 (993f2db)
|
||||||
```
|
```
|
||||||
|
@ -24,7 +24,7 @@ msysgit 是 Windows 下的 git 客户端软件包,会提供类似 Linux 下的
|
||||||
|
|
||||||
安装之后,启动 msysgit 的命令行界面,仍然通过下载二进制包进行安装,需要下载 docker 客户端和 docker-machine。
|
安装之后,启动 msysgit 的命令行界面,仍然通过下载二进制包进行安装,需要下载 docker 客户端和 docker-machine。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
$ curl -L https://get.docker.com/builds/Windows/x86_64/docker-latest.exe > /bin/docker
|
$ curl -L https://get.docker.com/builds/Windows/x86_64/docker-latest.exe > /bin/docker
|
||||||
|
|
||||||
$ curl -L https://github.com/docker/machine/releases/download/v0.3.1-rc1/docker-machine_windows-amd64.exe > /bin/docker-machine
|
$ curl -L https://github.com/docker/machine/releases/download/v0.3.1-rc1/docker-machine_windows-amd64.exe > /bin/docker-machine
|
||||||
|
|
|
@ -6,12 +6,12 @@ Docker Machine 支持多种后端驱动,包括虚拟机、本地主机和云
|
||||||
首先确保本地主机可以通过 user 账号的 key 直接 ssh 到目标主机。
|
首先确保本地主机可以通过 user 账号的 key 直接 ssh 到目标主机。
|
||||||
|
|
||||||
使用 generic 类型的驱动,创建一台 Docker 主机,命名为 test。
|
使用 generic 类型的驱动,创建一台 Docker 主机,命名为 test。
|
||||||
```sh
|
```bash
|
||||||
$ docker-machine create -d generic --generic-ip-address=10.0.100.101 --generic-ssh-user=user test
|
$ docker-machine create -d generic --generic-ip-address=10.0.100.101 --generic-ssh-user=user test
|
||||||
```
|
```
|
||||||
|
|
||||||
创建主机成功后,可以通过 env 命令来让后续操作对象都是目标主机。
|
创建主机成功后,可以通过 env 命令来让后续操作对象都是目标主机。
|
||||||
```sh
|
```bash
|
||||||
$ docker-machine env test
|
$ docker-machine env test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ $ docker-machine env test
|
||||||
* `help, h` 输出帮助信息
|
* `help, h` 输出帮助信息
|
||||||
|
|
||||||
每个命令,又带有不同的参数,可以通过
|
每个命令,又带有不同的参数,可以通过
|
||||||
```sh
|
```bash
|
||||||
docker-machine <COMMAND> -h
|
docker-machine <COMMAND> -h
|
||||||
```
|
```
|
||||||
来查看具体的用法。
|
来查看具体的用法。
|
||||||
|
|
|
@ -10,13 +10,13 @@ mesos 利用 zookper 来进行主节点的同步,以及从节点发现主节
|
||||||
#### 源码编译
|
#### 源码编译
|
||||||
|
|
||||||
下载源码
|
下载源码
|
||||||
```sh
|
```bash
|
||||||
git clone https://git-wip-us.apache.org/repos/asf/mesos.git
|
git clone https://git-wip-us.apache.org/repos/asf/mesos.git
|
||||||
```
|
```
|
||||||
|
|
||||||
安装依赖
|
安装依赖
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
#jdk-7
|
#jdk-7
|
||||||
sudo apt-get update && sudo apt-get install -y openjdk-7-jdk
|
sudo apt-get update && sudo apt-get install -y openjdk-7-jdk
|
||||||
#autotools
|
#autotools
|
||||||
|
@ -26,7 +26,7 @@ sudo apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
编译&安装
|
编译&安装
|
||||||
```sh
|
```bash
|
||||||
$ cd mesos
|
$ cd mesos
|
||||||
|
|
||||||
# Bootstrap (Only required if building from git repository).
|
# Bootstrap (Only required if building from git repository).
|
||||||
|
@ -43,7 +43,7 @@ $ make check && make install
|
||||||
|
|
||||||
安装 Docker,不再赘述,可以参考 [这里](http://yeasy.gitbooks.io/docker_practice/content/install/index.html)。
|
安装 Docker,不再赘述,可以参考 [这里](http://yeasy.gitbooks.io/docker_practice/content/install/index.html)。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
# Setup
|
# Setup
|
||||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
|
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
|
||||||
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
|
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
|
||||||
|
@ -66,12 +66,12 @@ sudo apt-get -y update && sudo apt-get -y install zookeeper mesos marathon
|
||||||
其中 mesos-master 镜像将作为 master 和 slave 容器使用。
|
其中 mesos-master 镜像将作为 master 和 slave 容器使用。
|
||||||
|
|
||||||
导出本地机器的地址到环境变量。
|
导出本地机器的地址到环境变量。
|
||||||
```sh
|
```bash
|
||||||
HOST_IP=10.11.31.7
|
HOST_IP=10.11.31.7
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 Zookeepr 容器。
|
启动 Zookeepr 容器。
|
||||||
```sh
|
```bash
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-p 2181:2181 \
|
-p 2181:2181 \
|
||||||
-p 2888:2888 \
|
-p 2888:2888 \
|
||||||
|
@ -80,7 +80,7 @@ garland/zookeeper
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 Mesos Master 容器。
|
启动 Mesos Master 容器。
|
||||||
```sh
|
```bash
|
||||||
docker run --net="host" \
|
docker run --net="host" \
|
||||||
-p 5050:5050 \
|
-p 5050:5050 \
|
||||||
-e "MESOS_HOSTNAME=${HOST_IP}" \
|
-e "MESOS_HOSTNAME=${HOST_IP}" \
|
||||||
|
@ -96,7 +96,7 @@ garland/mesosphere-docker-mesos-master
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 Marathon。
|
启动 Marathon。
|
||||||
```sh
|
```bash
|
||||||
docker run \
|
docker run \
|
||||||
-d \
|
-d \
|
||||||
-p 8080:8080 \
|
-p 8080:8080 \
|
||||||
|
@ -104,7 +104,7 @@ garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos --zk zk:/
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 Mesos slave 容器。
|
启动 Mesos slave 容器。
|
||||||
```sh
|
```bash
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name mesos_slave_1 \
|
--name mesos_slave_1 \
|
||||||
--entrypoint="mesos-slave" \
|
--entrypoint="mesos-slave" \
|
||||||
|
@ -128,7 +128,7 @@ ZooKeepr 是一个分布式应用的协调工具,用来管理多个 Master 节
|
||||||
首先,要修改 myid,手动为每一个节点分配一个自己的 id(1-255之间)。
|
首先,要修改 myid,手动为每一个节点分配一个自己的 id(1-255之间)。
|
||||||
|
|
||||||
zoo.cfg 是主配置文件,主要修改如下的三行(如果你启动三个 zk 节点)。
|
zoo.cfg 是主配置文件,主要修改如下的三行(如果你启动三个 zk 节点)。
|
||||||
```sh
|
```bash
|
||||||
server.1=zookeeper1:2888:3888
|
server.1=zookeeper1:2888:3888
|
||||||
server.2=zookeeper2:2888:3888
|
server.2=zookeeper2:2888:3888
|
||||||
server.3=zookeeper3:2888:3888
|
server.3=zookeeper3:2888:3888
|
||||||
|
@ -148,7 +148,7 @@ Mesos 的默认配置目录分别为:
|
||||||
|
|
||||||
###### 主节点
|
###### 主节点
|
||||||
首先在所有节点上修改 /etc/mesos/zk,为 主节点的 zookeeper 地址列表,例如:
|
首先在所有节点上修改 /etc/mesos/zk,为 主节点的 zookeeper 地址列表,例如:
|
||||||
```sh
|
```bash
|
||||||
zk://ip1:2181,ip2:2181/mesos
|
zk://ip1:2181,ip2:2181/mesos
|
||||||
```
|
```
|
||||||
创建 /etc/mesos-master/ip 文件,写入主节点监听的地址。
|
创建 /etc/mesos-master/ip 文件,写入主节点监听的地址。
|
||||||
|
@ -156,7 +156,7 @@ zk://ip1:2181,ip2:2181/mesos
|
||||||
还可以创建 /etc/mesos-master/cluster 文件,写入集群的别名。
|
还可以创建 /etc/mesos-master/cluster 文件,写入集群的别名。
|
||||||
|
|
||||||
之后,启动服务:
|
之后,启动服务:
|
||||||
```sh
|
```bash
|
||||||
sudo service mesos-master start
|
sudo service mesos-master start
|
||||||
```
|
```
|
||||||
更多选项可以参考[这里](http://open.mesosphere.com/reference/mesos-master/)。
|
更多选项可以参考[这里](http://open.mesosphere.com/reference/mesos-master/)。
|
||||||
|
@ -166,7 +166,7 @@ sudo service mesos-master start
|
||||||
在从节点上,修改 /etc/mesos-slave/ip 文件,写入跟主节点通信的地址。
|
在从节点上,修改 /etc/mesos-slave/ip 文件,写入跟主节点通信的地址。
|
||||||
|
|
||||||
之后,启动服务。
|
之后,启动服务。
|
||||||
```sh
|
```bash
|
||||||
sudo service mesos-slave start
|
sudo service mesos-slave start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ sudo service mesos-slave start
|
||||||
|
|
||||||
#### Marathon
|
#### Marathon
|
||||||
启动 marathon 服务。
|
启动 marathon 服务。
|
||||||
```sh
|
```bash
|
||||||
sudo service marathon start
|
sudo service marathon start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ swarm 的调度器(scheduler)在选择节点运行容器的时候支持几种过
|
||||||
|
|
||||||
###Constraint Filter
|
###Constraint Filter
|
||||||
constraint 是一个跟具体节点相关联的键值对,可以看做是每个节点的标签,这个标签可以在启动docker daemon的时候指定,比如
|
constraint 是一个跟具体节点相关联的键值对,可以看做是每个节点的标签,这个标签可以在启动docker daemon的时候指定,比如
|
||||||
```sh
|
```bash
|
||||||
sudo docker -d --label label_name=label01
|
sudo docker -d --label label_name=label01
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -14,30 +14,30 @@ sudo docker -d --label label_name=label01
|
||||||
在本次试验中,给083添加标签--label label_name=083,084添加标签--label label_name=084,124添加标签--label label_name=124,
|
在本次试验中,给083添加标签--label label_name=083,084添加标签--label label_name=084,124添加标签--label label_name=124,
|
||||||
|
|
||||||
以083为例,打开/etc/default/docker文件,修改DOCKER_OPTS:
|
以083为例,打开/etc/default/docker文件,修改DOCKER_OPTS:
|
||||||
```sh
|
```bash
|
||||||
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --label label_name=083"
|
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --label label_name=083"
|
||||||
```
|
```
|
||||||
|
|
||||||
在使用docker run命令启动容器的时候使用 `-e constarint:key=value` 的形式,可以指定container运行的节点。
|
在使用docker run命令启动容器的时候使用 `-e constarint:key=value` 的形式,可以指定container运行的节点。
|
||||||
|
|
||||||
比如我们想在84上面启动一个 redis 容器。
|
比如我们想在84上面启动一个 redis 容器。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_1 -d -e constraint:label_name==084 redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_1 -d -e constraint:label_name==084 redis
|
||||||
fee1b7b9dde13d64690344c1f1a4c3f5556835be46b41b969e4090a083a6382d
|
fee1b7b9dde13d64690344c1f1a4c3f5556835be46b41b969e4090a083a6382d
|
||||||
```
|
```
|
||||||
注意,是**两个**等号,不是一个等号,这一点会经常被忽略。
|
注意,是**两个**等号,不是一个等号,这一点会经常被忽略。
|
||||||
|
|
||||||
接下来再在084这台机器上启动一个redis 容器。
|
接下来再在084这台机器上启动一个redis 容器。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_2 -d -e constraint:label_name==084 redis 4968d617d9cd122fc2e17b3bad2f2c3b5812c0f6f51898024a96c4839fa000e1
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_2 -d -e constraint:label_name==084 redis 4968d617d9cd122fc2e17b3bad2f2c3b5812c0f6f51898024a96c4839fa000e1
|
||||||
```
|
```
|
||||||
然后再在083这台机器上启动另外一个 redis 容器。
|
然后再在083这台机器上启动另外一个 redis 容器。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_3 -d -e constraint:label_name==083 redis 7786300b8d2232c2335ac6161c715de23f9179d30eb5c7e9c4f920a4f1d39570
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_3 -d -e constraint:label_name==083 redis 7786300b8d2232c2335ac6161c715de23f9179d30eb5c7e9c4f920a4f1d39570
|
||||||
```
|
```
|
||||||
|
|
||||||
现在来看下执行情况:
|
现在来看下执行情况:
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
7786300b8d22 redis:latest "/entrypoint.sh redi 15 minutes ago Up 53 seconds 6379/tcp 083/redis_3
|
7786300b8d22 redis:latest "/entrypoint.sh redi 15 minutes ago Up 53 seconds 6379/tcp 083/redis_3
|
||||||
|
@ -48,7 +48,7 @@ fee1b7b9dde1 redis:latest "/entrypoint.sh redi 19 minutes ago
|
||||||
可以看到,执行结果跟预期的一样。
|
可以看到,执行结果跟预期的一样。
|
||||||
|
|
||||||
但是如果指定一个不存在的标签的话来运行容器会报错。
|
但是如果指定一个不存在的标签的话来运行容器会报错。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_0 -d -e constraint:label_name==0 redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_0 -d -e constraint:label_name==0 redis
|
||||||
FATA[0000] Error response from daemon: unable to find a node that satisfies label_name==0
|
FATA[0000] Error response from daemon: unable to find a node that satisfies label_name==0
|
||||||
```
|
```
|
||||||
|
@ -57,7 +57,7 @@ FATA[0000] Error response from daemon: unable to find a node that satisfies labe
|
||||||
通过使用 Affinity Filter,可以让一个容器紧挨着另一个容器启动,也就是说让两个容器在同一个节点上面启动。
|
通过使用 Affinity Filter,可以让一个容器紧挨着另一个容器启动,也就是说让两个容器在同一个节点上面启动。
|
||||||
|
|
||||||
现在其中一台机器上面启动一个 redis 容器。
|
现在其中一台机器上面启动一个 redis 容器。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis redis
|
||||||
ea13eddf667992c5d8296557d3c282dd8484bd262c81e2b5af061cdd6c82158d
|
ea13eddf667992c5d8296557d3c282dd8484bd262c81e2b5af061cdd6c82158d
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
||||||
|
@ -66,14 +66,14 @@ ea13eddf6679 redis:latest /entrypoint.sh redis 24 minutes ago
|
||||||
```
|
```
|
||||||
|
|
||||||
然后再次启动两个 redis 容器。
|
然后再次启动两个 redis 容器。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis_1 -e affinity:container==redis redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis_1 -e affinity:container==redis redis
|
||||||
bac50c2e955211047a745008fd1086eaa16d7ae4f33c192f50412e8dcd0a14cd
|
bac50c2e955211047a745008fd1086eaa16d7ae4f33c192f50412e8dcd0a14cd
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis_1 -e affinity:container==redis redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run -d --name redis_1 -e affinity:container==redis redis
|
||||||
bac50c2e955211047a745008fd1086eaa16d7ae4f33c192f50412e8dcd0a14cd
|
bac50c2e955211047a745008fd1086eaa16d7ae4f33c192f50412e8dcd0a14cd
|
||||||
```
|
```
|
||||||
现在来查看下运行结果,可以看到三个容器都是在一台机器上运行
|
现在来查看下运行结果,可以看到三个容器都是在一台机器上运行
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
449ed25ad239 redis:latest /entrypoint.sh redis 24 minutes ago Up Less than a second 6379/tcp 083/redis_2
|
449ed25ad239 redis:latest /entrypoint.sh redis 24 minutes ago Up Less than a second 6379/tcp 083/redis_2
|
||||||
|
@ -81,19 +81,19 @@ bac50c2e9552 redis:latest /entrypoint.sh redis 25 minutes ago
|
||||||
ea13eddf6679 redis:latest /entrypoint.sh redis 28 minutes ago Up 3 minutes 6379/tcp 083/redis
|
ea13eddf6679 redis:latest /entrypoint.sh redis 28 minutes ago Up 3 minutes 6379/tcp 083/redis
|
||||||
```
|
```
|
||||||
通过 `-e affinity:image=image_name` 命令可以指定只有已经下载了`image_name`镜像的机器才运行容器
|
通过 `-e affinity:image=image_name` 命令可以指定只有已经下载了`image_name`镜像的机器才运行容器
|
||||||
```sh
|
```bash
|
||||||
sudo docker –H 192.168.1.83:2376 run –name redis1 –d –e affinity:image==redis redis
|
sudo docker –H 192.168.1.83:2376 run –name redis1 –d –e affinity:image==redis redis
|
||||||
```
|
```
|
||||||
redis1 这个容器只会在已经下载了 redis 镜像的节点上运行。
|
redis1 这个容器只会在已经下载了 redis 镜像的节点上运行。
|
||||||
|
|
||||||
```sh
|
```bash
|
||||||
sudo docker -H 192.168.1.83:2376 run -d --name redis -e affinity:image==~redis redis
|
sudo docker -H 192.168.1.83:2376 run -d --name redis -e affinity:image==~redis redis
|
||||||
```
|
```
|
||||||
这条命令达到的效果是:在有 redis 镜像的节点上面启动一个名字叫做 redis 的容器,如果每个节点上面都没有 redis 容器,就按照默认的策略启动 redis 容器。
|
这条命令达到的效果是:在有 redis 镜像的节点上面启动一个名字叫做 redis 的容器,如果每个节点上面都没有 redis 容器,就按照默认的策略启动 redis 容器。
|
||||||
|
|
||||||
###Port Filter
|
###Port Filter
|
||||||
Port 也会被认为是一个唯一的资源
|
Port 也会被认为是一个唯一的资源
|
||||||
```sh
|
```bash
|
||||||
sudo docker -H 192.168.1.83:2376 run -d -p 80:80 nginx
|
sudo docker -H 192.168.1.83:2376 run -d -p 80:80 nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ binpack 则相反,这种情况下,swarm会尽可能的把所有的容器放
|
||||||
|
|
||||||
### spread 策略
|
### spread 策略
|
||||||
先来演示下 spread 策略的情况。
|
先来演示下 spread 策略的情况。
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=spread file:///tmp/cluster
|
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=spread file:///tmp/cluster
|
||||||
7609ac2e463f435c271d17887b7d1db223a5d696bf3f47f86925c781c000cb60
|
7609ac2e463f435c271d17887b7d1db223a5d696bf3f47f86925c781c000cb60
|
||||||
ats@sclu083:~$ sudo docker ps
|
ats@sclu083:~$ sudo docker ps
|
||||||
|
@ -19,7 +19,7 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||||
7609ac2e463f swarm:latest "/swarm manage --str 6 seconds ago Up 5 seconds 0.0.0.0:2376->2375/tcp focused_babbage
|
7609ac2e463f swarm:latest "/swarm manage --str 6 seconds ago Up 5 seconds 0.0.0.0:2376->2375/tcp focused_babbage
|
||||||
```
|
```
|
||||||
三台机器除了83运行了 Swarm之外,其他的都没有运行任何一个容器,现在在85这台节点上面在swarm集群上启动一个容器
|
三台机器除了83运行了 Swarm之外,其他的都没有运行任何一个容器,现在在85这台节点上面在swarm集群上启动一个容器
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
|
||||||
2553799f1372b432e9b3311b73e327915d996b6b095a30de3c91a47ff06ce981
|
2553799f1372b432e9b3311b73e327915d996b6b095a30de3c91a47ff06ce981
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
||||||
|
@ -27,7 +27,7 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||||
2553799f1372 redis:latest /entrypoint.sh redis 24 minutes ago Up Less than a second 192.168.1.84:32770->6379/tcp 084/node-1
|
2553799f1372 redis:latest /entrypoint.sh redis 24 minutes ago Up Less than a second 192.168.1.84:32770->6379/tcp 084/node-1
|
||||||
```
|
```
|
||||||
启动一个 redis 容器,查看结果
|
启动一个 redis 容器,查看结果
|
||||||
```sh
|
```bash
|
||||||
|
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
|
||||||
7965a17fb943dc6404e2c14fb8585967e114addca068f233fcaf60c13bcf2190
|
7965a17fb943dc6404e2c14fb8585967e114addca068f233fcaf60c13bcf2190
|
||||||
|
@ -37,7 +37,7 @@ CONTAINER ID IMAGE COMMAND CREA
|
||||||
2553799f1372 redis:latest /entrypoint.sh redis 29 minutes ago Up 4 minutes 192.168.1.84:32770->6379/tcp 084/node-1
|
2553799f1372 redis:latest /entrypoint.sh redis 29 minutes ago Up 4 minutes 192.168.1.84:32770->6379/tcp 084/node-1
|
||||||
```
|
```
|
||||||
再次启动一个 redis 容器,查看结果
|
再次启动一个 redis 容器,查看结果
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-3 -d -P redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-3 -d -P redis
|
||||||
65e1ed758b53fbf441433a6cb47d288c51235257cf1bf92e04a63a8079e76bee
|
65e1ed758b53fbf441433a6cb47d288c51235257cf1bf92e04a63a8079e76bee
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 ps
|
||||||
|
@ -50,13 +50,13 @@ CONTAINER ID IMAGE COMMAND CREA
|
||||||
|
|
||||||
### binpack 策略
|
### binpack 策略
|
||||||
现在来看看binpack策略下的情况。在083上面执行命令:
|
现在来看看binpack策略下的情况。在083上面执行命令:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=binpack file:///tmp/cluster
|
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage --strategy=binpack file:///tmp/cluster
|
||||||
f1c9affd5a0567870a45a8eae57fec7c78f3825f3a53fd324157011aa0111ac5
|
f1c9affd5a0567870a45a8eae57fec7c78f3825f3a53fd324157011aa0111ac5
|
||||||
```
|
```
|
||||||
|
|
||||||
现在在集群中启动三个 redis 容器,查看分布情况:
|
现在在集群中启动三个 redis 容器,查看分布情况:
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-1 -d -P redis
|
||||||
18ceefa5e86f06025cf7c15919fa64a417a9d865c27d97a0ab4c7315118e348c
|
18ceefa5e86f06025cf7c15919fa64a417a9d865c27d97a0ab4c7315118e348c
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 run --name node-2 -d -P redis
|
||||||
|
|
|
@ -2,20 +2,20 @@
|
||||||
在使用 swarm 管理集群前,需要把集群中所有的节点的 docker daemon 的监听方式更改为 `0.0.0.0:2375`。
|
在使用 swarm 管理集群前,需要把集群中所有的节点的 docker daemon 的监听方式更改为 `0.0.0.0:2375`。
|
||||||
|
|
||||||
可以有两种方式达到这个目的,第一种是在启动docker daemon的时候指定
|
可以有两种方式达到这个目的,第一种是在启动docker daemon的时候指定
|
||||||
```sh
|
```bash
|
||||||
sudo docker -H 0.0.0.0:2375&
|
sudo docker -H 0.0.0.0:2375&
|
||||||
```
|
```
|
||||||
|
|
||||||
第二种方式是直接修改 Docker 的配置文件(Ubuntu 上是 `/etc/default/docker`,其他版本的 Linux 上略有不同)
|
第二种方式是直接修改 Docker 的配置文件(Ubuntu 上是 `/etc/default/docker`,其他版本的 Linux 上略有不同)
|
||||||
|
|
||||||
在文件的最后添加下面这句代码:
|
在文件的最后添加下面这句代码:
|
||||||
```sh
|
```bash
|
||||||
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock"
|
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
需要注意的是,一定要在所有希望被 Swarm 管理的节点上进行的。修改之后要重启 Docker
|
需要注意的是,一定要在所有希望被 Swarm 管理的节点上进行的。修改之后要重启 Docker
|
||||||
```sh
|
```bash
|
||||||
sudo service docker restart
|
sudo service docker restart
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -28,12 +28,12 @@ Docker 集群管理需要使用服务发现(Discovery service backend)功能,S
|
||||||
#### 创建集群 token
|
#### 创建集群 token
|
||||||
|
|
||||||
在上面三台机器中的任何一台机器上面执行 `swarm create` 命令来获取一个集群标志。这条命令执行完毕后,Swarm 会前往 DockerHub 上内置的发现服务中获取一个全球唯一的 token,用来标识要管理的集群。
|
在上面三台机器中的任何一台机器上面执行 `swarm create` 命令来获取一个集群标志。这条命令执行完毕后,Swarm 会前往 DockerHub 上内置的发现服务中获取一个全球唯一的 token,用来标识要管理的集群。
|
||||||
```sh
|
```bash
|
||||||
sudo docker run --rm swarm create
|
sudo docker run --rm swarm create
|
||||||
```
|
```
|
||||||
|
|
||||||
我们在84这台机器上执行这条命令,输出如下:
|
我们在84这台机器上执行这条命令,输出如下:
|
||||||
```sh
|
```bash
|
||||||
rio@084:~$ sudo docker run --rm swarm create
|
rio@084:~$ sudo docker run --rm swarm create
|
||||||
b7625e5a7a2dc7f8c4faacf2b510078e
|
b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
```
|
```
|
||||||
|
@ -43,13 +43,13 @@ b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
#### 加入集群
|
#### 加入集群
|
||||||
|
|
||||||
在所有要加入集群的节点上面执行 `swarm join` 命令,表示要把这台机器加入这个集群当中。在本次试验中,就是要在 83、84 和 124 这三台机器上执行下面的这条命令:
|
在所有要加入集群的节点上面执行 `swarm join` 命令,表示要把这台机器加入这个集群当中。在本次试验中,就是要在 83、84 和 124 这三台机器上执行下面的这条命令:
|
||||||
```sh
|
```bash
|
||||||
sudo docker run -d swarm join --addr=ip_address:2375 token://token_id
|
sudo docker run -d swarm join --addr=ip_address:2375 token://token_id
|
||||||
```
|
```
|
||||||
其中的 ip_address 换成执行这条命令的机器的 IP,token_id 换成上一步执行 `swarm create` 返回的 token。
|
其中的 ip_address 换成执行这条命令的机器的 IP,token_id 换成上一步执行 `swarm create` 返回的 token。
|
||||||
|
|
||||||
在83这台机器上面的执行结果如下:
|
在83这台机器上面的执行结果如下:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker run -d swarm join --addr=192.168.1.83:2375 token://b7625e5a7a2dc7f8c4faacf2b510078e
|
rio@083:~$ sudo docker run -d swarm join --addr=192.168.1.83:2375 token://b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
3b3d9da603d7c121588f796eab723458af5938606282787fcbb03b6f1ac2000b
|
3b3d9da603d7c121588f796eab723458af5938606282787fcbb03b6f1ac2000b
|
||||||
```
|
```
|
||||||
|
@ -57,18 +57,18 @@ rio@083:~$ sudo docker run -d swarm join --addr=192.168.1.83:2375 token://b7625e
|
||||||
|
|
||||||
#### 启动swarm manager
|
#### 启动swarm manager
|
||||||
因为我们要使用 83 这台机器充当 swarm 管理节点,所以需要在83这台机器上面执行 `swarm manage` 命令:
|
因为我们要使用 83 这台机器充当 swarm 管理节点,所以需要在83这台机器上面执行 `swarm manage` 命令:
|
||||||
```sh
|
```bash
|
||||||
sudo docker run -d -p 2376:2375 swarm manage token://b7625e5a7a2dc7f8c4faacf2b510078e
|
sudo docker run -d -p 2376:2375 swarm manage token://b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
```
|
```
|
||||||
执行结果如下:
|
执行结果如下:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker run -d -p 2376:2375 swarm manage token://b7625e5a7a2dc7f8c4faacf2b510078e
|
rio@083:~$ sudo docker run -d -p 2376:2375 swarm manage token://b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
83de3e9149b7a0ef49916d1dbe073e44e8c31c2fcbe98d962a4f85380ef25f76
|
83de3e9149b7a0ef49916d1dbe073e44e8c31c2fcbe98d962a4f85380ef25f76
|
||||||
```
|
```
|
||||||
这条命令如果执行成功会返回已经启动的 Swarm 的容器的 ID,此时整个集群已经启动起来了。
|
这条命令如果执行成功会返回已经启动的 Swarm 的容器的 ID,此时整个集群已经启动起来了。
|
||||||
|
|
||||||
现在通过 `docker ps` 命令来看下有没有启动成功。
|
现在通过 `docker ps` 命令来看下有没有启动成功。
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker ps
|
rio@083:~$ sudo docker ps
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
83de3e9149b7 swarm:latest "/swarm manage token 4 minutes ago Up 4 minutes 0.0.0.0:2376->2375/tcp stupefied_stallman
|
83de3e9149b7 swarm:latest "/swarm manage token 4 minutes ago Up 4 minutes 0.0.0.0:2376->2375/tcp stupefied_stallman
|
||||||
|
@ -81,7 +81,7 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||||
* 映射的端口可以使任意的除了 2375 以外的并且是未被占用的端口,但一定不能是 2375 这个端口,因为 2375 已经被 Docker 本身给占用了。
|
* 映射的端口可以使任意的除了 2375 以外的并且是未被占用的端口,但一定不能是 2375 这个端口,因为 2375 已经被 Docker 本身给占用了。
|
||||||
|
|
||||||
集群启动成功以后,现在我们可以在任何一台节点上使用 `swarm list` 命令查看集群中的节点了,本实验在 124 这台机器上执行 `swarm list` 命令:
|
集群启动成功以后,现在我们可以在任何一台节点上使用 `swarm list` 命令查看集群中的节点了,本实验在 124 这台机器上执行 `swarm list` 命令:
|
||||||
```sh
|
```bash
|
||||||
rio@124:~$ sudo docker run --rm swarm list token://b7625e5a7a2dc7f8c4faacf2b510078e
|
rio@124:~$ sudo docker run --rm swarm list token://b7625e5a7a2dc7f8c4faacf2b510078e
|
||||||
192.168.1.84:2375
|
192.168.1.84:2375
|
||||||
192.168.1.124:2375
|
192.168.1.124:2375
|
||||||
|
@ -93,7 +93,7 @@ rio@124:~$ sudo docker run --rm swarm list token://b7625e5a7a2dc7f8c4faacf2b5100
|
||||||
本次试验,我们在 192.168.1.85 这台机器上使用 `docker info` 命令来查看集群中的节点的信息。
|
本次试验,我们在 192.168.1.85 这台机器上使用 `docker info` 命令来查看集群中的节点的信息。
|
||||||
|
|
||||||
其中 info 也可以换成其他的 Docker 支持的命令。
|
其中 info 也可以换成其他的 Docker 支持的命令。
|
||||||
```sh
|
```bash
|
||||||
rio@085:~$ sudo docker -H 192.168.1.83:2376 info
|
rio@085:~$ sudo docker -H 192.168.1.83:2376 info
|
||||||
Containers: 8
|
Containers: 8
|
||||||
Strategy: spread
|
Strategy: spread
|
||||||
|
@ -112,7 +112,7 @@ Nodes: 2
|
||||||
经过排查,发现是忘了修改 124 这台机器上面改 docker daemon 的监听方式,只要按照上面的步骤修改写 docker daemon 的监听方式就可以了。
|
经过排查,发现是忘了修改 124 这台机器上面改 docker daemon 的监听方式,只要按照上面的步骤修改写 docker daemon 的监听方式就可以了。
|
||||||
|
|
||||||
在使用这个方法的时候,使用swarm create可能会因为网络的原因会出现类似于下面的这个问题:
|
在使用这个方法的时候,使用swarm create可能会因为网络的原因会出现类似于下面的这个问题:
|
||||||
```sh
|
```bash
|
||||||
rio@227:~$ sudo docker run --rm swarm create
|
rio@227:~$ sudo docker run --rm swarm create
|
||||||
[sudo] password for rio:
|
[sudo] password for rio:
|
||||||
time="2015-05-19T12:59:26Z" level=fatal msg="Post https://discovery-stage.hub.docker.com/v1/clusters: dial tcp: i/o timeout"
|
time="2015-05-19T12:59:26Z" level=fatal msg="Post https://discovery-stage.hub.docker.com/v1/clusters: dial tcp: i/o timeout"
|
||||||
|
@ -123,7 +123,7 @@ time="2015-05-19T12:59:26Z" level=fatal msg="Post https://discovery-stage.hub.do
|
||||||
第二种方法相对于第一种方法要简单得多,也不会出现类似于上面的问题。
|
第二种方法相对于第一种方法要简单得多,也不会出现类似于上面的问题。
|
||||||
|
|
||||||
第一步:在 swarm 管理节点上新建一个文件,把要加入集群的机器 IP 地址和端口号写入文件中,本次试验就是要在83这台机器上面操作:
|
第一步:在 swarm 管理节点上新建一个文件,把要加入集群的机器 IP 地址和端口号写入文件中,本次试验就是要在83这台机器上面操作:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ echo 192.168.1.83:2375 >> cluster
|
rio@083:~$ echo 192.168.1.83:2375 >> cluster
|
||||||
rio@083:~$ echo 192.168.1.84:2375 >> cluster
|
rio@083:~$ echo 192.168.1.84:2375 >> cluster
|
||||||
rio@083:~$ echo 192.168.1.124:2375 >> cluster
|
rio@083:~$ echo 192.168.1.124:2375 >> cluster
|
||||||
|
@ -134,12 +134,12 @@ rio@083:~$ cat cluster
|
||||||
```
|
```
|
||||||
|
|
||||||
第二步:在083这台机器上面执行 `swarm manage` 这条命令:
|
第二步:在083这台机器上面执行 `swarm manage` 这条命令:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster
|
rio@083:~$ sudo docker run -d -p 2376:2375 -v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster
|
||||||
364af1f25b776f99927b8ae26ca8db5a6fe8ab8cc1e4629a5a68b48951f598ad
|
364af1f25b776f99927b8ae26ca8db5a6fe8ab8cc1e4629a5a68b48951f598ad
|
||||||
```
|
```
|
||||||
使用`docker ps`来查看有没有启动成功:
|
使用`docker ps`来查看有没有启动成功:
|
||||||
```sh
|
```bash
|
||||||
rio@083:~$ sudo docker ps
|
rio@083:~$ sudo docker ps
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
364af1f25b77 swarm:latest "/swarm manage file: About a minute ago Up About a minute 0.0.0.0:2376->2375/tcp happy_euclid
|
364af1f25b77 swarm:latest "/swarm manage file: About a minute ago Up About a minute 0.0.0.0:2376->2375/tcp happy_euclid
|
||||||
|
@ -149,7 +149,7 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||||
在使用这条命令的时候需要注意的是注意:这里一定要使用-v命令,因为cluster文件是在本机上面,启动的容器默认是访问不到的,所以要通过-v命令共享。
|
在使用这条命令的时候需要注意的是注意:这里一定要使用-v命令,因为cluster文件是在本机上面,启动的容器默认是访问不到的,所以要通过-v命令共享。
|
||||||
|
|
||||||
接下来的就可以在任何一台安装了docker的机器上面通过命令使用集群,同样的,在85这台机器上执行docker info命令查看集群的节点信息:
|
接下来的就可以在任何一台安装了docker的机器上面通过命令使用集群,同样的,在85这台机器上执行docker info命令查看集群的节点信息:
|
||||||
```sh
|
```bash
|
||||||
rio@s085:~$ sudo docker -H 192.168.1.83:2376 info
|
rio@s085:~$ sudo docker -H 192.168.1.83:2376 info
|
||||||
Containers: 9
|
Containers: 9
|
||||||
Strategy: spread
|
Strategy: spread
|
||||||
|
|
Loading…
Reference in New Issue