0.Docker介绍
Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows服务器上。容器是完全使用沙箱机制(程序受控的环境),相互之间不会有任何接口(类似iPhone的app)而且更轻量级。
核心概念

当我们利用docker安装应用时,docker会自动搜索并下载应用镜像 (image).镜像不仅包含应用本身,还包含应用运行所需要的环境,配置,系统函数库。docker会在运行镜像时创建一个隔离环境,称为容器
1容器(Container):
○容器是镜像创建的运行实例,它是一个轻量级的、可执行的独立软件包 ,包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
○容器化技术使得软件可以在几乎任何地方以相同的方式运行,解决了"在我的机器上可以运行"的问题。
●
2镜像(Image):
镜像是构建容器的模板,它是一个只读 的模板,用于创建Docker容器。
镜像通常是通过一个Dockerfile 定义的,Dockerfile包含了构建镜像所需的指令 。
3仓库(Registry):
○Docker仓库用于存储和分发Docker镜像 。
○公共的Docker Hub是最大的Docker镜像仓库,用户可以在那里找到、分享和运行高质量的Docker镜像。
Docker的主要特点:
●可移植性: Docker容器可以在任何支持Docker的操作系统上运行,应用部署和迁移变得非常简单。
●隔离性: 容器之间是相互隔离的,一个容器的崩溃不会影响其他容器。
●轻量级: 容器不需要像虚拟机那样启动一个完整的操作系统,因此它们可以快速启动,并且占用更少的系统资源。
●**安全性:**容器运行在自己的隔离环境中,并且可以限制对系统资源的访问,从而提供了额外的安全层。
Docker的工作流程:
1编写Dockerfile: 定义应用的依赖、环境变量、配置等。
2构建镜像: 通过Dockerfile构建应用镜像。
3运行容器: 从镜像启动一个或多个容器实例。
4管理容器: 启动、停止、监控和删除容器。
5共享镜像: 将构建好的镜像推送到Docker仓库,以便在其他机器上使用
使用Docker的优势:
●快速部署和扩展: 容器可以在秒内启动,这对于需要快速扩展服务的应用场景非常有用。
●持续集成和持续部署(CI/CD) :Docker可以简化从开发到生产环境的部署流程。
●微服务架构: Docker容器非常适合微服务架构,因为它允许将应用分解为多个独立的服务。
Docker的缺点:
●相对较新: Docker和相关技术相对较新,因此社区支持和文档可能不如一些成熟的技术完善。
●复杂性: 虽然单个容器很简单,但在生产环境中管理大量容器可能会变得复杂。
1.卸载旧版Docker
cv到Linux命令行中执行即可(注意需要root权限 su - root)
shell 脚本
bash
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
本机运行结果:

2.配置Docker的yum库
Docker的yum源是一个软件仓库 ,它允许用户通过yum包管理器在基于Red Hat的Linux发行版(如CentOS、Fedora)上轻松地安装、更新和卸载Docker及其相关组件。Yum(Yellowdog Updater, Modified)是一个用于RPM-based Linux系统的自动化更新和软件包安装的工具。
2.1安装yum工具
Bash
bash
yum install -y yum-utils
安装时显示:Cannot find a valid baseurl for repo: base/7/x86_64,看如下文章
【已解决】CentOS7虚拟机安装yum-utils速度慢_yum install -y yum-utils-CSDN博客
解决方案:
- 备份原有的repo文件(可选,有备无患)
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
- 下载阿里云的repo配置文件
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 刷新YUM元数据缓存
更新完repo文件后,需要清空并重建YUM的元数据缓存,以便让它认识新的仓库配置:
sudo yum clean all
sudo yum makecache
- 使用阿里云源安装yum-utils
sudo yum --disablerepo=\* --enablerepo=aliyun install -y yum-utils
命令行提示了这个错误:

再执行一次安装命令即可,本机运行结果如下:

2.2配置Docker的yum源(更新为阿里云源)
Bash
bash
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
本机运行结果:

更新yum,建立缓存
Bash
bash
sudo yum makecache fast

3.安装Docker
3.1安装命令
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
结算动画(bushi):

3.2启动和校验
#查看Docker版本
docker -v
启动Docker
systemctl start docker
#列出运行在本地Docker主机上的所有镜像
docker images
停止Docker
systemctl stop docker
重启
systemctl restart docker
设置开机自启
systemctl enable docker
执行docker ps命令,如果不报错,说明安装启动成功
docker ps
当未启动时,查看镜像(docker images)结果为:

启动Docker后的查看镜像结果:

4.配置镜像加速
镜像地址可能会变更,如果失效可以百度找最新的docker镜像。
配置镜像步骤如下:
Bash
bash
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"http://mirrors.ccs.tencentyun.com",
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://docker.awsl9527.cn"
]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
Extra: 部署Mysql
安装Mysql:

docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
Extra:Ubuntu部署Docker
Docker引擎安装

执行下面的命令卸载冲突软件包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

2.我们选择存储库安装apt,首先设置docker存储库
即通过配置 Docker 官方提供的软件仓库(Repository),使用 Ubuntu 的 apt 包管理器进行安装和管理。
逐行执行如下命令:
期间会问询是否消耗空间,总是要输入Y确认,涉及下载或安装的命令添加-y选项可以默认都选Y
1. 安装基础工具
sudo apt install ca-certificates curl gnupg
2. 创建密钥目录(权限700)
sudo install -m 0755 -d /etc/apt/keyrings
3. 下载并导入GPG密钥(验证软件包真实性)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4. 设置密钥可读权限
sudo chmod a+r /etc/apt/keyrings/docker.gpg
5. 添加仓库地址(动态获取系统版本)
echo "deb [arch=(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg\] https://download.docker.com/linux/ubuntu (. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
6. 更新软件源(使新仓库生效)
sudo apt update
3安装Docker核心组件
安装核心组件(默认选最新版的)
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4运行镜像验证是否安装成功
sudo docker run hello-world
排错
第四部输出日志如下
pokemon@pokemon-VMware-Virtual-Platform:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Run 'docker run --help' for more information
表明 Docker 客户端无法连接到 Docker Hub(默认的容器镜像仓库)。
-
首先检查服务状态
sudo systemctl status docker
如图显示正常,否则如下命令重启服务器sudo systemctl start docker -
测试网络连接
测试是否能解析 Docker Hub 域名
ping registry-1.docker.io
测试 HTTPS 端口连通性
curl -v

如图,网络不通,测试其他网站是否通ping 8.8.8.8,如图正常抓包

可能是目标端口被阻断(Docker Hub 使用 443 端口)
运行端口测试:
telnet registry-1.docker.io 443
或使用 nc
nc -zv registry-1.docker.io 443

即端口被拒绝,需要配置镜像加速器
编译Docker配置如下:
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.cn-hangzhou.aliyuncs.com"
]
}
EOF
重启Dockersudo systemctl restart docker
重新测试sudo docker run hello-world
如果还是失败,说明镜像源出问题了,重新配置
手配镜像源
网址
https://www.yuque.com/taijuanlebaai/fh01mx/bpn59snshbmekp2m?singleDoc#DgXYk
国内镜像源地址
