序
前段时间参加了EMC Hackathon 2018,取得第二名的成绩,短短几天内接触了很多新的东西,其中就包含Docker的相关内容。抽空陆续总结一下比赛中的东西。
比赛连接:https://github.com/ghostplant/Hackathon_2018
Docker安装
- 默认安装好了Linux系统。这里使用Ubuntu14.04.
安装步骤
1、首先使用root来登录ubuntu
2、是否安装了wget,如果没安装使用如下命令:
sudo apt-get update
sudo apt-get install wget
3、获取最新版的docker:
wget -qO- https://get.docker.com/ | sh
4、验证是否安装正确
sudo docker run hello-world
就是获取一个helloworld的image,然后运行会看到 helloworld welcome等
- 上面是基础的安装,下面是一些优化的操作:
1、权限问题 >>>两种方法
docker 进程通过监听一个 Unix Socket 来替代 TCP 端口。在默认情况下,docker 的 Unix Socket属于root用户,当然其他用户可以使用sudo方式来访问。因为这个原因, docker 进程就一直是root用户运行的。
因此为了方便起见,不用每次都登录root输入密码,可以作如下:
创建 docker 用户组并添加用户
1)使用具有sudo权限的用户来登录你的Ubuntu。
2)创建 docker 用户组并添加用户:$ sudo usermod -aG docker ubuntu
3)销登录并重新登录
4)验证 docker 用户不使用 sudo 命令开执行 Docker:$ docker run hello-world
方法二
1)# 添加一个新的docker用户组:sudo groupadd docker
2)# 添加当前用户到docker用户组里,注意这里的king为ubuntu登录用户名
sudo gpasswd -a king docker
3)# 重启Docker后台监护进程:sudo service docker restart
4)# 重启之后,尝试一下,是否生效:docker version
5)#若还未生效,则系统重启,则生效:sudo reboot
2、调整内存和交换空间
当我们使用 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)重启系统。
3、防火墙问题
UB中的防火墙是UFW而不是iptables
防火墙会对一些端口进行过滤,因此需要进行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
4、DNS问题
设置docker自己的DNS,而不是使用主机中的默认的192或是127等作为DNS:
在桌面环境下使用这些配置来运行 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 vim /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 8.8.4.4
推荐使用国内镜像源:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
警告:如果你正在使用的电脑需要连接到不同的网络,一定要选择一个公共DNS服务器。
4)保存关闭文件。
5)重启 Docker 进程:$ sudo restart docker
5)升级Docker
$ wget -N https://get.docker.com/ | sh