申请AWS ES2 实例,选择 ubuntu 14.04版操作系统;
配置访问权限及设置SSH密钥;
配置并通过SSH访问服务器实例后台。
Docker只支持64-bit OS,对ubuntu OS的内核版本要求是不低于3.10。
查看当前内核版本:
$ uname -r
3.11.0-15-generic
以管理员身份登录OS,更新包信息,并确保APT支持https,安装CA证书。
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
打开 /etc/apt/sources.list.d/docker.list
文件,若不存在则创建。
编辑该文件,新增或配置访问地址(Ubuntu Trusty 14.04):deb https://apt.dockerproject.org/repo ubuntu-trusty main
保存完毕。
更新 APT 资源包目录:sudo apt-get update
清除旧的文件:sudo apt-get purge lxc-docker
验证APT是否能从正确的远程资源库拉取文件:apt-cache policy docker-engine
现在,如果执行 apt-get upgrade
时,APT将从新的远程资源库拉取数据。
对于Ubuntu Trusty(14.04), Wily(15.10)和Xenial(16.04),建议安装linux内核包linux-image-extra-*
,以支持 aufs
格式的存储驱动。此步为可选项。
安装方法:
sudo apt-get update
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
以管理员身份登录Ubuntu
更新 APT 资源包目录
sudo apt-get update
安装Docker
sudo apt-get install docker-engine
开启docker守护进程:
sudo service docker start
验证docker是否安装成功:
sudo docker run hello-world
该命令将下载一个测试镜像文件,并在docker容器中运行。若安装成功,该命令将输出hello world消息。
检查是否已经自动创建了 docker用户组,若没有,则手动创建:sudo groupadd docker
将当前用户加入到docker组:sudo usermod -aG docker $USER
然后重新登陆 terminal,现在,可以直接运行docker命令,而不需要 sudo
了。
根据需要,此处略。
假如在docker运行服务器上启用了 UFW(简单防火墙),则需要进行一些额外配置。Docker通过桥接方式管理容器网络。UFW默认丢弃所有的端口转发请求,因此,一旦开启UFW,需要为Docker配置端口转发策略。另外,UFW默认拒绝所有访问请求。若希望从外部主机访问当前容器,则应配置允许访问docker所在的端口。Docker端口默认为2376
端口(启用TLS时),或者2375
端口(未启用TLS)。TLS未启用时,通信为非加密的。Docker默认不启用TLS。
配置UFW允许外部访问Docker端口的方法:
1). 检测ufw是否已经安装,及是否已经启用
$ sudo ufw status
Status: inactive # 表示未启用
2). 若已经安装且启用,则打开 /etc/default/ufw
并设置:DEFAULT_FORWARD_POLICY="ACCEPT"
3). 重新加载 UFW:sudo ufw reload
4). 允许访问Docker端口:sudo ufw allow 2375/tcp
Ubuntu系统默认采用127.0.0.1
作为默认的 nameserver
。打开/etc/resolv.conf
文件,可以看到:nameserver 127.0.1
。NetworkManager 服务通过配置dnsmasq
来访问实际的DNS服务器连接,并且同样使用了上述nameserver的配置文件。
在台式机上运行Docker容器时,Docker会提示如下warning信息:
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 nameserver,实际上Docker默认使用了外部的nameserver。为解决这个问题,我们可以指定一个DNS服务器给Docker容器,或禁用NetworkManager的dnsmasq
。如果禁用dnsmasq,可能会导致在某些网络条件下的DNS解析变慢。
以下是配置Docker守护进程,为其指定DNS的具体步骤:
首先,打开并编辑docker配置文件:sudo vi /etc/default/docker
,增加以下配置项:
DOCKER_OPTS="--dns 8.8.8.8 --dns 192.168.1.1"
此处可以配置多个DNS服务器,通过空格分隔。
然后,保存并关闭文件,重启Docker守护进程:sudo service docker restart
另一个方法是禁掉NetworkManager的 dnsmasq
,具体步骤:
首先,打开sudo nano /etc/NetworkManager/NetworkManager.conf
文件,注释掉:dns=dnsmasq
这一行。
保存文件,然后重启 NetworkManager 和Docker:
sudo restart network-manager
sudo restart docker
Ubuntu 15.04版本及以上,采用systemd
来管理启动项;而对于14.10及以下版本,则采用 upstart
来管理。
根据需要,此处略。