.. _install_docker_linux:
======================
Linux环境安装Docker
======================
模拟环境的Docker
===================
为了能够在测试环境中不断模拟各种实验,我采用两种模式运行Docker:
- 在KVM虚拟机中运行Docker
:ref:`clone_vm` 构建了一个名为 ``dockerstack`` 的KVM虚拟机,在KVM虚拟机内部测试各种Docker的功能。这种方式可以保持Host物理主机纯净,不容易搞坏基础环境。虚拟机可以不断clone重建,即使偶尔失误异常也能快速恢复测试环境。
- 在物理主机MacBook Pro上运行Docker
在MacBook Pro笔记本上,在 :ref:`ceph_docker_in_studio` ,主要原因是获得接近物理主机运行性能,并且轻量级易维护。这种Docker运行基础服务,保持稳定减少折腾。
.. note::
大多数Docker测试都在 ``dockerstack`` 中完成。
RHEL/CentOS平台安装Docker
===========================
- 通过发行版安装docker::
sudo yum install docker
- 启动docker服务::
sudo systemctl start docker
- 设置docker在操作系统启动时启动::
sudo systemctl enable docker
.. note::
:ref:`install_docker_centos8` 方法略有不同。
Debian/Ubuntu平台安装Docker
===============================
使用Ubuntu发行版的软件仓库安装Docker
-----------------------------------------
Ubuntu默认发行版本 ``docker.io`` 是可以兼容在Ubuntu主推的LXD系统中,但是版本会较Docker官方低一些。安装非常简便::
sudo apt install docker.io
安装完成后docker服务就已经启动,此时可以使用以下命令查看docker容器::
docker ps
使用Docker官方提供的Docker CE安装Docker
-----------------------------------------
- Docker官方提供了 `Docker CE for Ubuntu `_ ,需要删除掉Ubuntu系统自带 ``docker.io`` 软件之后才可以安装::
sudo apt-get remove docker docker-engine docker.io
.. note::
Docker CE on Ubuntu支持 ``overlay2`` 和 ``aufs`` 存储驱动
- 设置软件仓库::
sudo apt-get update
# 设置apt使用HTTPS访问软件仓库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
- 添加Docker官方GPG key::
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置Docker官方的 ``stable`` 仓库::
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 安装Docker CE::
sudo apt-get update
sudo apt-get install docker-ce
- 验证Docker CE::
sudo docker run hello-world
Arch Linux安装Docker
=======================
Arch Linux发行版的 ``docker`` 软件包就是Docker CE版本,可以直接安装::
sudo pacman -S docker
- 安装完成后检查::
docker info
.. note::
Docker支持不同的 :ref:`docker_storage_driver` ,不同的存储驱动一个影响到容器镜像的存储层(多个镜像共享存储层)性能。
``devicemapper`` 性能较弱,特别在传统磁盘上,所以不建议在生产环境使用 ``devicemapper`` 。
由于Arch Linux使用了较新的内核,所以不需要使用兼容选线,通常的较好选项是 ``overlay2`` 。
.. note::
使用 ``docker info`` 可以看到存储驱动类型,例如::
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: false
.. note::
注意,这里 ``storage driver`` 不是Docker用于数据持久化存储的 :ref:`docker_volume` ,而是用于存储容器镜像的层次型文件系统。
我在 :ref:`ubuntu_linux` 上采用 :ref:`docker_btrfs_driver` (虽然现在我更倾向于生产环境使用XFS) ;在 :ref:`arch_linux` 我采用 :ref:`lvm_xfs_in_studio` 文件系统,所以对应Docker的storage driver是 :ref:`docker_overlay_driver` 。
使用Docker官方脚本安装Docker-CE
==================================
- Docker官方提供了便捷的官方安装脚本快速安装:
.. literalinclude:: install_docker_linux/install_docker_ce_by_script
:language: bash
:caption: 使用Docker官方安装脚本安装Docker-CE
.. _run_docker_without_sudo:
无需sudo运行docker
======================
使用 ``docker`` 指令连接docker服务默认是通过sock,所以用户需要有对 ``/var/run/docker.sock`` 读写的权限。
- 检查操作系统中 ``docker.sock`` 文件权限:
.. literalinclude:: install_docker_linux/docker.sock
:caption: 检查 ``docker.sock`` 的属主
:emphasize-lines: 2
可以看到 ``/var/run/docker.sock`` 属于 ``docker`` 用户组(ubuntu系统),如果你使用的操作系统不同,可能是其他用户组,如 ``root`` ,则对应加入到相应用户组:
.. literalinclude:: install_docker_linux/usermod
:caption: 将当前用户添加到 ``docker`` 用户组
.. note::
实践发现上述将用户添加到 ``docker`` 用户组不能立即生效。我尝试直接重启 ``docker`` 服务未生效,实际是重启了操作系统之后才生效。
快速起步
===========
当你安装完docker运行环境,我们就可以开始快速 :ref:`docker_run` ,体验docker神奇的魔力。当然,如果你使用的操纵系统比较特殊,例如macOS,或者你使用了最新的CentOS 8操作系统,请参考对应环境的安装:
- :ref:`install_docker_macos`
- :ref:`install_docker_centos8`
参考
======
- `Get Docker CE for Ubuntu `_
- `How To Install Docker on Ubuntu 16.04 `_
- `Docker Engine on Ubuntu `_ - Ubuntu主推LXC容器(LXD),不过也同时支持Docker Engine