目录
[3.使用 Docker 的好处](#3.使用 Docker 的好处)
[4.Docker 的核心三要素](#4.Docker 的核心三要素)
[Docker 与虚拟机的区别](#Docker 与虚拟机的区别)
[8.Docker 快速入门](#8.Docker 快速入门)
[Docker 核心名词](#Docker 核心名词)
[Docker 下载镜像原理](#Docker 下载镜像原理)
[Docker 镜像加速配置](#Docker 镜像加速配置)
[Docker 常用命令](#Docker 常用命令)
[Docker 镜像原理](#Docker 镜像原理)
[Docker Commit](#Docker Commit)
[Docker 数据卷](#Docker 数据卷)
[实战:挂载 Nginx 配置与日志](#实战:挂载 Nginx 配置与日志)
[9.Docker 实战部署](#9.Docker 实战部署)
[安装 Tomcat](#安装 Tomcat)
[安装 Nginx](#安装 Nginx)
[安装 MySQL 5.7](#安装 MySQL 5.7)
[Docker 运行原理](#Docker 运行原理)
[10.Dockerfile 解析](#10.Dockerfile 解析)
[案例:自定义 CentOS 镜像](#案例:自定义 CentOS 镜像)
[部署 Spring Boot 项目](#部署 Spring Boot 项目)
[11.Docker Compose](#11.Docker Compose)
[为什么需要 Docker Compose?](#为什么需要 Docker Compose?)
[关闭防火墙(CentOS 7)](#关闭防火墙(CentOS 7))
1.简介与概述
Docker 是一个开源的应用容器引擎,基于 Go 语言并遵循 Apache 2.0 协议开源。Docker 允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,从而实现虚拟化。Docker 的主要目标是"构建、运输和运行任何应用、在任何地方"。它通过对应用程序组件的封装、分发、部署和运行等生命周期进行管理,使应用(如 Web 应用或数据库)及其运行环境做到 "一次封装,到处运行"。
Linux 容器技术解决了环境一致性问题,Docker 在此基础上发展而来。将应用运行在 Docker 容器中,容器在任何操作系统上的表现都是一致的,从而实现了跨平台、跨服务器的部署。一次配置环境后,在其他机器上可一键部署,大大简化了操作流程。
容器采用完全的沙箱机制,相互之间没有任何接口(类似于 iPhone 的 App),并且容器的性能开销极低。Docker 从 17.03 版本起分为 CE(社区版)和 EE(企业版),一般使用社区版即可。

2.为什么要使用Docker?
(1)开发 Java Web 项目时,需要依赖许多环境配置,例如 Tomcat、JDK、Nginx、Redis 等。
(2)本地安装这些环境后,将项目打包为 WAR 文件交给运维部署到 Linux 服务器,运维人员同样需要在服务器上安装这些环境。但常出现以下问题:本地运行正常,部署到 Linux 服务器后却出现错误,通常由版本冲突引起。
(3)使用 Docker 部署软件则非常方便:将 Spring Boot 项目制作成镜像文件,其中包含 JDK、Tomcat 等版本信息,直接部署到 Linux 即可,减少依赖冲突。
3.使用 Docker 的好处
简化配置:安装与创建十分便捷。
代码流水线管理:传统部署环节多,易产生依赖冲突;Docker 提供从开发到上线一致的环境,简化部署流程(如 SIT、PRE、PRD 环境)。
DevOps:实现开发与运维一体化,降低沟通成本(可通过 Docker 或 Kubernetes 实现)。
虚拟化技术:实现快速部署。
弹性扩容:轻松扩展服务实例。
4.Docker 的核心三要素
a.仓库:存放镜像文件,类似于软件市场(如腾讯软件管家、App Store)。
b.镜像:类似于安装包,包含运行所需的环境配置与依赖(例如 Redis 镜像、Tomcat 镜像,后者会自动下载 JDK 镜像)。
镜像来源:自己创建(如项目镜像),第三方镜像(来自 Docker Hub)
c.容器:运行镜像的实例,拥有独立的 IP 和网络信息,相当于一个轻量级的 Linux 操作系统。
5.应用场景
Web 应用的自动化打包与发布。
自动化测试和持续集成、持续部署(CI/CD)。
在服务环境中部署和调整数据库或其他后台应用。
基于 OpenShift 或 Cloud Foundry 平台构建自己的 PaaS 环境.
6.容器与虚拟机区别
虚拟机:在一台物理机上通过虚拟化技术模拟出多个相互隔离的操作系统。

最下面的一层就是物理机,可以是服务器,设置是一台个人电脑;
电脑上需要安装操作系统,比如我们安装了win10的操作系统;
再往上就是虚拟机软件了,比如我们常用的VirtualBox、VMWare,它们的作用是模拟计算机硬件;
继续向上,就是虚拟机模拟出来的操作系统了;
在虚拟的操作系统中,安装所需的软件、组件等。比如我们需要在虚拟操作系统中安装JDK、Tomcat等;
最后就是具体的应用了,例如部署到Tomcat中。
Docker :Docker是开源的应用容器引擎

结构理解(从下至上):
底层同上(物理机 + 主机操作系统)
Docker 引擎作为容器管理器
依赖与应用被打包成 Docker 镜像(如 JDK、Tomcat、应用一起打包)
镜像运行在相互隔离的容器中
Docker 与虚拟机的区别
架构不同:虚拟机在硬件级别虚拟化,模拟硬件并安装操作系统;Docker 在操作系统级别虚拟化,复用主机操作系统运行容器。
启动速度:Docker 为秒级,虚拟机通常需要分钟级。
资源占用:Docker 占用资源更少,性能更高,单机可运行更多实例。
隔离性:虚拟机实现操作系统级隔离,安全性更高;Docker 为进程级隔离。
两者可共存:许多企业采用"物理机 + 虚拟机 + Docker"的架构。

7.安装Docker
Docker 要求 CentOS 7 系统的内核版本在 3.10 以上。请先验证系统版本是否符合要求。
(1)查看内核版本
uname -r
(2)使用 root 登录 CentOS,更新 yum 包
yum -y update

此过程约需 10 分钟。
(3)卸载旧版本(如果已安装)
yum remove docker docker-common docker-selinux docker-engine

(4)安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2

(5)设置 yum 源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
(6)查看可用版本
yum list docker-ce --showduplicates | sort -r
(7)安装 Docker
sudo yum install -y docker-ce
(8)启动并设置开机自启
systemctl start docker
systemctl enable docker
(9)验证安装
docker version
若显示 client 和 service 两部分,则表示安装成功。
8.Docker 快速入门
Docker 核心名词

镜像 :类似安装包,包含容器运行所需的基础文件和配置信息(如 Redis、MySQL 镜像)。
来源:自己制作或拉取他人镜像。
容器 :镜像的运行实例,拥有独立 IP 和网络信息,相当于轻量级 Linux 服务器。
状态:创建、运行、停止、暂停、删除。一个镜像可创建多个容器。
仓库 :集中存储镜像的地方,类似于应用市场。
官方仓库:Docker Hub(访问可能较慢)。
宿主机:运行 Docker 的物理机或虚拟机(如 Windows 10 或 Linux 系统)。
工作流程简述:
-
制作镜像文件(如 Spring Boot 项目)
-
将镜像推送到 Docker 仓库
-
从仓库拉取镜像并在本地容器中运行
Docker 下载镜像原理
使用 docker pull 从远程仓库下载镜像到本地,再通过容器运行。
由于 Docker 官方仓库位于国外,下载可能较慢,建议配置国内镜像加速器。
https://media/image8.jpeg{width="6.25in" height="3.3020833333333335in"}
Docker 镜像加速配置
常用国内加速器:
-
阿里云:https://<你的ID>.mirror.aliyuncs.com
若某个加速器无法使用,可尝试切换其他。
Docker 常用命令
帮助命令
docker --help
版本查询
docker --version
镜像管理
docker images # 查看本地镜像
docker rmi -f kibana:5.6.9 # 删除指定镜像
docker images -a # 显示所有镜像
docker images -q # 只显示镜像ID
docker images --digests # 显示摘要信息
docker images --no-trunc # 显示完整信息
#搜索镜像
docker search mysql
docker search -s 30 mysql # 显示点赞数超过30的镜像
#拉取镜像
docker pull nginx:latest # 下载最新版 nginx
容器管理
#查看容器信息
docker ps # 查看运行中的容器
docker inspect <容器ID> # 查看容器详情
#运行容器
docker run -it -d --name=tomcat9.2 -p 8080:8080 tomcat:9.2
#-i:保持容器运行
#-t:分配伪终端
#-d:后台运行
#--name:指定容器名称
#-p:端口映射(宿主机端口:容器端口)
#交互式容器:-it 启动,退出即停止。
#守护式容器:-id 启动,退出后仍运行。
#容器生命周期
docker start <容器ID> # 启动容器
docker stop <容器ID> # 停止容器
docker rm <容器ID> # 删除容器
#进入容器
docker exec -it <容器名称或ID> bash # 进入容器并启动 bash
docker exec -it <容器名称或ID> sh # 若 bash 不可用,使用 sh
Docker 镜像原理
镜像是什么?
镜像是轻量级、可执行的软件包,包含运行应用所需的一切:代码、运行时、库、环境变量和配置文件。
例如,Tomcat 镜像包含 JDK 和 Linux 基础环境,因此无需单独配置 JDK 环境变量。
镜像加载原理
Linux 文件系统由 bootfs 和 rootfs 组成:
-
bootfs:引导加载程序和内核 -
rootfs:包含/dev、/proc、/bin等目录
不同 Linux 发行版的 bootfs 基本相同,rootfs 不同。
Docker 镜像采用分层存储(Union File System):
-
最底层:复用宿主机的
bootfs -
第二层:
base image(如 CentOS 的rootfs) -
上层:叠加应用镜像(如 JDK、Tomcat)
因此,一个 Tomcat 镜像可能包含 JDK 和 CentOS 层,总大小约为 600 MB。

镜像为只读层,容器启动时会在镜像之上加载一个可读写的文件系统。
Docker Commit
用于将当前容器保存为新的镜像。
1.运行 Tomcat 容器并在其中创建文件:
docker run -p 8081:8080 tomcat:8
docker exec -it <容器ID> bash
cd webapps
mkdir boyatop
echo "boyatop" > index.html
2.提交为新镜像:
docker commit -m="boyatop tomcat" -a="boyatop" <容器ID> boyatop-tomcat:1.0
3.运行新镜像:
docker run -p 8088:8080 boyatop-tomcat:1.0
Docker 数据卷
基本概念
数据卷是宿主机上的一个目录或文件,与容器目录绑定后,双方修改会实时同步。
作用:数据持久化、容器间数据共享、宿主机与容器通信。
添加方式
1.命令方式:
docker run -it -v /宿主机目录:/容器目录 镜像名
2.Dockerfile 方式(后续介绍)
实战:挂载 Nginx 配置与日志
mkdir -p /data/nginx/{conf,conf.d,html,logs}
docker run --name nginx81 -d -p 81:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx \
nginx
9.Docker 实战部署
安装 Tomcat
docker run --name mytomcat -p 8080:8080 -d tomcat:8
-
前台启动:显示日志
-
后台启动:无日志输出(加
-d参数)
安装 Nginx
docker run --name mynginx -p 80:80 -d nginx
安装 MySQL 5.7
docker pull mysql:5.7
docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
docker start mysql3308
docker exec -it mysql3308 bash
mysql -uroot -p
Docker 运行原理
Docker 采用 C/S 架构:
-
守护进程(daemon)运行在主机上
-
客户端通过 socket 与守护进程通信,管理容器
ps aux | grep 'docker'
容器启动问题排查
若容器启动失败,可先以前台方式运行查看日志,再改为后台运行。
10.Dockerfile 解析
Dockerfile 用于定义镜像构建步骤。
编写规范
-
注释以
#开头 -
指令大写,且至少带一个参数
-
指令从上到下顺序执行
常用指令
-
FROM:指定基础镜像 -
MAINTAINER:维护者信息 -
RUN:构建时执行的命令 -
ADD:添加文件到容器(支持自动解压 tar 和网络资源) -
COPY:复制文件(不解压、不支持网络) -
CMD:容器启动时执行的命令 -
ENV:设置环境变量 -
EXPOSE:声明对外端口 -
VOLUME:定义数据卷挂载点 -
WORKDIR:设置工作目录
案例:自定义 CentOS 镜像
Dockerfile 内容:
FROM centos
MAINTAINER boyatop-shizhaoyang
ENV MYPATH /usr
WORKDIR $MYPATH
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash
构建与运行:
docker build -f Dockerfile -t mycs:1 .
docker run -it mycs:1
部署 Spring Boot 项目
-
打包项目:
mvn clean package -
编写 Dockerfile:
FROM java:8 MAINTAINER www.boyatop.com VOLUME /tmp ADD boyatop-thymeleaf-1.0-SNAPSHOT.jar boyatop.jar RUN bash -c 'touch /boyatop.jar' ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/boyatop.jar"] EXPOSE 8080 -
构建镜像:
docker build -f Dockerfile -t boyatop-member:1 . -
运行容器:
docker run -p 8070:8080 boyatop-member:1 -
访问测试
11.Docker Compose
为什么需要 Docker Compose?
当项目依赖多个服务(如 MySQL、Redis、Nginx)时,手动管理容器部署流程复杂。Docker Compose 通过编排技术简化多容器应用的管理。
概念
Docker Compose 是 Docker 官方开源项目,用于快速编排容器集群。
核心概念:
-
工程(project) :由一组关联的容器组成(对应一个
docker-compose.yml) -
服务(service):一个应用的容器实例
-
容器(container):服务的运行实例
安装(离线方式)
-
从 GitHub 下载
docker-compose-Linux-x86_64 -
移动并重命名:
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose -
添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose -
验证:
docker-compose -v
常用命令
docker-compose up -d # 创建并后台运行所有服务
docker-compose down # 停止并删除所有容器、网络
docker-compose logs # 查看日志
docker-compose start/stop # 启动/停止服务
docker-compose restart # 重启服务
入门案例
创建 docker-compose.yml:
version: '3.0'
services:
tomcat:
image: tomcat:8
ports:
- 8080:8080
运行:
docker-compose up -d
模板文件示例
version: '3.0'
services:
tomcat80:
image: tomcat:8
ports:
- 8080:8080
volumes:
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks:
- boyatop
tomcat81:
image: tomcat:8
ports:
- 8081:8080
volumes:
- /usr/tomcat/webapps:/usr/local/tomcat/webapps
networks:
- boyatop
networks:
boyatop:
附录
清理容器与镜像
docker stop $(docker ps -q) && docker rm $(docker ps -aq) # 停止并删除所有容器
docker rmi $(docker images -q) # 删除所有镜像
关闭防火墙(CentOS 7)
systemctl stop firewalld