doker centos7安装1
1.什么是doker
Docker 是一个开源的应用容器引擎,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后发布到任何支持 Docker 的操作系统上,实现 “一次构建,到处运行”。
容器是一种轻量级的虚拟化技术,与传统虚拟机不同,容器不需要模拟完整的操作系统,而是共享宿主操作系统的内核,因此启动更快、资源占用更少。
1.1容器
容器(Container)是一种轻量级的虚拟化技术,它将应用程序及其所有依赖(如库、配置文件、运行时环境等)打包在一起,形成一个独立、可移植的单元。这种技术让应用能够在几乎任何支持容器的环境中(无论是开发机、测试服务器还是生产服务器)以相同的方式运行,解决了 “在我这里能运行,在你那里却不行” 的经典问题。
容器的核心特点
-
轻量级 容器不像传统虚拟机那样需要完整的操作系统副本,而是共享宿主机器的内核,只包含应用所需的运行时环境和依赖。因此,容器启动速度极快(通常秒级),资源占用少,一台主机可以运行成百上千个容器。
-
一致性 容器将应用和依赖 “打包”,确保在开发、测试、生产等不同环境中,应用的运行条件完全一致,避免因环境差异导致的问题。
-
隔离性 每个容器都有自己独立的文件系统、网络空间和进程空间,相互之间隔离,不会干扰彼此的运行。但这种隔离比虚拟机更轻量,因为它们共享底层内核。
-
可移植性 容器可以在任何支持容器引擎(如 Docker、containerd)的系统上运行,无论是物理机、虚拟机还是云平台(AWS、Azure、阿里云等)。
-
可扩展性 基于相同的容器镜像,可以快速复制出多个容器实例,轻松实现应用的水平扩展。
容器与传统虚拟机的区别
特性 | 容器 | 传统虚拟机(VM) |
---|---|---|
启动速度 | 秒级 | 分钟级 |
资源占用 | 低(共享内核) | 高(完整 OS) |
隔离级别 | 进程级隔离(轻量) | 完全隔离(重量级) |
操作系统依赖 | 依赖宿主内核(通常 Linux) | 独立 OS,与宿主无关 |
镜像大小 | 通常 MB 级 | 通常 GB 级 |
容器的典型使用场景
-
应用部署 简化应用发布流程,开发者打包好容器后,运维人员可直接部署,无需关心环境配置。
-
微服务架构 微服务将应用拆分为多个独立服务,每个服务可打包成一个容器,便于单独开发、部署和扩展。
-
持续集成 / 持续部署(CI/CD) 在自动化流程中,容器可作为构建、测试、部署的标准化单元,确保流程一致性。
-
开发环境标准化 团队成员使用相同的容器镜像,避免 “本地环境差异” 导致的开发问题。
-
资源优化 相比虚拟机,容器能更高效地利用服务器资源,降低硬件成本。
常用容器技术
-
Docker:最流行的容器引擎,提供了完整的容器创建、管理和分发工具。
-
containerd:从 Docker 中分离出的容器运行时,更轻量,被 Kubernetes 等广泛采用。
-
Kubernetes(K8s):容器编排平台,用于大规模管理容器集群(自动扩缩容、负载均衡等)。
-
Podman:无守护进程的容器引擎,兼容 Docker 命令,安全性更高。
容器技术已成为现代软件开发和云原生架构的基础,极大地提升了应用交付效率和系统可扩展性。如果你想深入了解,建议从 Docker 入门,体验容器的创建和管理流程。
2.doker的公共仓库
Docker Hub(https://hub.docker.com/),它是 Docker 官方提供的公共镜像仓库,也是全球最大的容器镜像存储库之一。
Docker Hub 的主要功能
-
提供官方镜像:包含大量常用软件的官方镜像,如 Nginx、MySQL、Python、Node.js 等,这些镜像由软件官方维护,安全性和可靠性较高。
-
社区贡献镜像:开发者可以上传自己制作的镜像供他人使用,涵盖各种应用场景(如特定版本的开发环境、定制化服务等)。
-
镜像版本管理:支持为镜像标记不同版本(Tag),方便用户选择特定版本的镜像。
-
与代码仓库集成:可关联 GitHub、GitLab 等代码仓库,实现代码提交后自动构建镜像并推送到 Docker Hub。
-
组织和团队管理:支持创建组织(Organization)和团队,便于团队协作管理私有镜像(免费账户有私有镜像数量限制)。
如何使用 Docker Hub
-
注册账号:访问 Docker Hub 官网注册免费账号。
-
搜索镜像:通过官网搜索框或
docker search
命令查找所需镜像,例如docker search nginx
。 -
拉取镜像:使用
docker pull [镜像名]:[版本]
命令拉取镜像,如docker pull nginx:latest
(拉取最新版 Nginx)。 -
上传镜像:登录后(
docker login
),可通过docker push [你的用户名]/[镜像名]:[版本]
上传自己的镜像。
其他公共镜像仓库
除了 Docker Hub,还有一些知名的公共镜像仓库(部分针对特定场景或地区优化):
-
Quay.io:由 Red Hat 维护,以安全性和企业级支持著称。
-
GitHub Container Registry(GHCR):与 GitHub 集成,方便关联代码仓库管理镜像。
-
阿里云容器镜像服务、腾讯云容器镜像服务等:国内云厂商提供的仓库,访问速度更快,适合国内用户。
-
Google Container Registry(GCR)、Amazon ECR:谷歌和亚马逊的容器镜像服务,适合在其云平台上部署应用。
这些公共仓库极大地简化了容器化应用的分发和使用,开发者无需重复构建基础镜像,直接基于现有镜像开发即可。
3.doker虚拟仓库
Docker 的私有仓库(Private Registry),它是用于存储和管理私有 Docker 镜像的服务,适合企业或团队内部部分享和管理镜像,确保镜像的安全性和可控性(与公共仓库如 Docker Hub 相对)。
私有仓库的作用
-
安全性:企业内部的敏感镜像(如包含业务代码、配置的定制化镜像)不适合公开到公共仓库,私有仓库可限制访问权限。
-
可控性:可自主管理镜像版本、删除或更新镜像,避免依赖外部仓库的稳定性。
-
速度优化:本地私有仓库可减少镜像拉取 / 推送的网络延迟,尤其适合内部大规模部署。
-
合规性:满足数据本地化存储、审计等企业合规要求。
常用的 Docker 私有仓库方案
-
Docker 官方私有仓库(Docker Registry) Docker 官方提供的开源仓库工具,轻量级且易于部署,支持基本的镜像存储和访问控制。
-
部署简单:通过容器即可快速启动(
docker run -d -p 5000:5000 --name my-registry registry:2
)。 -
基础功能:支持镜像推送、拉取、删除,可结合认证工具(如 htpasswd)实现用户权限管理。
-
局限性:无图形化界面,高级功能(如镜像扫描、细粒度权限)需额外配置。
-
-
Harbor 由 VMware 开源的企业级私有仓库,功能丰富,适合生产环境。
-
核心特性:图形化管理界面、角色权限控制、镜像漏洞扫描、镜像签名验证、日志审计等。
-
部署方式:支持 Docker Compose 快速部署,也可集成到 Kubernetes 集群。
-
适用场景:企业级镜像管理,尤其适合微服务架构和云原生环境。
-
-
云厂商私有仓库 各大云平台提供的托管式私有仓库服务,无需自行维护基础设施:
-
阿里云容器镜像服务(ACR)
-
腾讯云容器镜像服务(TCR)
-
AWS Elastic Container Registry(ECR)
-
Google Container Registry(GCR) 优势:与云平台其他服务(如容器服务、CI/CD 工具)深度集成,提供高可用性和弹性扩展。
-
私有仓库的基本使用流程
-
部署仓库:通过上述工具搭建私有仓库(如用 Docker Registry 在本地启动一个仓库)。
-
配置访问
:
-
若仓库使用 HTTP(非 HTTPS),需在客户端 Docker 配置中添加
insecure-registries
(如"insecure-registries":["192.168.1.100:5000"]
)。 -
配置认证(如用户名密码),确保只有授权用户可访问。
-
-
使用镜像
:
-
标记镜像:
docker tag 本地镜像名:版本 私有仓库地址/镜像名:版本
(如docker tag nginx:latest 192.168.1.100:5000/my-nginx:v1
)。 -
推送镜像:
docker push 私有仓库地址/镜像名:版本
。 -
拉取镜像:
docker pull 私有仓库地址/镜像名:版本
。
-
私有仓库是企业 Docker 化实践中的重要组件,可根据团队规模、技术需求和资源情况选择合适的方案(自建如 Harbor,或使用云托管服务)。
4.doker服务器与客户端
在 Docker 体系中,“服务器” 和 “客户端” 是基于 C/S(客户端 - 服务器)架构的两个核心组件,它们通过 Docker 守护进程(daemon)进行通信,协同完成容器的创建、管理等操作。
1. Docker 服务器(Docker Daemon)
Docker 服务器其实是运行在主机上的 Docker 守护进程(dockerd
),它是后台运行的服务程序,负责处理 Docker 相关的核心操作,比如:
-
管理容器(创建、启动、停止、删除等)
-
管理镜像(拉取、构建、存储等)
-
处理网络和存储配置
-
响应客户端的请求
特点:
-
默认运行在本地主机,监听 Unix 套接字(
/var/run/docker.sock
) -
可以配置为远程访问(通过 TCP 端口,需注意安全设置)
-
是 Docker 体系的 “大脑”,所有实际操作都由它执行
2. Docker 客户端(Docker Client)
Docker 客户端是用户与 Docker 交互的命令行工具(docker
命令),它的作用是:
-
接收用户输入的命令(如
docker run
、docker pull
) -
将命令转换为 API 请求,发送给 Docker 守护进程
-
接收并展示守护进程返回的结果
特点:
-
无需与守护进程在同一台机器上,可通过网络连接远程守护进程
-
支持多种命令,覆盖容器、镜像、网络、卷等所有 Docker 功能
-
是用户操作 Docker 的入口
3. 工作流程(客户端与服务器的交互)
-
用户在终端输入 Docker 命令(如
docker run nginx
) -
客户端解析命令,通过 API 向本地或远程的 Docker 守护进程发送请求
-
守护进程接收请求,执行实际操作(如拉取 nginx 镜像、创建并启动容器)
-
守护进程将操作结果返回给客户端
-
客户端将结果展示给用户
4. 远程连接配置(客户端连接远程服务器)
默认情况下,客户端仅连接本地守护进程。若需连接远程 Docker 服务器,需配置:
服务器端(守护进程)配置:
-
编辑 Docker 配置文件(通常是/etc/docker/daemon.json),添加远程访问端口:
{"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }
-
重启 Docker 服务:
systemctl restart docker
客户端配置:
通过环境变量指定远程服务器地址:
# 临时生效 export DOCKER_HOST=tcp://远程服务器IP:2375 # 执行命令(此时操作会作用于远程服务器) docker ps
注意:直接开放 TCP 端口存在安全风险,生产环境建议配置 TLS 加密认证。
总结
-
Docker 服务器(守护进程):后台服务,负责实际的容器和镜像管理。
-
Docker 客户端:命令行工具,负责接收用户指令并与服务器通信。
-
两者通过 API 交互,既可以在同一台机器工作,也可以通过网络远程协作,这为跨主机管理容器提供了灵活性。
5,doker的镜像与容器
Docker 中的镜像(Image) 和容器(Container) 是两个核心概念,两者关系密切但又有本质区别,理解它们的关系是掌握 Docker 的关键。
1. 镜像(Image):容器的 “模板”
镜像可以理解为一个只读的模板,包含了运行应用所需的所有内容:代码、运行时环境、库、环境变量、配置文件等。它是创建容器的基础。
镜像的特点:
-
只读性:镜像一旦构建完成,就无法修改(只能创建新的镜像层)。
-
分层存储:镜像采用分层文件系统(如 UnionFS),每一层都包含文件系统的修改,多层叠加形成完整镜像。这种设计让镜像复用、版本控制更高效(不同镜像可共享相同层)。
-
可分发:镜像可以被打包、存储在仓库(如 Docker Hub),并能被分发到任何支持 Docker 的环境。
常见操作:
-
拉取镜像:
docker pull [镜像名]:[版本]
(如docker pull ubuntu:20.04
) -
查看本地镜像:
docker images
或docker image ls
-
构建镜像:通过
Dockerfile
定义镜像内容,执行docker build -t [镜像名]:[版本] .
构建 -
删除镜像:
docker rmi [镜像ID/名称]
2. 容器(Container):镜像的 “运行实例”
容器是镜像的运行实例,是一个独立的可执行单元。它在镜像的基础上添加了一个可写层,所有运行时的修改(如文件创建、配置变更)都发生在这一层。
容器的特点:
-
可读写:容器在镜像只读层之上新增可写层,允许运行时修改。
-
动态性:可以被创建、启动、停止、暂停、删除,状态会随操作变化。
-
隔离性:每个容器有独立的进程空间、网络、文件系统(基于镜像层 + 可写层),与其他容器和宿主隔离。
常见操作:
-
创建并启动容器:
docker run [选项] [镜像名]
(如docker run -it ubuntu:20.04 /bin/bash
启动交互式容器) -
查看运行中容器:
docker ps
;查看所有容器(包括停止的):docker ps -a
-
启动 / 停止容器:
docker start [容器ID/名称]
/docker stop [容器ID/名称]
-
进入容器:
docker exec -it [容器ID/名称] /bin/bash
(在运行中的容器内执行命令) -
删除容器:
docker rm [容器ID/名称]
3. 镜像与容器的关系
可以用 “类与对象” 的关系类比:
-
镜像 = 类(Class):是静态的模板,定义了 “是什么”。
-
容器 = 对象(Object):是动态的实例,是 “运行起来的镜像”。
工作流程示例:
-
从仓库拉取
nginx
镜像(docker pull nginx
)—— 获得一个 “nginx 模板”。 -
基于该镜像创建容器(
docker run -d nginx
)—— 启动一个运行中的 nginx 服务实例。 -
容器运行时,若修改了配置文件(如
/etc/nginx/nginx.conf
),修改会保存在容器的可写层,不影响原始镜像。 -
若想将修改固化为新镜像,可通过
docker commit [容器ID] [新镜像名]
生成新镜像(但更推荐用Dockerfile
构建,便于维护)。
4. 核心区别总结
维度 | 镜像(Image) | 容器(Container) |
---|---|---|
状态 | 静态(只读) | 动态(可读写,有生命周期) |
作用 | 作为容器的模板 | 运行应用程序 |
存储 | 多层只读文件系统 | 镜像层 + 一层可写层 |
生命周期 | 长期存在(除非主动删除) | 随启动 / 停止 / 删除而变化 |
简单来说:镜像用来 “打包” 应用,容器用来 “运行” 应用。理解这一点,就能更好地掌握 Docker 的使用逻辑。