这里写目录标题
- 一、Docker安装
- 二、Docker三大核心概念
-
- [2.1 镜像](#2.1 镜像)
- [2.2 容器](#2.2 容器)
- [2.3 仓库](#2.3 仓库)
-
- [2.3.1 公有仓库](#2.3.1 公有仓库)
- [2.3.2 私有仓库](#2.3.2 私有仓库)
- 二、容器与虚拟机比较
一、Docker安装
1.1 在线安装
-
查看是否安装docker
yum list installed | grep docker
或者用docker -v 查看当前系统版本,来判断是否安装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 离线安装
下载安装包
安装配置
-
上传压缩包到服务器
-
解压,tar -xvf docker-24.0.7.tgz
-
将解压出来的docker文件内容移动到 /usr/bin/ 目录下,cp docker/* /usr/bin/
-
注册编辑docker服务,vi /etc/systemd/system/docker.service,内容如下
bash[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
启动服务
bash
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 |
用例 | 容器 | 虚拟机 |
---|---|---|
微服务架构 | 适合,轻量级和灵活性高 | 可行,但不如容器高效 |
开发与测试 | 快速部署和环境一致性 | 隔离性强,适合测试多个操作系统 |
大规模部署 | 理想选择,易于扩展和管理 | 适用于复杂应用和遗留系统 |
处理敏感数据 | 需额外安全措施 | 适合,安全隔离性强 |