我的docker随笔2:docker在ubuntu上的安装

本文介绍Docker在linux系统的安装过程,由于笔者一直使用ubuntu系统,所以以此为使用平台,具体是ubuntu 16.04,64位系统。
docker这几年发展十分迅速,自去年(2017年)开始,docker基本上每个月都发行一个版本,之前的版本号是数字,现在已经改为年份+月份的形式,即YY.MM的形式。如笔者第一次安装docker的版本是17.09,即2017年9月份发布的版本。写这个文章时,已经到了18.04版本,——而18.05-dev也在开发中了。docker有2个版本:docker-ce(社区版,Docker Community Edition)、docker-ee(企业版,Docker Enterprise Edition),我们一般使用docker-ce即可满足大部分应用场合。

最简单方案方式

ubuntu仓库已经有了docker软件源,因此可以直接用apt-get命令安装。
1、更新源

1
sudo apt-get update

2、安装

1
sudo apt-get install docker.io

注意,这种方式安装的版本较低。笔者在安装这个命令安装时,版本号为1.13。

官方推荐安装方式

1、更新源

1
sudo apt-get update

2、设置apt可以通过https使用源

1
2
3
4
5
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common

3、添加docker官方的GPG key

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4、检查是添加的key是否正确。即检测是否有9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 指纹(fingerprint)

1
$ sudo apt-key fingerprint 0EBFCD88

本机输出:

1
2
3
4
pub   4096R/0EBFCD88 2017-02-22
Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid Docker Release (CE deb) <docker@docker.com>
sub 4096R/F273FCD8 2017-02-22

5、添加stable仓库

1
2
3
4
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

6、更新源

1
sudo apt-get update

此时可查看有哪些版本可用:

1
2
3
4
5
6
7
8
9
10
11
12
sudu apt-cache madison docker-ce
docker-ce | 5:19.03.5~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.4~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.3~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.2~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:19.03.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.9~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.8~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.03.1~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.03.0~ce-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages

7、安装docker:

1
sudo apt-get install docker-ce

可安装指定版本:

1
sudo apt-get install docker-ce=5:19.03.5~3-0~ubuntu-xenial

7、检测docker版本

1
2
# docker -v
Docker version 17.09.0-ce, build afdb6d4

看到版本号信息,说明已经成功安装了。

国内镜像安装

docker很多资源都在国外服务器,因此,访问时可能会比较慢(甚至无法访问),国内很多提供docker服务厂商拥有镜像资源,因此,如果无法按官方说明安装成功的话,那么可使用国内镜像安装,版本基本上都是最新的。
1、更新源

1
# apt-get update

安装curl:

1
# apt-get install curl -y

2、安装

1
# curl -sSL https://get.daocloud.io/docker | sh

输出信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Executing docker install script, commit: 490beaa
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq apt-transport-https ca-certificates curl software-properties-common >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg"; | apt-key add -qq - >/dev/null
+ sh -c echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial edge" > /etc/apt/sources.list.d/docker.list
+ [ ubuntu = debian ]
+ sh -c apt-get update -qq >/dev/null
+ sh -c apt-get install -y -qq docker-ce >/dev/null
+ sh -c docker version
Client:
Version: 17.10.0-ce
API version: 1.33
Go version: go1.8.3
Git commit: f4ffd25
Built: Tue Oct 17 19:04:16 2017
OS/Arch: linux/amd64
Server:
Version: 17.10.0-ce
API version: 1.33 (minimum version 1.12)
Go version: go1.8.3
Git commit: f4ffd25
Built: Tue Oct 17 19:02:56 2017
OS/Arch: linux/amd64
Experimental: false
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.

打印上述信息说明已经成功安装docker。

添加用户到docker组

如果使用普通用户执行docker命令,会出现错误,如下:

1
2
$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.32/containers/json: dial unix /var/run/docker.sock: connect: permission denied

这是因为普通用户权限不够造成的。先看一下出错信息/var/run/docker.sock文件的权限。

1
2
$ ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Dec 23 15:12 /var/run/docker.sock=

该文件权限为root,所属docker组。因此,解决方法是将普通用户添加到docker组,命令如下:

1
2
sudo gpasswd -a ${USER} docker
sudo newgrp - docker

这样,在后续使用docker时,就不需要频繁切换到root用户了。

更改镜像文件存储路径

停止 docker 服务:

1
# systemctl stop docker

修改 /lib/systemd/system/docker.service 文件,在 ExecStart 命令后追加 --graph <目录>,示例:

1
ExecStart=/usr/bin/dockerd -H fd:// --graph /mnt/docker

重新加载配置文件并启动 Docker 服务:

1
2
# systemctl daemon-reload  // 必须调用此命令
# systemctl start docker

注:原有的镜像需要手动删除。

配置文件

Docker 配置文件为 /etc/docker/daemon.json 。默认不存在。

1
2
3
4
5
6
7
8
9
cat > /etc/docker/daemon.json <<-EOF
{
"registry-mirrors": [
"https://a8qh6yqv.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

释义:
registry-mirrors 指定docker镜像地址,可加速镜像下载。
exec-opts native.cgroupdriver=systemd:指定cgroup驱动为systemd

启动研究

无法直接使用 dockerd 命令启动,必须使用systemd:

1
2
# /usr/bin/dockerd -H fd://
no sockets found via socket activation: make sure the service was started by systemd

李迟 2018.4.9