Docker
Docker 介绍
Docker 是一种快速构建, 运行和管理应用的工具, 帮助我们部署项目以及项目所依赖的各种组件.
Docker 是一个典型的运维工具.
后端开发人员往往也是需要参与开发以及测试环境的一些基础的部署的.
虚拟机是一种虚拟技术. Docker 容器技术也是一种虚拟技术.
Docker 是用 Go 语言开发的开源项目.
Docker 官网: https://www.docker.com/
官方文档地址: https://docs.docker.com/
仓库地址: https://hub.docker.com/
容器内的应用直接运行在宿主机的内核之上, 容器没有自己的内核, 也没有虚拟出硬件.
每一个容器都是互相隔离的, 每一个容器内都有一个属于自己的文件系统.

Docker 的安装
卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-selinux
说明没有旧的需要卸载.
配置 Docker 的 yum 库
安装一个 yum 工具.
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
该命令执行失败:
尝试另一个命令:
yum install -y yum-utils
依然失败, 且相同报错:
主要报错:
Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"
查阅了一些博客, 重点参考了: https://www.cnblogs.com/kohler21/p/18331060
执行的操作:
cd /etc/yum.repos.d
效果:
cp CentOS-Base.repo CentOS-Base.repo.backup
vi CentOS-Base.repo
将内容改为:
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ #baseurl=http://vault.centos.org/7.9.2009/x86_64/os/ baseurl=http://vault.centos.org/7.9.2009/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ #baseurl=http://vault.centos.org/7.9.2009/x86_64/os/ baseurl=http://vault.centos.org/7.9.2009/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra #$baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ #baseurl=http://vault.centos.org/7.9.2009/x86_64/os/ baseurl=http://vault.centos.org/7.9.2009/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/ #baseurl=http://vault.centos.org/7.9.2009/x86_64/os/ baseurl=http://vault.centos.org/7.9.2009/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
保存并退出.
执行命令:
sudo yum clean all
效果:
sudo yum makecache
效果:
执行命令:
cd /etc/yum.repos.d
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
这三条指令的执行效果:
执行命令:
cat CentOS-Base.repo
效果:
输出的内容具体如下:
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
再执行下面两条指令:
sudo yum clean all
sudo yum makecache
效果:
接下来接着安装 yum, 执行指令:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
效果:
看到最后有完毕二字, 说明这条指令执行成功了.
执行命令,配置 Docker 的 yum 源(阿里云源):
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,建立缓存:
sudo yum makecache fast
效果:
安装 Docker
执行命令,安装 Docker:
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
效果:
启动和校验
查看 Docker 版本:
docker -v
效果:
版本为:
Docker version 26.1.4, build 5650f9b
查看 Docker 镜像:
docker images
效果:
说明无法连接到 Docker 的守护进程.
Docker 本身也是一个服务, 需要启动起来并一直在这里, 服务启动起来之后, 我们输入的一切命令都是发送给这个进程, 由这个进程来处理我们输入的命令. 现在连不上意味着 Docker 还没有启动. 所以接下来要做的事情就是启动 Docker.
执行命令:
systemctl enable docker
systemctl start docker
然后再次执行:
docker images
效果:
说明当前还没有镜像.
命令解释:
# 启动Docker systemctl start docker # 停止Docker systemctl stop docker # 重启 systemctl restart docker # 设置开机自启 systemctl enable docker # 执行docker ps命令,如果不报错,说明安装启动成功 docker ps
配置镜像加速
以后用 Docker 下载东西时, 默认是在国外, 所以要配置镜像加速. 可以是华为云, 腾讯云, 阿里云等等.
镜像地址可能会变更,如果失效可以百度找最新的 docker 镜像。
配置镜像步骤如下:
首先访问阿里云网站: https://www.aliyun.com/
注册一个账号。



第一条指令:
sudo mkdir -p /etc/docker
第二条命令:
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://f7xqxlg7.mirror.aliyuncs.com"] } EOF
第三条命令:
sudo systemctl daemon-reload
第四条命令:
sudo systemctl restart docker
效果:

部署 MySQL
部署 MySQL
指令:
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql
一行命令比较长可以用 \ 换行显示.
报错:
检查发现自己的网络没有任何问题:
重点参考博客: https://www.cnblogs.com/liujunjun/p/18546650
首先进入 /etc/docker/daemon.json 文件:
文件内容为:
复制下面的内容:
{ "registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "https://dockercf.jsdelivr.fyi", "https://docker.jsdelivr.fyi", "https://dockertest.jsdelivr.fyi", "https://mirror.aliyuncs.com", "https://dockerproxy.com", "https://mirror.baidubce.com", "https://docker.m.daocloud.io", "https://docker.nju.edu.cn", "https://docker.mirrors.sjtug.sjtu.edu.cn", "https://docker.mirrors.ustc.edu.cn", "https://mirror.iscas.ac.cn", "https://docker.rainbond.cc"] }
替换现在的内容.
Vim 全部删除: esc 状态下, 先按下 gg, 再按下 dG.
然后复制上面的内容.
将系统的内容粘贴到 Vim: Shift + Insert
然后然后在终端重新启动一下 Docker, 执行两条指令:
systemctl daemon-reload
systemctl restart docker
发生了启动失败的情况:
检查发现是刚才粘贴时不小心粘错了, 产生了语法错误:
重新粘贴了一遍, 执行这两条指令就成功了.
然后再执行部署 MySQL 的指令, 就部署成功了:
再部署一个 MySQL, 换了名称和端口:
docker run -d \ --name mysql2 \ -p 3307:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql
很快就部署成功了, 这次不用再下载镜像了, 镜像只需要下载一次:
检查是否部署成功:
当我们利用 Docker 安装应用时,Docker 会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker 会在运行镜像时创建一个隔离环境,称为容器(container)。
镜像仓库:存储和管理镜像的平台,Docker 官方维护了一个公共仓库:Docker Hub。
命令解释
主机访问虚拟机成功:
主机无法访问 Docker 容器, 因为是隔离的:
指令:
docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql
解释:
docker run :创建并运行一个容器,-d 是让容器在后台运行
--name mysql :给容器起个名字,必须唯一
-p 3306:3306 :设置端口映射
-e KEY=VALUE :是设置环境变量
mysql :指定运行的镜像的名字
镜像名称一般分两部分组成:[repository]: [tag]
其中 repository 就是镜像名.
tag 是镜像的版本.
在没有指定 tag 时,默认是 latest,代表最新版本的镜像.
Docker 常见命令
docker images
现在的镜像有:
docker rmi
删除镜像.
docker build
构建镜像.
docker save
保存镜像到本地为一个压缩文件.
docker load
加载镜像文件.
docker push
把镜像推到镜像仓库. 仓库可以是公用的或者公司内部的一个私服.
docker pull
从镜像仓库拉去镜像.
docker run
运行镜像. 如果发现镜像不存在, 就执行拉去操作然后再运行.
docker stop
停止容器的运行.
docker start
启动容器.
docker ps
查看容器的状态.
ps: process status, 进程状态.
docker rm
删除容器.
docker log
查看容器运行日志.
docker exec
执行一些命令进入容器的内部.
Docker 部署 Nginx
Interactive terminal: 可交互终端.
打开 KeXueShangWang
, 进入 hub.docker.com.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)