这里写目录标题
一、Docker安装
1.1 在线安装
- 查看是否安装docker
或者用docker -v 查看当前系统版本,来判断是否安装dockeryum list installed | grep docker
docker -v
- 安装docker
yum -y install docker
- Linux默认安装位置
默认安装路径:/var/lib/docker
镜像位置:/var/lib/docker/image
容器位置:/var/lib/docker/containers - 启动docker
systemctl start docker
1.2 离线安装
下载安装包
下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz。其它版本可打开以下页面下载https://download.docker.com/linux/static/stable/x86_64/
安装配置
上传压缩包到服务器
解压,tar -xvf docker-24.0.7.tgz
将解压出来的docker文件内容移动到 /usr/bin/ 目录下,cp docker/* /usr/bin/
注册编辑docker服务,vi /etc/systemd/system/docker.service,内容如下
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] 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
启动服务
systemctl daemon-reload
systemctl enable docker && systemctl start docker
1.3 配置镜像
在daemon.json文件中,配置阿里云的镜像加速器地址,如下所示:
{
“registry-mirrors”: [“https://registry.cn-hangzhou.aliyuncs.com”]
}
保存daemon.json文件。
重启Docker服务以应用新的配置:
sudo systemctl daemon-reload
sudo systemctl restart docker
1.4 Docker启动相关命令
- 启动docker
systemctl start docker
- 停止docker
systemctl stop docker
- 重启docker
systemctl restart docker
- 查看docker状态
systemctl status docker
二、Docker三大核心概念
Docker的三大核心概念是镜像(Image)、容器(Container)和仓库(Repository)。
2.1 镜像
镜像是一个只读的模板,用来创建Docker容器。里面包含一个完整的操作系统环境,里面包含了程序和必要的以来文件。
- 查看镜像
docker images
- 搜索镜像
docker search 镜像名称
- 拉取镜像
docker pull 镜像名称
- 删除镜像
docker rmi 镜像ID
- 删除所有镜像
docker rmi `docker images -q`
2.2 容器
容器是从镜像创建的运行实例,可以运行、开始、停止、删除等。每个容器是相互隔离的、保证安全的平台。
- 查看正在运行的容器
docker ps
- 查看所有容器
docker ps -a
- 查看最后一次运行的容器
docker ps -l
- 查看停止的容器
docker ps -f status=exited
- 停止与启动容器
docker start 容器名称(或者容器ID)
docker stop 容器名称(或者容器ID)
- 交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
exit
- 守护式方式创建容器
登录守护式容器方式docker run -di --name=容器名称 镜像名称:标签
docker exec -it 容器名称 (或者容器ID) /bin/bash
2.3 仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上 往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的 标签(tag)。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
2.3.1 公有仓库
公有仓库是指可以供用户面免费使用的Docker镜像仓库,用户可以在其中存储和分享自己的Docker镜像。Docker官方提供了Docker HUb公有仓库,其中包含了大量的Docker镜像,用户可以通过搜索和下载这些镜像来快速部署和运行应用程序。
2.3.2 私有仓库
私有仓库是指用户自己搭建的Docker镜像仓库,用于存储和管理自己的Docker镜像。相比于公有仓库,私有仓库更加安全和可控,用户可以完全掌控自己的镜像,避免了公有仓库的镜像被篡改或者存在漏洞而导致的安全问题。
私有仓库可以部署在本地服务器或者云服务器上,用户可以根据自己的需求进行扩容和优化。
Docker官方提供了Docker Registry作为私有仓库的解决方案,用户可以在其中搭建自己的私有仓库。使用私有仓库可以提高应用程序的安全性和可控性。
安装Docker Registry
Docker Registry是Docker 官方提供的镜像仓库,可以用来搭建私有仓库。可以通过命令来拉取Docker Registry镜像:docker pull registry
运行Docker Registry容器
可以通过命令来运行Docker Registry容器:docker run -d -p 5000:5000 --name registry registry
其中,-p 5000:5000表示将容器内部的5000端口映射到主机的5000端口,–name registry表示指定容器的名称为 registry 。
配置Docker客户端
在使用私有仓库时,需要在Docker客户端配置私有仓库的地址,可以通过命令来:echo '{"insecure-registries":["<私有仓库地址>:<端口号>"]}' > /etc/docker/daemon.json
配置完成后,需要重启 Docker 服务:
```
docker restart docker推送和拉取镜像
配置完成后,就可以使用docker push命令在推送镜像到私有仓库,使用docker pull命令来从私有仓库拉取镜像,docker tag 为镜像打上标签。docker tag <镜像名称> <私有仓库地址>:<端口号>/<镜像名称>
docker push <私有仓库地址>:<端口号>/<镜像名称>
docker pull <私有仓库地址>:<端口号>/<镜像名称>
二、容器与虚拟机比较
下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 极快 | (通常在几秒内) |
资源占用 | 轻量(共享主机内核) | 重(每个VM有独立OS,资源消耗大) |
隔离性 | 中等(共享内核,但进程隔离) | 高(完全隔离,每个VM独立运行) |
移植性 | 高(能在不同环境中一致运行) | 中等(依赖于hypervisor及OS) |
管理工具 | Docker, Kubernetes等 | VMware, Hyper-V, KVM等 |
性能指标 | 容器 | 虚拟机 |
---|---|---|
启动时间 | 几秒 | 几分钟 |
内存占用 | 20MB-50MB | 512MB-2GB |
CPU占用率 | 低 | 较高 |
实例数 | 50+ | 5-10 |
用例 | 容器 | 虚拟机 |
---|---|---|
微服务架构 | 适合,轻量级和灵活性高 | 可行,但不如容器高效 |
开发与测试 | 快速部署和环境一致性 | 隔离性强,适合测试多个操作系统 |
大规模部署 | 理想选择,易于扩展和管理 | 适用于复杂应用和遗留系统 |
处理敏感数据 | 需额外安全措施 | 适合,安全隔离性强 |