Docker配置
Dcoker基本组成
镜像( Image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行个或者一个组应用,通过镜像来创建的
仓库(repository):
仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库
Docker 安装
环境配置
# 系统内核版本在 3.10 以上
[root@hwh1 ~]# uname -r
4.18.0-147.8.1.el8_1.x86_64
# 版本信息
[root@hwh1 ~]# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="8.0 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.0"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.0 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8.0:GA"
HOME_URL="https://www.redhat.com/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.0
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.0"
1.首先版本要在 CentOS 7 以上
2.卸载原来的旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.用存储库安装
在一个新主机上安装 Docker Engine 之前,需要先安装 Docker repository
$ sudo yum install -y yum-utils
# 使用国内 阿里云的镜像
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装 Docker Engine
# docker-ce 社区版 docker-ee 企业版
$ sudo yum install docker-ce docker-ce-cli containerd.io
遇到的问题
在新版的 Rhel 8中,进行这一步的时候,会出现 containerd.io 版本过低而无法安装
[root@hwh1 ~]# yum install docker-ce docker-ce-cli containerd.io
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Repository AppStream is listed more than once in the configuration
Docker CE Stable - x86_6 24 kB/s | 3.5 kB 00:00
错误:
问题: package docker-ce-3:19.03.11-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.13-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(尝试添加 '--skip-broken' 来跳过无法安装的软件包 或 '--nobest' 来不只使用最佳选择的软件包)
这时需要更新 containerd.io 到指定版本范围内,由于还没有兼容 rhel 8 的 containerd.io 版本,所以就选择 7 的版本向下兼容安装
wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
5.查看安装是否成功
# 这里安装的是最新版
[root@hwh1 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.11
API version: 1.40
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:13:48 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.11
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 42e35e61f3
Built: Mon Jun 1 09:12:26 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
Version: 0.18.0
GitCommit: fec3683
6.启动 Docker
$ sudo systemctl start docker
[root@hwh1 ~]# ps -ef|grep docker
root 8137 1 0 10:40 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 8329 3283 0 10:41 pts/0 00:00:00 grep --color=auto docker
7.测试 Docker
$ sudo docker run hello-world
8.查看下载的镜像
[root@hwh1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 5 months ago 13.3kB
卸载
1.卸载Docker Engine,CLI和Containerd软件包
$ sudo yum remove docker-ce docker-ce-cli containerd.io
2.删除所有的镜像,容器和卷
$ sudo rm -rf /var/lib/docker
阿里云镜像加速
登录阿里云账号,找到控制台,找到容器镜像服务,里面有容器镜像加速器
配置使用
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["加速器的地址"]
}
EOF
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
流程原理
底层原理
Docker是怎么工作的?
Docker是一个 Client- Server结构的系统, Docker的守护进程运行在主机上。通过 Socket 从客户端访问
DockerServer接收到 Docker-Client的指令,就会执行这个命令
Docker 为什么比 虚拟机 快
- Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
- Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。