1. 说明
Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。
2. 卸载旧版
如果之前安装过旧版本的Docker,可以使用下面命令卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
3. 安装yum 工具(这一步非必须,可以跳过)
3.1 首先需要大家虚拟机联网,安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
2. 更新本地yum镜像源(官方镜像比较慢 不推荐,推荐阿里镜像仓库):
# 设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast #安装前先更新yum软件包索引
4. 安装docker-ce
4.1 说明
Docker相关组件:docker-ce-cli、docker-ce和containerd.io的区别
概述
docker-ce-cli 是Docker的命令行客户端,用于与Docker守护程序交互;docker-ce 是Docker的社区版,提供了完整的容器化平台;而containerd.io 则是底层的容器运行时组件,用于管理容器的生命周期和镜像管理。这些组件在Docker生态系统中各自发挥着不同的作用,共同构成了强大的容器化解决方案。
Docker-ce-cli
Docker-ce-cli 是Docker的命令行客户端工具(Command Line Interface)。它允许用户通过命令行界面与Docker守护程序进行交互,从而管理容器和镜像。使用docker命令,可以构建、运行、停止、删除容器,以及管理Docker镜像、网络、卷等。Docker-ce-cli 提供了与Docker守护程序通信的途径,使可以轻松地管理容器化应用。
Docker-ce
Docker-ce,全称为Docker Community Edition,是Docker的社区版。它是一个完整的容器化平台,包括了Docker-ce-cli以及其他必要的组件,如Docker守护程序和基础设施管理工具。广义来说,docker-ce包含了dockerd(Docker守护进程)、docker命令行工具、docker-compose等组件;狭义上来讲,docker-ce 是与 docker containerd.io、docker-ce-cli 并列的服务组件。Docker-ce 提供了构建、发布和运行容器化应用所需的一切,使开发者能够更加高效地管理和部署应用程序。它还支持多种操作系统,包括Linux、Windows和macOS。
Containerd.io
Containerd.io 是一个面向容器运行时的基本组件。它充当了Docker引擎的核心,负责管理容器的生命周期、镜像管理和存储。实际上,Docker-ce内部使用containerd.io来处理容器的创建、销毁和运行等操作。containerd.io 的设计更加注重稳定性和可扩展性,使其成为容器生态系统的关键基础。
4.2 安装
yum install -y docker-ce #或以下
后续的 docker-ce-cli containerd.io 其实可以不用安装
yum install docker-ce docker-ce-cli containerd.io
5. 配置信息
mkdir -p /etc/docker/
vi /etc/docker/daemon.json
5.1 镜像加速器
使用docker拉取镜像的时候,有时候会卡在中途死活下载不完。一般这种情况就是因为docker默认的镜像源是Dockerhub,而这个网站在域外。所以和Ubuntu换国内源一样,我们也可以对docker换国内镜像源。
docker的镜像源文件配置在 /etc/docker/daemon.json处,如果没有的话我们就创建一个然后再修改。
常见的国内源有:
Docker国内镜像源:https://registry.docker-cn.com
中科大源:https://docker.mirrors.ustc.edu.cn
网易源:https://hub-mirror.c.163.com
百度源:https://mirror.baidubce.com
腾讯源:https://ccr.ccs.tencentyun.com
阿里源:需要登陆cr.console.aliyun.com
docker 拉取镜像本身是从官网拉取,当然了,现在国内无法拉取镜像了,不过还是先配置上。
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
重启docker,注意由于走的是守护程序daemon,所以daemon进程也需要重启。
sudo systemctl daemon-reload #重启daemon进程
sudo systemctl restart docker #重启docker
最后我们再验证一下是否修改成功,运行
docker info
在长串info信息中如果出现类似下文的内容:
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
http://hub-mirror.c.163.com/
https://mirror.ccs.tencentyun.com/
https://registry.docker-cn.com/
那就说明我们的docker国内镜像源修改成功了。
5.2 数据存储位置
docker 默认的路径是在 /var/lib/docker,该路径是系统路径,分配的存储容量有限,达到上限后会导致容器停止或者无法启动,因此需要修改。
配置内容
"data-root":"/home/disk2/docker/data"
效果如下:
[root@192 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 8.6M 7.8G 1% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.5G 48G 5% /
/dev/sda2 1014M 185M 830M 19% /boot
/dev/mapper/centos-home 965G 704M 964G 1% /home
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 1.6G 0 1.6G 0% /run/user/0
overlay 965G 704M 964G 1% /home/disk2/docker/data/overlay2/04b88b16d2a99ec3e55e3053aa40039be5130aa200fa7655ecc1c33e5aef04ec/merged
5.3 总的内容如下:
{
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"],
"data-root":"/home/disk2/docker/data"
}
6. 启动
6.1 说明
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!
启动docker前,一定要关闭防火墙!!
启动docker前,一定要关闭防火墙!!
启动docker前,一定要关闭防火墙!!
6.2 防火墙关闭命令
# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
6.3 docker的启动,停止,重启 命令
通过命令启动docker:
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
6.4 确认启动是否成功
6.4.1 方式一:
docker -v
docker version
[root@192 ~]# docker version
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
Built: Wed Jun 5 11:32:04 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 26.1.4
API version: 1.45 (minimum version 1.24)
Go version: go1.21.11
Git commit: de5c9cf
Built: Wed Jun 5 11:31:02 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.33
GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
如果能正常显示,表示启动成功
6.4.2 方式二:
docker run hello-world
出现以下信息说明启动成功了
Hello from Docker!
This message shows that your installation appears to be working correctly.
6.4.3 启动不成功
如果启动docker启动不成功有可能是daemon.json加速器里的内容可能是空格引起的,用tab按键进行重新编排,重新重启即可解决
7. 设置开机启动
systemctl enable docker.service
8. 解决docker每次都需要输入sudo的权限问题
# 添加docker用户组
sudo groupadd docker
# 将当前用户添加到docker用户组中
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker
# 重启docker
sudo service docker restart
9. docker命令走代理
由于目前国内docker镜像源都无法使用,需要使用国外的,因此,需要docker pull命令,走我们的代理。
我们在docker的进程服务文件夹配置我们的代理设置,如果没有我们就新建这个文件夹:
sudo mkdir /etc/systemd/system/docker.service.d
然后在docker.service.d文件夹里新建我们的代理文件proxy.conf
sudo vim /etc/systemd/system/docker.service.d/proxy.conf
并把文件写入下面这个格式:
[Service]
Environment="HTTP_PROXY=代理服务器ip:port"
Environment="HTTPS_PROXY=代理服务器ip:port"
保存并退出proxy.conf文件,和更改镜像源一样,重启docker,并重启daemon进程。
sudo systemctl daemon-reload #重启daemon进程
sudo systemctl restart docker #重启docker
最后我们仍然是验证一下是否修改成功,运行
docker info
在长串info信息中如果出现类似下文的内容:
HTTP Proxy: 代理服务器ip:port
HTTPS Proxy: 代理服务器ip:port
那就说明我们已经成功设置docker pull命令走代理了,一般情况下也就不会出现拉取镜像卡死的情况了。
10. docker的常用命令
查看docker状态:systemctl status docker
启动docker:systemctl start docker
停止docker:systemctl stop docker
拉取镜像:docker pull 名称
查看镜像:docker images
删除镜像:docker rmi 镜像id
查看正在启动的容器:docker ps
启动容器:docker start 容器名称
查看容器信息:docker inspect mongo
进入容器:docker exec -it 容器名称 /bin/bash
查看docker网络:docker network ls
当前使用docker镜像的容器(以monggodb为例):docker container ls
查看所有容器:docker ps -a
当前正在使用的所有容器:docker container ls -all
停止容器:docker stop 名称
删除容器(容器需要停止运行再删除):docker container rm 名称
删除所有容器:docker rm $(docker ps -a -q)
查看容器IP地址:docker inspect 321a999f2ecc | grep IPAddress