概述

Docker官网:http://www.docker.com
Github Docker 源码:https://github.com/moby
docker的源码项目名称现在叫做moby ,关于改名的原因大部分都认为是docker商业化的缘由
图片.png
Docker Engine 来说,其主要分为两个系列:

  • 社区版 ( CE, Community Edition )社区版 ( Docker Engine CE ) 主要提供了 Docker 中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验,社区版本是免费。
  • 企业版 ( EE, Enterprise Edition )则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行,企业版是收费的。
  • image.png

架构

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
Docker容器通过Docker镜像来创建。
image.png

安装

官方提供的安装教程地址:https://docs.docker.com/engine/install/

脚本安装

官方脚本https://get.docker.com/ 其中关于镜像的选择是阿里云和亚马逊云,中国地区推荐了使用阿里云镜像
最快捷的方式脚本一键安装,国内设置镜像为Aliyun。

  1. sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  2. sudo systemctl start docker

查看当前Docker版本信息

  1. # docker version
  2. Client:
  3. Version: 18.06.0-ce
  4. API version: 1.38
  5. Go version: go1.10.3
  6. Git commit: 0ffa825
  7. Built: Wed Jul 18 19:08:18 2018
  8. OS/Arch: linux/amd64
  9. Experimental: false
  10. Server:
  11. Engine:
  12. Version: 18.06.0-ce
  13. API version: 1.38 (minimum version 1.12)
  14. Go version: go1.10.3
  15. Git commit: 0ffa825
  16. Built: Wed Jul 18 19:10:42 2018
  17. OS/Arch: linux/amd64
  18. Experimental: false

CentOS

官方安装网址https://docs.docker.com/install/linux/docker-ce/centos/
卸载老版本的docker

  1. $ sudo yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-selinux \
  9. docker-engine-selinux \
  10. docker-engine

安装repo

  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo

选择安装版本

  1. $ yum list docker-ce --showduplicates | sort -r
  2. Loaded plugins: fastestmirror, langpacks
  3. docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
  4. docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
  5. docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
  6. docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
  7. docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
  8. docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
  9. docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
  10. docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
  11. docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
  12. docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
  13. docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
  14. docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
  15. docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
  16. docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
  17. docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
  18. docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
  19. docker-ce.x86_64 3:19.03.15-3.el7 docker-ce-stable

安装19.03.9版本

  1. sudo yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io

启动

  1. sudo systemctl start docker

阿里云

  1. # step 1: 安装必要的一些系统工具
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # Step 2: 添加软件源信息
  4. sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. # Step 3
  6. sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
  7. # Step 4: 更新并安装Docker-CE
  8. sudo yum makecache fast
  9. sudo yum -y install docker-ce
  10. # Step 4: 开启Docker服务
  11. sudo service docker start

Ubuntu安装

官方安装教程https://docs.docker.com/engine/install/ubuntu/
使用Ubuntu安装命令snap或者apt安装但是一般安装速度会很慢。
sudo snap install docker

  1. $ docker
  2. Command 'docker' not found, but can be installed with:
  3. sudo snap install docker # version 18.06.1-ce, or
  4. sudo apt install docker.io
  5. See 'snap info docker' for additional versions

卸载旧版本docker

  1. sudo apt-get remove docker docker-engine docker.io containerd runc

如果需要删除旧版本的数据 存储路径在

  1. rm -rf /var/lib/docker

更新apt

  1. $ sudo apt-get update

设置相关依赖工具

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

添加官方gpg

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

或者推荐使用国内阿里云docker的

  1. $ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

安装稳定版本官方仓库

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

推荐使用国内阿里云的docker源地址

  1. $ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
  2. $ sudo apt-get update

默认安装最新版本的docker -ce

  1. $ sudo apt-get install docker-ce docker-ce-cli containerd.io

如果选择特定版本安装 查看docker版本列表

  1. $ apt-cache madison docker-ce
  2. docker-ce | 5:19.03.3~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  3. docker-ce | 5:19.03.2~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  4. docker-ce | 5:19.03.1~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  5. docker-ce | 5:19.03.0~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  6. docker-ce | 5:18.09.9~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  7. docker-ce | 5:18.09.8~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  8. docker-ce | 5:18.09.7~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  9. docker-ce | 5:18.09.6~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  10. docker-ce | 5:18.09.5~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  11. docker-ce | 5:18.09.4~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  12. docker-ce | 5:18.09.3~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  13. docker-ce | 5:18.09.2~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  14. docker-ce | 5:18.09.1~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  15. docker-ce | 5:18.09.0~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  16. docker-ce | 18.06.3~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  17. docker-ce | 18.06.2~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  18. docker-ce | 18.06.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  19. docker-ce | 18.06.0~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
  20. docker-ce | 18.03.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages

在这里选择18.09系列的最新版本

  1. sudo apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic containerd.io

查看安装结果

  1. $ docker version
  2. Client:
  3. Version: 18.09.9
  4. API version: 1.39
  5. Go version: go1.11.13
  6. Git commit: 039a7df9ba
  7. Built: Wed Sep 4 16:57:28 2019
  8. OS/Arch: linux/amd64
  9. Experimental: false
  10. 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.39/version: dial unix /var/run/docker.sock: connect: permission denied

Linux Mint 安装

可以参考Ubuntu安装方式https://docs.docker.com/install/linux/docker-ce/ubuntu/
唯一的区别是

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

需要查看当前mint 对应的Ubuntu版本
https://www.linuxmint.com/download_all.php
我使用的是19.1的版本 需要替换 $(lsb_release -cs)

  1. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

安装

  1. sudo apt-get update
  2. sudo apt-get install docker-ce docker-ce-cli containerd.io

Mac OS 安装

官方地址:https://docs.docker.com/docker-for-mac/release-notes/
Docker——Overview - 图4

但是在国内众所周知的原因,在某些时候下载速度非常慢,现提供dmg的阿里云下载地址:
http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/
Docker——Overview - 图5

新版本的关闭自动更新需要收费

图片.png
从3.开始如果现在不付费,就无法关闭检查自动更新,这个恰饭手法真是呵呵了图片.png

二进制安装

官方安装文档 https://docs.docker.com/engine/install/binaries/
官方二进制地址:https://download.docker.com/linux/static/stable/
图片.png
图片.png

解压包文件tar xzvf /path/to/.tar.gz,例如安装19.03.9版本

  1. tar -xvf docker-19.03.9.tgz

将解压出来的docker文件内容移动到 /usr/bin/ 目录下,其他目录也可以,需要保证可以执行docker 和dockerd

  1. sudo cp docker/* /usr/bin/

后台启动

  1. sudo dockerd &

将docker注册成service,vim /etc/systemd/system/docker.service

  1. [Unit]
  2. Description=Docker Application Container Engine
  3. Documentation=https://docs.docker.com
  4. After=network-online.target firewalld.service
  5. Wants=network-online.target
  6. [Service]
  7. Type=notify
  8. # the default is not to use systemd for cgroups because the delegate issues still
  9. # exists and systemd currently does not support the cgroup feature set required
  10. # for containers run by docker
  11. ExecStart=/usr/bin/dockerd
  12. ExecReload=/bin/kill -s HUP $MAINPID
  13. # Having non-zero Limit*s causes performance problems due to accounting overhead
  14. # in the kernel. We recommend using cgroups to do container-local accounting.
  15. LimitNOFILE=infinity
  16. LimitNPROC=infinity
  17. LimitCORE=infinity
  18. # Uncomment TasksMax if your systemd version supports it.
  19. # Only systemd 226 and above support this version.
  20. #TasksMax=infinity
  21. TimeoutStartSec=0
  22. # set delegate yes so that systemd does not reset the cgroups of docker containers
  23. Delegate=yes
  24. # kill only the docker process, not all processes in the cgroup
  25. KillMode=process
  26. # restart the docker process if it exits prematurely
  27. Restart=on-failure
  28. StartLimitBurst=3
  29. StartLimitInterval=60s
  30. [Install]
  31. WantedBy=multi-user.target

添加文件权限并启动docker

  1. chmod +x /etc/systemd/system/docker.service
  2. systemctl daemon-reload
  3. systemctl start docker #启动Docker
  4. systemctl enable docker.service #设置开机自启

验证启动结果

  1. systemctl status docker #查看Docker状态
  2. docker -v #查看Docker版本

常用命令

启动

  1. systemctl start docker

守护进程重启

  1. sudo systemctl daemon-reload

重启docker服务

  1. sudo systemctl restart docker

  1. sudo service docker restart

关闭docker

  1. sudo systemctl stop docker

或者

  1. sudo service docker stop

常见问题

镜像加速

  1. Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?). Using system default: https://index.docker.io/v1/
  2. Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

鉴于国内网络问题,在拉取 Docker 镜像会非常缓慢,需要配置加速器来解决。
阿里云 - 容器Hub服务控制台:https://cr.console.aliyun.com/
注册并登陆阿里云 - 开发者平台之后,在首页点击“创建我的容器镜像”,然后就会来到阿里云的服务面板。点击加速器标签。根据提示输入Docker登录时需要使用的密码(后期可更改),用户名就是登录阿里云的用户名。在出现的页面中,可以得到一个专属的镜像加速地址,类似于https://xxxxx.mirror.aliyuncs.com。根据页面中的“操作文档”信息,配置自己的Docker加速器。
Docker——Overview - 图10

  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://5tiu40w5.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker

如果纠结阿里云注册过程,同样可也可以使用国内其他加速地址也是修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。记得修改加速器都需要保存后重启 Docker 才能使配置生效。

  1. sudo tee /etc/docker/daemon.json <<-'EOF'
  2. {
  3. "registry-mirrors": [
  4. "https://mirror.ccs.tencentyun.com",
  5. "https://docker.mirrors.ustc.edu.cn",
  6. "https://reg-mirror.qiniu.com"
  7. ]
  8. }
  9. EOF
  10. sudo systemctl daemon-reload
  11. sudo systemctl restart docker

Docker Hub 镜像加速器列表

七牛云 https://hub.qiniu.com/home(需要注册)
腾讯云 https://mirror.ccs.tencentyun.com
科大镜像站 https://docker.mirrors.ustc.edu.cn
DaoCloud 镜像站:http://f1361db2.m.daocloud.io

启动docker

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

非root用户执行docker

  1. docker pull mysql:5.7
  2. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/create?fromImage=mysql&tag=5.7: dial unix /var/run/docker.sock: connect: permission denied

原因
docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问,一种是使用sudo

  1. Manage Docker as a non-root user
  2. The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.
  3. If you dont want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

添加非root用户到docker组

  1. $sudo groupadd docker #添加docker用户组
  2. $sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
  3. $sudo systemctl restart docker //重启docker
  4. $ newgrp docker #更新用户组
  5. $ docker ps #测试docker命令是否可以使用sudo正常使用

或者增加组

  1. sudo usermod -aG docker ubuntu

重置 Docker 本地数据

注意,本操作会移除所有的 Docker 本地数据,包括镜像和容器等。

  1. $ sudo rm -rf /var/lib/docker

selinux版本

  1. --> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.4.6-3.1.el7.x86_64
  2. ---> Package docker-ce.x86_64 3:19.03.9-3.el7 will be installed
  3. --> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.9-3.el7.x86_64
  4. --> Processing Dependency: libcgroup for package: 3:docker-ce-19.03.9-3.el7.x86_64
  5. ---> Package docker-ce-cli.x86_64 1:19.03.9-3.el7 will be installed
  6. --> Running transaction check
  7. ---> Package containerd.io.x86_64 0:1.4.6-3.1.el7 will be installed
  8. --> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.4.6-3.1.el7.x86_64
  9. ---> Package docker-ce.x86_64 3:19.03.9-3.el7 will be installed
  10. --> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.9-3.el7.x86_64
  11. ---> Package libcgroup.x86_64 0:0.41-21.el7 will be installed
  12. --> Finished Dependency Resolution
  13. Error: Package: containerd.io-1.4.6-3.1.el7.x86_64 (docker-ce-stable)
  14. Requires: container-selinux >= 2:2.74
  15. Error: Package: 3:docker-ce-19.03.9-3.el7.x86_64 (docker-ce-stable)
  16. Requires: container-selinux >= 2:2.74
  17. You could try using --skip-broken to work around the problem

使用下面的命令安装 container-selinux:
yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-3.el7.noarch.rpm
container-selinux 更多版本可以在下面链接查看:
http://mirror.centos.org/centos/7/extras/x86_64/Packages/
参考:
https://stackoverflow.com/questions/45272827/docker-ce-on-rhel-requires-container-selinux-2-9

k8s.gcr.io等镜像无法下载

部署K8S最大的难题是镜像下载,在国内无FQ环境情况下很难从k8s.gcr.io等镜像源里下载镜像。
这种情况下正确做法是:
1.直接指定国内镜像代理仓库(如阿里云代理仓库)进行镜像拉取下载。
2.成功拉取代理仓库中的镜像后,再将其tag打标签成为k8s.gcr.io对应镜像。
3.最后再删除从代理仓库中拉取下来的镜像。
4.要确保imagePullPolicy策略是IfNotPresent,即本地有镜像则使用本地镜像,不拉取!
或者将下载的镜像放到harbor私有仓库里,然后将image下载源指向harbor私仓地址。

阿里云代理仓库地址为:registry.aliyuncs.com/google_containers
比如下载
k8s.gcr.io/coredns:1.6.5
可以代理为:
registry.aliyuncs.com/google_containers/coredns:1.6.5

权限错误

  1. 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.24/version": dial unix /var/run/docker.sock: connect: permission denied

参考文章

https://docs.docker.com/engine/docker-overview/
https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux
https://github.com/yeasy/docker_practice
https://www.cnblogs.com/chenlove/p/14990649.html