Docker 简介

Docker 是什么?

基本概念

  • 镜像(image): 相当于一个 root 文件系统
  • 容器(container): 是镜像运行的实体(镜像和容器的关系就像是面向对象编程中的类和实例一样)
  • 仓库(repository): 可看作是一个代码控制中心, 用来保存镜像

Docker 安装

Docker 在线安装

  1. 通过 uname -r 命令查看你当前的内核版本
1
uname -r
  1. root权限更新Yum包
1
yum update
  1. 卸载旧版本:(如果安装过旧版本的话,旧版名称是 docker , 最新社区版 docker-engine, 目前已改名为 docker-ce )
1
yum -y remove docker docker-common docker-selinux docker-engine
  1. 要设置一个稳定的存储库

(1)设置存储库的命令yum-config-manager,该命令是在 yum-utils 包下,所以要先安装yum-utils

1
sudo yum install -y yum-utils

(2)设置稳定版docker的存储库,使用下面的存储库在下载 docker 的时候可能会比较慢,可以按需修改为国内的存储库。

1
2
3
4
5
6
7
8
# 官方默认的存储库
$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 此处可能会报错 (原因是国内访问不到 docker 官方镜像的缘故)
Loaded plugins: fastestmirror(镜像)
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo:
[Errno 14] curl#35 - "TCP connection reset by peer

设置为阿里的存储库

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

开启每夜更新源,好像是每天晚上更新存储库的,可以不设置

1
sudo yum-config-manager --enable docker-ce-nightly

开启测试版的源,可以不设置

1
sudo yum-config-manager --enable docker-ce-test

一般情况下使用第一条命名设置稳定版的存储库就可以了,docker-ce-nightly和docker-ce-test默认是关闭的。后续也可以按需开启或关闭。

  1. 配置镜像加速器(必须要配置,否则会出现访问镜像并不稳定 ,而且下载缓慢等问题)
1
2
3
4
5
6
7
8

$ mkdir -p /etc/docker
$ tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["输入你自己控制台此处的地址"]
> }
EOF
$ systemctl daemon-reload (导入操作)
  1. 安装 docker 引擎
  • 安装最新 docker 引擎
1
sudo yum install docker-ce docker-ce-cli containerd.io

yum 单独安装http://container.io程序

1
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
  • 选择特定版本安装
1
yum list docker-ce --showduplicates | sort -r
	使用以下命令安装
1
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  1. 启动并加入开机启动
1
2
3
systemctl start docker       (重启命令  $  systemctl restart docker ) 
systemctl enable docker 开机启动
docker version 查看 docker 版本号
  1. 验证是否安装成功
1
docker run hello-world

Docker 离线安装

  1. 从官方下载 Docke r安装包并上传至虚拟机

https://download.docker.com/linux/static/stable/x86_64/

  1. 解压安装包
1
tar -xvf docker-19.03.9.tgz
  1. 将解压出来的docker文件内容移动到 /usr/bin/ 目录下
1
2
#移动命令 复制命令请用cp
mv docker/* /usr/bin/
  1. 将 docker 注册为 service 服务
1
vi /etc/systemd/system/docker.service

docker.service 编辑的内容

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
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service] b's
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
  1. 启动docker
1
2
3
4
chmod +x /etc/systemd/system/docker.service #设置权限
systemctl daemon-reload
systemctl start docker #启动Docker
systemctl enable docker.service #设置开机自启
  1. 验证
1
2
systemctl status docker  #查看Docker状态
docker -v #查看Docker版本

Tips:

1
2
3
4
5
6
7
8
9
#忽略证书配置
ExecStart=/usr/bin/dockerd --insecure-registry Docker仓库IP:Docker端口号
#启动容器报错:
/usr/bin/docker-current: Error response from daemon: shim error: docker-runc not installed on system.
#解决:
ln -s /usr/libexec/docker/docker-runc-current /usr/bin/docker-runc
#docker离线安装时出的问题
#在服务器上使用docker run启动容器时报错:docker: Error response from daemon: OCI runtime create failed: container_linux.go:449;container init caused "write /proc/self/attr/keycreate: permission denied"": unknown.
[https://www.cnblogs.com/jamyxu/p/12641453.html](https://www.cnblogs.com/jamyxu/p/12641453.html)