概述
Docker官网:http://www.docker.com
Github Docker 源码:https://github.com/moby
docker的源码项目名称现在叫做moby ,关于改名的原因大部分都认为是docker商业化的缘由
Docker Engine 来说,其主要分为两个系列:
- 社区版 ( CE, Community Edition )社区版 ( Docker Engine CE ) 主要提供了 Docker 中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验,社区版本是免费。
- 企业版 ( EE, Enterprise Edition )则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行,企业版是收费的。
架构
Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。
Docker容器通过Docker镜像来创建。
安装
官方提供的安装教程地址:https://docs.docker.com/engine/install/
脚本安装
官方脚本https://get.docker.com/ 其中关于镜像的选择是阿里云和亚马逊云,中国地区推荐了使用阿里云镜像
最快捷的方式脚本一键安装,国内设置镜像为Aliyun。
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo systemctl start docker
查看当前Docker版本信息
# docker version
Client:
Version: 18.06.0-ce
API version: 1.38
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:08:18 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:10:42 2018
OS/Arch: linux/amd64
Experimental: false
CentOS
官方安装网址https://docs.docker.com/install/linux/docker-ce/centos/
卸载老版本的docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装repo
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
选择安装版本
$ yum list docker-ce --showduplicates | sort -r
Loaded plugins: fastestmirror, langpacks
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.15-3.el7 docker-ce-stable
安装19.03.9版本
sudo yum install docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io
启动
sudo systemctl start docker
阿里云
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
Ubuntu安装
官方安装教程https://docs.docker.com/engine/install/ubuntu/
使用Ubuntu安装命令snap或者apt安装但是一般安装速度会很慢。
sudo snap install docker
$ docker
Command 'docker' not found, but can be installed with:
sudo snap install docker # version 18.06.1-ce, or
sudo apt install docker.io
See 'snap info docker' for additional versions
卸载旧版本docker
sudo apt-get remove docker docker-engine docker.io containerd runc
如果需要删除旧版本的数据 存储路径在
rm -rf /var/lib/docker
更新apt
$ sudo apt-get update
设置相关依赖工具
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common -y
添加官方gpg
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
或者推荐使用国内阿里云docker的
$ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
安装稳定版本官方仓库
$sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
推荐使用国内阿里云的docker源地址
$ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
默认安装最新版本的docker -ce
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
如果选择特定版本安装 查看docker版本列表
$ apt-cache madison docker-ce
docker-ce | 5:19.03.3~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:19.03.2~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:19.03.1~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:19.03.0~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.9~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.8~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.7~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.6~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.5~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.4~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.3~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.2~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.1~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~ubuntu-bionic | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 18.06.3~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 18.06.2~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
docker-ce | 18.03.1~ce~3-0~ubuntu | http://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
在这里选择18.09系列的最新版本
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
查看安装结果
$ docker version
Client:
Version: 18.09.9
API version: 1.39
Go version: go1.11.13
Git commit: 039a7df9ba
Built: Wed Sep 4 16:57:28 2019
OS/Arch: linux/amd64
Experimental: false
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/
唯一的区别是
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
需要查看当前mint 对应的Ubuntu版本
https://www.linuxmint.com/download_all.php
我使用的是19.1的版本 需要替换 $(lsb_release -cs)
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Mac OS 安装
官方地址:https://docs.docker.com/docker-for-mac/release-notes/
但是在国内众所周知的原因,在某些时候下载速度非常慢,现提供dmg的阿里云下载地址:
http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/stable/
新版本的关闭自动更新需要收费
从3.开始如果现在不付费,就无法关闭检查自动更新,这个恰饭手法真是呵呵了
二进制安装
官方安装文档 https://docs.docker.com/engine/install/binaries/
官方二进制地址:https://download.docker.com/linux/static/stable/
解压包文件tar xzvf /path/to/
tar -xvf docker-19.03.9.tgz
将解压出来的docker文件内容移动到 /usr/bin/ 目录下,其他目录也可以,需要保证可以执行docker 和dockerd
sudo cp docker/* /usr/bin/
后台启动
sudo dockerd &
将docker注册成service,vim /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
添加文件权限并启动docker
chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
验证启动结果
systemctl status docker #查看Docker状态
docker -v #查看Docker版本
常用命令
启动
systemctl start docker
守护进程重启
sudo systemctl daemon-reload
重启docker服务
sudo systemctl restart docker
或
sudo service docker restart
关闭docker
sudo systemctl stop docker
或者
sudo service docker stop
常见问题
镜像加速
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/
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加速器。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://5tiu40w5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
如果纠结阿里云注册过程,同样可也可以使用国内其他加速地址也是修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。记得修改加速器都需要保存后重启 Docker 才能使配置生效。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://reg-mirror.qiniu.com"
]
}
EOF
sudo systemctl daemon-reload
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
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
非root用户执行docker
docker pull mysql:5.7
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
Manage Docker as a non-root user
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.
If you don’t 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组
$sudo groupadd docker #添加docker用户组
$sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
$sudo systemctl restart docker //重启docker
$ newgrp docker #更新用户组
$ docker ps #测试docker命令是否可以使用sudo正常使用
或者增加组
sudo usermod -aG docker ubuntu
重置 Docker 本地数据
注意,本操作会移除所有的 Docker 本地数据,包括镜像和容器等。
$ sudo rm -rf /var/lib/docker
selinux版本
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.4.6-3.1.el7.x86_64
---> Package docker-ce.x86_64 3:19.03.9-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.9-3.el7.x86_64
--> Processing Dependency: libcgroup for package: 3:docker-ce-19.03.9-3.el7.x86_64
---> Package docker-ce-cli.x86_64 1:19.03.9-3.el7 will be installed
--> Running transaction check
---> Package containerd.io.x86_64 0:1.4.6-3.1.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.4.6-3.1.el7.x86_64
---> Package docker-ce.x86_64 3:19.03.9-3.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-19.03.9-3.el7.x86_64
---> Package libcgroup.x86_64 0:0.41-21.el7 will be installed
--> Finished Dependency Resolution
Error: Package: containerd.io-1.4.6-3.1.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
Error: Package: 3:docker-ce-19.03.9-3.el7.x86_64 (docker-ce-stable)
Requires: container-selinux >= 2:2.74
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
权限错误
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