Ubuntu Server 16.04 安装Docker环境
Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包应用程序以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
Docker的应用场景
- Web应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后台应用
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境
Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
(1)Ubuntu安装Docker
使用具有sudo权限的用户登录Ubuntu Server服务器
使用uname -r命令来查看当前系统的内核版本
aaa@qq.com:~$ uname -r
4.4.0-91-generic
查看是否安装了wget
aaa@qq.com:~$ which wget
/usr/bin/wget
如果wget没有安装,则先升级包管理器,然后在安装它
$ sudo apt-get update $ sudo apt-get install wget
获取最新版本的Docker安装包
aaa@qq.com:~$ wget -qO- https://get.docker.com/ |sh
验证Docker是否被正确的安装
aaa@qq.com:~$ sudo docker run hello-world
(2)Ubuntu Docker可选配置
创建Docker用户组
docker进程通过监听一个Unix Socket来替代TCP端口,在默认情况下,docker的Unix Socket属于root用户,其他用户也可以使用sudo方式访问。因为这个原因,docker进程就一直是root用户运行的。
创建一个叫docker的用户组,并且为用户组添加用户。然后在docker进程启动的时候,docker群组有了Unix Socket的所有权,可以对Socket文件进行读写。
创建docker用户组并添加用户:
注销当前登录并重新登录,验证docker用户不使用sudo命令可执行Docker
调整内存和交换空间(swap accounting)
使用具有sudo权限的用户登录Ubuntu
编辑/etc/default/grub文件
设置GRUB_CMDLINE_LINUX的值如下:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
保存和关闭文件
更新GRUB,重启系统
允许UFW端口转发
当运行docker的宿主主机上使用UFW(简单的防火墙),Docker使用桥接的方式来管理网络。默认情况下,UFW过滤所有的端口转发策略。因此,当在UFW启动的情况下使用docker,必须适当的设置UFW的端口转发策略。
默认情况下,UFW是过滤掉所有的入站规则。如果其他的主机能够访问你的容器,需要允许Docker的默认端口(2375)的所有连接。
设置UFW允许Docker端口的入站规则:
使用具有sudo权限的用户来登录你的Ubuntu。
验证UFW的安装和启用状态
aaa@qq.com:~$ sudo ufw status
打开和编辑/etc/default/ufw文件
aaa@qq.com:~$ sudo vi /etc/default/ufw
设置DEFAULT_FORWARD_POLICY如下:
保存和关闭文件
重新加载UFW来使新规则生效
aaa@qq.com:~$ sudo ufw reload
允许Docker端口的入站规则
aaa@qq.com:~$ sudo ufw allow 2375/tcp
Rules updated
Rules updated (v6)
Docker配置DNS服务
Ubuntu系列的系统允许的时候都使用/etc/resolv.conf配置文件中的127.0.0.1作为域名服务器(nameserver)。NetworkManager设置dnsmasq使用真实的dns服务器连接,并且设置/etc/resolv.conf的域名服务为127.0.0.1。
在桌面环境下Docker使用一个默认的外部域名服务器。可以给Docker容器指定一个DNS服务器。或者禁用NetworkManager的dnsmasq,当禁止dnsmasq可能使某些网络的DNS解析速度变慢。
为Docker指定一个DNS服务器:
使用具有sudo权限的用户登录ubuntu
打开并编辑/etc/default/docker
aaa@qq.com:~$ sudo vi /etc/default/docker
添加设置:
使用8.8.8.8替换如192.168.1.1的本地DNS服务器。可以指定多个DNS服务器,多个DNS服务器使用空格分割,如:
--dns 8.8.8.8 --dns 192.168.1.1
注意:如果正在使用的电脑需要连接到不同的网络环境,则需要选择一个公网DNS服务器。
保存关闭文件,重启Docker进程
$ sudo restart docker
或者,作为替代之前的操作过程,禁止NetManager中的dnsmasq(会使网络变慢)
打开和编辑/etc/default/docker
$sudo vi /etc/NetworkManager/NetworkManager.conf
注释掉dns=dsnmasq:
保存关闭文件
重启NetworkManager和Docker
$sudo restart network-manager
$sudo restart docker
升级Docker
在wget的时候使用-N参数来安装最新版本的Docker:
$wget -N https://get.docker.com | sh
上一篇: 十分钟快速搭建个人博客
下一篇: SQL语句--sql增删改查语句
推荐阅读
-
Ubuntu系统下Angularjs开发环境安装
-
深度学习环境搭建(ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn+其他软件)
-
ubuntu16.10安装docker17.03.0-ce并配置国内源和加速器
-
Windows Server 2008(R2) 一键安装PHP环境(PHP5.3+FastCGI模式)
-
Ubuntu 搭建LNMP环境图文教程 安装所需依赖库
-
ubuntu14.04+docker的安装及使用
-
ubuntu16.04下vim安装失败的原因分析及解决方案
-
ubuntu16.04下安装openssh-server报依赖错误的完美解决方法(非常不错)
-
Ubuntu16.04配置lamp环境的具体方法
-
详解如何用docker安装laravel开发环境