您正在查看: DOCKER 分类下的文章

docker swarm_install-w-machine

安装和创建 docker Swarm

你可以在你的主机上使用 docker Swarm 来管理 Docker 容器集群。本节向您展示 Docker Swarm ,并教你如何在本地主机上使用 Docker Machine 和 Virtualbox 来创建一个 swarm。

谨记, Docker Swarm 当前版本还是 BETA 阶段,所以很多事情可能会改变。我们建议您不要在生产环境中使用。

##系统必备组建

确认你的主机上已经安装了 Virtualbox。如果你使用的是 Mac OS X 或者 Windows 来安装 Docker,你要确保在这之前你已经安装好了 Virtualbox。

参考指南来安装适合您系统的 Docker Machine。

##创建 Docker Swarm

docker terms_image

镜像

======

介绍

docker-filesystems-debian.png" alt="基础镜像" />

docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。

由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。
但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不
可写,所以镜像是无状态的。

png" alt="镜像可写层" />

父镜像

镜像层次

每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像。我们有时说,下层那个
镜像是上层镜像的父镜像。

基础镜像

一个没有任何父镜像的镜像,谓之基础镜像。

镜像ID

所有镜像都是通过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。
为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的
碰撞机率,所以服务器总是返回长ID。

docker installation_softlayer

IBM SoftLayer

1.创建一个 [IBM SoftLayer 账户]https://www.softlayer.com/cloud-servers/.

2.登陆到 [SoftLayer Customer Portal]https://control.softlayer.com/.

3.在 Devices 菜单中选择[设备列表]https://control.softlayer.com/devices.

4.点击位于菜单条下方、窗口顶部右侧的 Order Devices.

5.在 Virtual Server 下点击 [Hourly]https://manage.softlayer.com/Sales/orderHourlyComputingInstance.

6.创建一个新的 SoftLayer Virtual Server Instance (VSI),使用全部字段的默认值:

  • Datacenter 的部署位置
  • Ubuntu linux 12.04 LTS Precise Pangolin - 最小化安装的64位系统

7.点击底部右侧的 Continue Your Order.

8.填写 VSI 主机名和域名。

9.填写用户所需的元数据和订单。

10.接下来请继续阅读 [Ubuntu]https://docs.docker.com/installation/ubuntulinux/#ubuntu-linux.

###What next

更多信息请阅读用户指南。

docker installation_ubuntu

Ubuntu

docker 支持以下的 Ubuntu 版本

  • Ubuntu Trusty 14.04 (LTS) (64-bit)
  • Ubuntu Precise 12.04 (LTS) (64-bit)
  • Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

这个页面可以指导你安装 docker 包管理器,并了解其中的安装机制。通过下边的安装方式可以确保你获取的是最新版本的 Docker。如果你想要使用 'Ubuntu包管理器' 安装,你可以查阅你的 Ubuntu 文档。

###前提条件

Docker 需要在64位版本的Ubuntu上安装。此外,你还需要保证你的 Ubuntu 内核的最小版本不低于 3.10,其中3.10 小版本和更新维护版也是可以使用的。

在低于3.10版本的内核上运行 Docker 会丢失一部分功能。在这些旧的版本上运行 Docker 会出现一些BUG,这些BUG在一定的条件里会导致数据的丢失,或者报一些严重的错误。

打开控制台使用 uname -r命令来查看你当前的内核版本。

$ uname -r 
3.11.0-15-generic

Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的Ubuntu版本是否支持 Docker 。

###Trusty 14.04

这个版本不需要考虑前提条件

###Precise 12.04 (LTS)

对于Ubuntu Precise版本, 安装Docker需要内核在3.13及以上版本。如果你的内核版本低于3.13你需要升级你的内核。 通过下边的表,请查阅下边的表来确认你的环境需要哪些包。

linux-image-generic-lts-trusty 基本linux 内核镜像。这个内核内置了AUFS。这是运行Docker必备的软件。
linux-headers-generic-lts-trusty 允许ZFS和VirtualBox客户机额外的包。如果你不安装已存在内核的头文件,那么你可以跳过"trusty"内核的这些头文件。如果你不确定,为安全起见,你应该包含这些包。
xserver-xorg-lts-trusty 在没有Unity/Xorg的非图形环境中可选。必选 当在图形环境的机器中运行Doker时。

学习使用这些包的原因,请参考内核安装教程。详情 LTS 实现栈 Stack — 参考每个版本下的标记5。

libgl1-mesa-glx-lts-trusty
 

通过下边的操作来升级你的内核和安装额外的包

  1. 在Ubuntu系统中打开命令行控制台。

  2. 升级你的包管理器

     $ sudo apt-get update
    
  3. 安装所有必须和可选的包

     $ sudo apt-get install linux-image-generic-lts-trusty
    

    根据个人的系统环境来选择是否安装更多的包(前表列出)。

  4. 重启系统

     $ sudo reboot
    
  5. 等到系统重启成功之后,查看安装Docker

###Saucy 13.10 (64 bit)

Docker 使用 AUFS 作为默认的后端存储方式,如果你之前没有安装 AUFS ,Docker 在安装过程中会自动添加。

##Ubuntu安装Docker

首先要确认你的 Ubuntu 版本是否符合安装 Docker 的前提条件。如果没有问题,你可以通过下边的方式来安装 Docker :

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

  2. 查看你是否安装了wget

     $ which wget
    

    如果wget没有安装,先升级包管理器,然后再安装它。

     $ sudo apt-get update $ sudo apt-get install wget
    
  3. 获取最新版本的 Docker 安装包

     $ wget -qO- https://get.docker.com/ | sh
    

    系统会提示你输入sudo密码,输入完成之后,就会下载脚本并且安装Docker及依赖包。

  4. 验证 Docker 是否被正确的安装

     $ sudo docker run hello-world
    

    上边的命令会下载一个测试镜像,并在容器内运行这个镜像。

##Ubuntu Docker可选配置

这部分主要介绍了 Docker 的可选配置项,使用这些配置能够让 Docker 在 Ubuntu 上更好的工作。

  • 创建 Docker 用户组
  • 调整内存和交换空间(swap accounting)
  • 启用防火墙的端口转发(UFW)
  • 为 Docker 配置DNS服务

###创建 Docker 用户组

docker 进程通过监听一个 Unix Socket 来替代 TCP 端口。在默认情况下,docker 的 Unix Socket属于root用户,当然其他用户可以使用sudo方式来访问。因为这个原因, docker 进程就一直是root用户运行的。

为了在使用 docker 命令的时候前边不再加sudo,我们需要创建一个叫 docker 的用户组,并且为用户组添加用户。然后在 docker 进程启动的时候,我们的 docker 群组有了 Unix Socket 的所有权,可以对 Socket 文件进行读写。

注意:docker 群组就相当于root用户。有关系统安全影响的细节,请查看 Docker 进程表面攻击细节

创建 docker 用户组并添加用户

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

    在这过程中,我们假设你已经登录了Ubuntu。

  2. 创建 docker 用户组并添加用户。

     $ sudo usermod -aG docker ubuntu
    
  3. 注销登录并重新登录

    这里要确保你运行用户的权限。

  4. 验证 docker 用户不使用 sudo 命令开执行 Docker

     $ docker run hello-world
    

###调整内存和交换空间(swap accounting)

当我们使用 Docker 运行一个镜像的时候,我们可能会看到如下的信息提示:

WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.、

为了防止以上错误信息提示的出现,我们需要在系统中启用内存和交换空间。我们需要修改系统的 GUN GRUB (GNU GRand Unified Bootloader) 来启用内存和交换空间。开启方法如下:

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

  2. 编辑 /etc/default/grub 文件

  3. 设置 GRUB_CMDLINE_LINUX 的值如下:

     GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
    
  4. 保存和关闭文件

  5. 更新 GRUB

     $ sudo update-grub
    
  6. 重启你的系统。

允许UFW端口转发

当你在运行 docker 的宿主主机上使用UFW(简单的防火墙)。你需要做一些额外的配置。Docker 使用桥接的方式来管理网络。默认情况下,UFW 过滤所有的端口转发策略。因此,当在UFW启用的情况下使用 docker ,你必须适当的设置UFW的端口转发策略。

默认情况下UFW是过滤掉所有的入站规则。如果其他的主机能够访问你的容器。你需要允许Docker的默认端口(2375)的所有连接。

设置 UFW 允许Docker 端口的入站规则:

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

  2. 验证UFW的安装和启用状态

     $ sudo ufw status
    
  3. 打开和编辑/etc/default/ufw文件

     $ sudo nano /etc/default/ufw
    
  4. 设置 DEFAULT_FORWARD_POLICY 如下:

    DEFAULT_FORWARD_POLICY="ACCEPT"

  5. 保存关闭文件。

  6. 重新加载UFW来使新规则生效。

     $ sudo ufw reload
    
  7. 允许 Docker 端口的入站规则

     $ sudo ufw allow 2375/tcp
    

###Docker 配置 DNS 服务

无论是Ubuntu还是Ubuntu 桌面繁衍版在系统运行的时候都是使用/etc/resolv.conf配置文件中的127.0.0.1作为域名服务器(nameserver)。NetworkManager设置dnsmasq使用真实的dns服务器连接,并且设置 /etc/resolv.conf的域名服务为127.0.0.1。

在桌面环境下使用这些配置来运行 docker 容器的时候, Docker 用户会看到如下的警告:

WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]

该警告是因为 Docker 容器不能使用本地的DNS服务。相反 Docker 使用一个默认的外部域名服务器。

为了避免此警告,你可以给 Docker 容器指定一个DNS服务器。或者你可以禁用 NetworkManager 的 dnsmasq。不过当禁止 dnsmasq 可能使某些网络的DNS解析速度变慢。

为 Docker 指定一个DNS服务器

  1. 使用具有sudo权限的用户来登录你的Ubuntu。

  2. 打开并编辑 /etc/default/docker

     $ sudo nano /etc/default/docker
    
  3. 添加设置

     DOCKER_OPTS="--dns 8.8.8.8"
    

    使用8.8.8.8替换如192.168.1.1的本地DNS服务器。你可以指定多个DNS服务器,多个DNS服务器使用空格分割例如

     --dns 8.8.8.8 --dns 192.168.1.1
    

    警告:如果你正在使用的电脑需要连接到不同的网络,一定要选择一个公共DNS服务器。

  4. 保存关闭文件。

  5. 重启 Docker 进程

     $ sudo restart docker  
    

或者,作为替代先前的操作过程,禁止NetworkManager中的dnsmasq(这样会使你的网络变慢)

  1. 打开和编辑 /etc/default/docker

     $ sudo nano /etc/NetworkManager/NetworkManager.conf
    
  2. 注释掉 dns = dsnmasq:

     dns=dnsmasq
    
  3. 保存关闭文件

  4. 重启NetworkManager 和 Docker

     $ sudo restart network-manager $ sudo restart docker
    

###升级Docker

wget的时候使用-N参数来安装最新版本的Docker:

$ wget -N https://get.docker.com/ | sh

docker installation_windows

#windows

提示:docker 已经在windows7.1和windows 8上通过测试,当然它也可以在低版本的windows上使用。但是你的处理器必须支持硬件虚拟化。

docker 引擎使用的是linux内核特性,所以我们需要在 Windows 上使用一个轻量级的虚拟机 (VM) 来运行 Docker。我们使用 Windows的Docker客户端来控制 Docker 虚拟化引擎的构建、运行和管理 。

为了简化这个过程,我们设计了一个叫 [Boot2Docker]https://github.com/boot2docker/boot2docker 的应用程序,你可以通过它来安装虚拟机和运行 Docker。

虽然你使用的是 Windows 的 Docker 客户端,但是 docker 引擎容器依然是运行在 linux 宿主主机上(现在是通过Virtual box)。直到我们开发了 windows 版本的 Docker 引擎,你只需要在你的 Windows 主机上启动一个 Linux 容器。

##安装

  1. 下载最新版本的[Docker for Windows Installer]https://github.com/boot2docker/windows-installer/releases/latest

  2. 运行安装文件,它将会安装virtualbox、MSYS-git boot2docker Linux镜像和Boot2Docker的管理工具。

    ![docker windows软件安装]http://widuu.u.qiniudn.com/windows_docker.png

  3. 从桌面上或者Program Files中找到Boot2Docker for Windows,运行 Boot2Docker Start 脚本。这个脚本会要求你输入 ssh 密钥密码 - 可以简单点(但是起码看起来比较安全),然后只需要按[Enter]按钮即可。

  4. Boot2Docker Start 将启动一个 Unix shell 来配置和管理运行在虚拟主机中的 Docker,运行 docker version 来查看它是否正常工作。

png" alt="windows docker run" />

###运行 Docker

注意:如果你使用的是一个远程的 Docker 进程,像 Boot2docker ,你就不需要像前边的文档实例中那样在输入 Docker 命令之前输入 sudo

Boot2docker start 将会自动启动一个 shell 命令框并配置好环境变量,以便您可以马上使用 Docker :

让我们尝试运行 hello-world 例子。 运行:

$ docker run hello-world

这将会下载一个非常小的 hello-world 镜像,并且打印出 Hello from Docker. 信息。

###使用 Windows 的命令行(cmd.exe) 来管理运行 Docker

启动一个 Windows 命令行(cmd.exe).

运行 Boot2docker 命令,这需要你的 Windows PATH环境变量中包含了 ssh.exe。因此我们需要将安装的 Git 的 bin 目录 (其中包含了 ssh.exe) 配置到我们的 %PATH% 环境变量中,运行如下命令:

set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"

现在,我们可以运行 boot2docker start 命令来启动 Boot2docker 虚拟机。(如果有虚拟主机不存在的错误提示,你需要运行 boot2docker init 命令)。复制上边的指令到 cmd.exe 来设置你的 windows 控制台的环境变量,然后你就可以运行 docker 命令了,譬如 docker ps :

docker cmd.exe

PowerShell 中使用 Docker

启动 PowerShell,你需要将 ssh.exe 添加到你的 PATH 中。

$Env:Path = "${Env:Path};c:\Program Files (x86)\Git\bin"

之后,运行 boot2docker start 命令行,它会打印出 PowerShell 命令,这些命令是用来设置环境变量来连接运行在虚拟机中 Docker 的。运行这些命令,然后你就可以运行 docker 命令了,譬如 docker ps :

Powershell Docker

提示:你可以使用 boot2docker shellinit | Invoke-Expression 来设置你的环境变量来代替复制粘贴 Powershell 命令。

##进一步的细节

Boot2Docker 管理工具提供了如下几个命令:

$ boot2docker
Usage: boot2docker.exe [<options>] {help|init|up|ssh|save|down|poweroff|reset|restart|config|status|info|ip|shellinit|delete|download|upgrade|version} [<args>]

###升级

  • 下载最新的 [Docker for Windows Installer]https://github.com/boot2docker/windows-installer/releases/tag/v1.5.0

  • 运行安装程序,这将升级 Boot2Docker 管理工具

  • 打开终端输入如下的命令来升级你现有的虚拟机:

    $ boot2docker stop
    $ boot2docker download
    $ boot2docker start

###容器端口重定向

boot2Docker的默认用户是 docker 密码是 tcuser

最新版本的 boot2docker 可以设置网络适配器来给容器提供端口访问。

如你运行一个暴露内部端口的容器

docker run --rm -i -t -p 80:80 nginx

当你需要使用一个IP地址来访问 nginx 服务器,你可以使用如下命令来查看 ip。

$ boot2docker ip

通常情况下,是192.168.59.103,但是它可以通过 virtualbox 的 dhcp 来改变。

更多细节信息,请查看[Boot2Docker site]http://boot2docker.io/

###使用PUTTY登陆来代替CMD命令行

Boot2Docker使用 %HOMEPATH%\.ssh 目录来生成你的共有和私有密钥。同样登陆的时候你也需要使用这个目录下的私有密钥。

这个私有密钥需要转换成 PuTTY 所需要的格式。

你可以使用 [puttygen]http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html来生成,具体操作如下:

  1. 打开 puttygen.exe 找到("File"->"Load")按钮来加载 %HOMEPATH%.ssh\id_boot2docker 私有密钥文件。

  2. 点击"Save Private Key"按钮。

  3. 在PUTTY中使用刚才保存的文件来登陆 docker@127.0.0.1:2022

##参考

如果你已经运行 Docker 主机或者你不希望使用 Boot2docker 安装,你可以安装 docker.exe 使用非官方的包管理器 Chocolately。了解更多新,请查看 [Docker package on Chocolatey]https://chocolatey.org/packages/docker。