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

908 阅读5分钟

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

最简单方案方式

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

sudo apt-get update

2、安装

sudo apt-get install docker.io

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

官方推荐安装方式

1、更新源

sudo apt-get update

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

sudo apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

3、添加docker官方的GPG key

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)

$ sudo apt-key fingerprint 0EBFCD88

本机输出:

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仓库

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

6、更新源

sudo apt-get update 

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

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:

sudo apt-get install docker-ce

可安装指定版本:

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

7、检测docker版本

# docker -vDocker version 17.09.0-ce, build afdb6d4

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

国内镜像安装

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

# apt-get update

安装curl:

# apt-get install curl -y

2、安装

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

输出信息如下:

# 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 versionClient:Version:      17.10.0-ceAPI version:  1.33Go version:   go1.8.3Git commit:   f4ffd25Built:        Tue Oct 17 19:04:16 2017OS/Arch:      linux/amd64Server:Version:      17.10.0-ceAPI version:  1.33 (minimum version 1.12)Go version:   go1.8.3Git commit:   f4ffd25Built:        Tue Oct 17 19:02:56 2017OS/Arch:      linux/amd64Experimental: falseIf you would like to use Docker as a non-root user, you should now consideradding your user to the "docker" group with something like:  sudo usermod -aG docker your-userRemember 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命令,会出现错误,如下:

$ docker psGot 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文件的权限。

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

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

sudo gpasswd -a ${USER} dockersudo newgrp - docker

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

更改镜像文件存储路径

停止 docker 服务:

# systemctl stop docker

修改 /lib/systemd/system/docker.service 文件,在 ExecStart 命令后追加 --graph <目录>(注:默认没有该选项),示例:

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

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

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

注1:可用docker info命令查看是否修改成功。
注2:原有的镜像需要手动删除。

默认目录为/var/lib/docker,可做一连接文件,这样不需要修改配置文件。

systemctl stop dockerln -s /home/latelee/workshop/docker/ /var/lib/dockersystemctl start docker

配置文件

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

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

外:CentOS系统安装

如已有旧版本,删除之:

sudo yum remove docker  docker-common docker-selinux docker-engine

否则提示冲突,安装不上:

Error: docker-ce-cli conflicts with 2:docker-1.13.1-203.git0be3e21.el7.centos.x86_64Error: docker-ce conflicts with 2:docker-1.13.1-203.git0be3e21.el7.centos.x86_64

安装系统工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2注:yum-util 提供 yum-config-manager 功能,device-mapper-persistent-data和lvm2是devicemapper驱动依赖

添加国内源(阿里云):

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

生成缓存:

sudo yum makecache 

安装:

sudo yum install docker-ce注:不能用 docker,会安装 1.13.1 版本。

查看版本:

# docker -vDocker version 19.03.13, build 4484c46d9d

默认没有启动,提示:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

手动启动docker服务:

# systemctl start docker

开机自启动:

# systemctl enable docker

其它配置,如加速器,改存储目录等,与前述无本质差别。

如果系统没有启动IP转发,则执行:

# echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/00-system.conf

重启network服务

# systemctl restart network

查看是否修改成功

#  sysctl net.ipv4.ip_forward

也可以重启机器。

启动研究

docker 无法直接使用 dockerd 命令启动,必须使用 systemd,否则提示:

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

基于此试验可知,在嵌入式 ARM 上运行 docker,需要使用 systemd,不能用默认的 init 程序。

实践记录

在容器中删除文件后再保存成镜像,并不会影响原始镜像。如原镜像大小为4GB,启动之,在容器中删除大量文件,保存成镜像,新镜像大小还是4GB。如原镜像为100MB,启动并在容器中安装大量软件,假设为1GB,此时保存,新镜像增加1GB。如果删除临时文件,此时假定为500MB,则新镜像增加500MB。
结论:在小镜像基础上新加文件,软件,删除缓存临时文件。