Dokcer是什么
Docker 是一种容器化技术,它能将应用程序及其依赖(如库、配置文件、运行环境等)打包成一个标准化的"容器",确保应用在任何支持 Docker 的环境中都能以相同方式运行,解决了"开发环境能跑,生产环境跑不起来"的经典问题(服务器系统、配置不同导致的各类打包问题)。
一、Docker 的核心优势:为什么要用 Docker?
-
环境一致性
开发时将应用和依赖打包成容器,测试、生产环境直接使用相同容器,彻底避免"我这能跑""你那缺个库"的问题。比如 Java 应用依赖 JDK 11,容器里会固定包含这个版本,不会因服务器上的 JDK 版本不同而报错。
-
轻量级与高效
容器不像虚拟机(VM)需要模拟完整操作系统,而是共享宿主机的内核,启动速度快(秒级),占用资源少(一个服务器可运行成百上千个容器)。
-
隔离性
每个容器是独立的"沙箱",应用运行时的资源(CPU、内存、文件系统)相互隔离,避免互相干扰(如 A 应用不会占用 B 应用的内存)。
-
易于扩展与部署
容器可通过脚本快速复制、启停,配合 Kubernetes(K8s)等工具能实现自动扩缩容(如流量高峰时自动增加容器数量),简化分布式系统的部署流程。
二、Docker 的核心概念:3 个关键组件
-
镜像(Image)
- 是容器的"模板",包含运行应用所需的代码、依赖、配置等(可理解为"只读的快照")。
- 例如
nginx
镜像包含 Nginx 服务器的所有文件,mysql
镜像包含 MySQL 数据库的运行环境。 - 镜像不能直接运行,需要基于它创建容器。
-
容器(Container)
- 是镜像的"运行实例",镜像被加载到内存后形成的可执行环境(可读写)。
- 一个镜像可创建多个容器(如用
mysql
镜像启动 3 个独立的 MySQL 容器,各自有不同的数据)。 - 容器停止后,数据默认会丢失(除非挂载外部存储)。
-
仓库(Repository)
- 用于存储和分发镜像的平台,类似代码仓库(如 GitHub)。
- 公共仓库:Docker Hub(官方,包含大量常用镜像,如
nginx
、openjdk
); - 私有仓库:企业内部搭建的仓库(如 Harbor),用于存储私有镜像(如公司自研应用的镜像)。
三、CentOS7 系统安装Docker
-
卸载旧版本命令或残留文件
bashyum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
同步时区
bashyum -y install ntp systemctl enable ntpd --now
-
安装docker的yum库
bashyum install -y yum-utils
-
安装docker
bash#方式1 wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #方式2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
替换 Docker 仓库源为阿里云镜像
bashsed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
-
更新 YUM 缓存
bashyum makecache fast
-
安装 Docker以及相关组件
bashyum -y install docker-ce-24.0.2-1.el7 docker-ce-cli-24.0.2-1.el7 containerd.io-1.6.9-3.1.el7 yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
启动 Docker, 设置开机自启动
bashsudo systemctl start docker #启动docker sudo systemctl restart docker #重启docker sudo systemctl status docker #查看docker状态 sudo systemctl stop docker #停止docker systemctl enable docker # 开机自启动
-
查看docker
bashdocker --version #查看docker版本 docker images #查看docker镜像情况
四、Docker 在后端开发中的典型应用场景
-
开发环境标准化
团队成员通过相同的 Docker 镜像搭建开发环境,避免因本地配置不同导致的问题(如"数据库版本不一致""依赖缺失")。
-
微服务部署
每个微服务(如用户服务、订单服务)打包成独立容器,通过 Docker Compose 编排多个容器(如同时启动服务、数据库、Redis),一键启动整个系统。
-
CI/CD 流水线集成
代码提交后,自动构建 Docker 镜像并推送至仓库,再由部署工具拉取镜像并更新容器,实现"代码提交→自动部署"的全流程自动化。
-
隔离测试
测试时为每个测试用例创建独立容器,测试完成后销毁,避免测试数据污染环境。
五、学习建议(针对后端开发)
- 先练基础操作:用 Docker 启动 Nginx、MySQL 等常用服务,熟悉镜像拉取、容器启停、端口映射等基础命令。
- 学写 Dockerfile:尝试将自己开发的 Java 应用(如 Spring Boot 项目)打包成镜像,理解如何在镜像中配置 JDK、复制 jar 包、暴露端口。
- 结合 Docker Compose :学习用
docker-compose.yml
编排多容器应用(如"Spring Boot 应用 + MySQL + Redis"),实现一键启动整个服务集群。
六、常用Docker命令
bash
# 搜索镜像
docker search 镜像名称
# 拉取镜像
docker pull 镜像名称:标签
# 查看已下载的镜像
docker images
# 运行容器
docker run -d --name 容器名称 -p 主机端口:容器端口 镜像名称
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 停止容器
docker stop 容器名称或ID
# 启动已停止的容器
docker start 容器名称或ID
# 删除容器
docker rm 容器名称或ID
# 删除镜像
docker rmi 镜像ID