Docker(C/S架构软件)

目录

1.简介与概述

2.为什么要使用Docker?

[3.使用 Docker 的好处](#3.使用 Docker 的好处)

[4.Docker 的核心三要素](#4.Docker 的核心三要素)

5.应用场景

6.容器与虚拟机区别

[Docker 与虚拟机的区别](#Docker 与虚拟机的区别)

7.安装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 系统)。

工作流程简述:

  1. 制作镜像文件(如 Spring Boot 项目)

  2. 将镜像推送到 Docker 仓库

  3. 从仓库拉取镜像并在本地容器中运行

Docker 下载镜像原理

使用 docker pull 从远程仓库下载镜像到本地,再通过容器运行。

由于 Docker 官方仓库位于国外,下载可能较慢,建议配置国内镜像加速器。

https://media/image8.jpeg{width="6.25in" height="3.3020833333333335in"}

Docker 镜像加速配置

常用国内加速器:

若某个加速器无法使用,可尝试切换其他。

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 文件系统由 bootfsrootfs 组成:

  • 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 用于定义镜像构建步骤。

编写规范

  • 注释以 # 开头

  • 指令大写,且至少带一个参数

  • 指令从上到下顺序执行

常用指令

  1. FROM:指定基础镜像

  2. MAINTAINER:维护者信息

  3. RUN:构建时执行的命令

  4. ADD:添加文件到容器(支持自动解压 tar 和网络资源)

  5. COPY:复制文件(不解压、不支持网络)

  6. CMD:容器启动时执行的命令

  7. ENV:设置环境变量

  8. EXPOSE:声明对外端口

  9. VOLUME:定义数据卷挂载点

  10. 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 项目

  1. 打包项目:mvn clean package

  2. 编写 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
  3. 构建镜像:

    复制代码
    docker build -f Dockerfile -t boyatop-member:1 .
  4. 运行容器:

    复制代码
    docker run -p 8070:8080 boyatop-member:1
  5. 访问测试

11.Docker Compose

为什么需要 Docker Compose?

当项目依赖多个服务(如 MySQL、Redis、Nginx)时,手动管理容器部署流程复杂。Docker Compose 通过编排技术简化多容器应用的管理。

概念

Docker Compose 是 Docker 官方开源项目,用于快速编排容器集群。

核心概念:

  • 工程(project) :由一组关联的容器组成(对应一个 docker-compose.yml

  • 服务(service):一个应用的容器实例

  • 容器(container):服务的运行实例

安装(离线方式)

  1. 从 GitHub 下载 docker-compose-Linux-x86_64

  2. 移动并重命名:

    复制代码
    mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
  3. 添加执行权限:

    复制代码
    sudo chmod +x /usr/local/bin/docker-compose
  4. 验证:

    复制代码
    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
相关推荐
粟悟饭&龟波功1 小时前
【软考系统架构设计师】九、架构演化与维护
前端·后端·架构·系统架构·软件工程
天远云服1 小时前
Fintech硬核架构:解析天远贷前风险报告接口在Go微服务中的解析策略
微服务·架构·golang
利刃大大1 小时前
【Docker】核心概念 && 常用指令总结 && Docker Compose
docker·容器
菩提祖师_2 小时前
基于Docker的微服务自动化部署系统
开发语言·javascript·flutter·docker
tzhou644522 小时前
云原生与K8S入门
云原生·容器·kubernetes
小坏讲微服务2 小时前
微服务是个啥?SpringCloud又是弄啥嘞?
spring cloud·微服务·架构
AI指北2 小时前
每周AI看 | OpenAI押注音频AI、江南布衣引入网易云商客服Agent,推动客户服务从“降本”迈向“增收”、DeepSeek提出大模型训练新架构
人工智能·ai·架构·agent
西格电力科技2 小时前
光伏四可装置硬件平台架构详解:计算单元、通信接口与可靠性设计
运维·人工智能·分布式·架构·系统架构·能源
CoderIsArt2 小时前
iSCSI架构中客户端与服务端
服务器·网络·架构
言一木2 小时前
Undertow使用说明
容器