Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包应用程序以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

   容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

   Docker的应用场景

  • Web应用的自动化打包和发布
  • 自动化测试和持续集成、发布
  • 在服务型环境中部署和调整数据库或其他的后台应用
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境

        Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroupnamespace,以及AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd

        Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

        下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。



(1)Ubuntu安装Docker

使用具有sudo权限的用户登录Ubuntu Server服务器

使用uname -r命令来查看当前系统的内核版本

ubuntu@VM-54-14-ubuntu:~$ uname -r

4.4.0-91-generic

查看是否安装了wget

ubuntu@VM-54-14-ubuntu:~$ which wget

/usr/bin/wget

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

$ sudo apt-get update $ sudo apt-get install wget

获取最新版本的Docker安装包

ubuntu@VM-54-14-ubuntu:~$ wget -qO- https://get.docker.com/ |sh

验证Docker是否被正确的安装

ubuntu@VM-54-14-ubuntu:~$ 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的安装和启用状态

        ubuntu@VM-54-14-ubuntu:~$ sudo ufw status

        打开和编辑/etc/default/ufw文件

        ubuntu@VM-54-14-ubuntu:~$ sudo vi /etc/default/ufw

        设置DEFAULT_FORWARD_POLICY如下:

        

        保存和关闭文件

        重新加载UFW来使新规则生效

        ubuntu@VM-54-14-ubuntu:~$ sudo ufw reload

        允许Docker端口的入站规则

        ubuntu@VM-54-14-ubuntu:~$ 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

        ubuntu@VM-54-14-ubuntu:~$ 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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐