欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu Server 16.04 安装Docker环境

程序员文章站 2022-07-10 12:14:40
...

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

Ubuntu Server 16.04 安装Docker环境
Ubuntu Server 16.04 安装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用户组并添加用户:

        Ubuntu Server 16.04 安装Docker环境

        注销当前登录并重新登录,验证docker用户不使用sudo命令可执行Docker

        Ubuntu Server 16.04 安装Docker环境

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

        使用具有sudo权限的用户登录Ubuntu

        编辑/etc/default/grub文件

        设置GRUB_CMDLINE_LINUX的值如下:

 GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
Ubuntu Server 16.04 安装Docker环境

保存和关闭文件

更新GRUB,重启系统

Ubuntu Server 16.04 安装Docker环境

允许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如下:

        Ubuntu Server 16.04 安装Docker环境

        保存和关闭文件

        重新加载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

        添加设置:

        Ubuntu Server 16.04 安装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