Docker容器

Docker

Docker简介

部署方式的演进

软件开发早期,应用部署依赖全人工操作:开发者打包代码、拷贝至服务器,再手动安装依赖、配置环境并启动服务。核心问题是环境不一致,同一代码在不同服务器表现不同,系统管理员需反复调试版本与配置。

互联网规模扩大后,虚拟机技术登场。它通过 Hypervisor 在物理机上创建多个隔离实例,每个实例都有独立操作系统、内存和磁盘,既提升了资源利用率,也强化了系统隔离安全性。但虚拟机的短板也很明显:启动慢、资源占用大,且每个实例都要承载完整 OS 的冗余开销,部署和迁移效率受限。

为精准解决虚拟机的资源浪费与启动低效问题,容器技术应运而生。与虚拟机模拟完整操作系统的思路不同,容器采用 "共享内核" 的轻量级架构,直接复用宿主机的操作系统内核,无需额外搭载独立 OS。它仅对应用代码、运行时依赖进行封装,形成一个隔离的、可移植的运行单元。这种设计让容器具备了诸多核心优势:启动速度几乎瞬时完成,远快于虚拟机分钟级的启动耗时;体积仅几十 MB 到几百 MB,资源占用大幅降低,一台物理机可部署成百上千个容器,资源利用率进一步提升。同时,容器的封装特性确保了 "一次构建、到处运行",无论在开发环境、测试环境还是生产环境,应用运行状态完全一致。此外,容器的隔离性虽基于内核级实现,却能满足绝大多数应用的资源隔离需求,且支持快速扩容、缩容和迁移,完美适配互联网时代微服务架构和持续集成 / 持续部署的需求。

Docker的三个核心组件

  • Docker Client:用户交互入口
    是用户操作Docker的直接接口,命令行输入的 docker run、docker pull 等命令均由其接收
    不直接执行操作,仅将命令解析后传递给Docker Daemon,同时反馈执行结果
    支持本地或远程连接Daemon,灵活适配不同使用场景
  • Docker Daemon:后台核心执行器
    运行在主机后台的长期服务,是Docker体系的"干活的核心"
    接收Client的指令,负责容器的创建、启动、停止、删除等实际管理操作
    同时处理镜像的构建、本地存储,以及与Docker Registry的交互(拉取/推送镜像)
  • Docker Registry:镜像存储与分发中心
    本质是存储容器镜像的远程仓库,类似"容器应用的应用商店"
    公开仓库以Docker Hub为代表,包含大量官方和第三方镜像;也支持私有部署(如企业内部仓库)
    供Docker Daemon拉取镜像(本地无镜像时)或推送本地构建的镜像,实现镜像的共享与分发

Docker 组件交互流程图

运行Docker容器

首先需要进入 opt 目录下 cd /opt,在 Linux 系统中,/opt 是存放用户或管理员自行安装的、不属于系统基础组件的第三方软件
mkdir docker 我们在该目录下创建一个 docker 文件夹,用于存放 docker 相关的文件内容
cd docker/ 进入此文件夹下上传 docker 安装包

unzip docker.zip 解压安装包会生成一个同名的文件夹

进入此文件夹 cd docker/

想要执行安装,需要赋予 install-docker.sh 可执行权限 chmod +x install-docker.sh

再执行安装 ./install-docker.sh

安装成功后执行 docker info 用于查看 Docker 系统详细信息

第一种安装方式是在线安装

从 Docker 镜像仓库(默认是 Docker Hub)通过 docker search mysql 命令搜索镜像,输出 docker 镜像坐标 mysql:tag(镜像名称:版本标签
docker pull mysql:tag 命令拉取镜像
docker run mysql:tag 创建并启动容器

这是 Docker 部署应用的基础流程,但在实际场景中,这种直接基于官方公共仓库的操作方式使用频率并不高,由于 Docker Hub 服务器位于境外,镜像拉取时容易因网络延迟或带宽限制出现超时,即便配置了阿里云等国内镜像,受限于网络波动等因素,仍可能出现拉取失败或超时的问题。

第二种安装方式是离线安装

离线安装指的是不依赖实时网络连接,通过本地已保存的镜像文件,在目标机器上部署 Docker 镜像并启动容器。

docker load -i mysql.tar 将本地的 mysql.tar 离线镜像包加载到当前 Docker 环境中

docker load 是 Docker 用于导入本地镜像包的命令,-i mysql.tar 指定要加载的文件是 mysql.tar,执行后,mysql.tar 中包含的 MySQL 镜像会被解析并添加到本地镜像库,相当于安装离线镜像

docker images 命令用于查看本地 Docker 环境中已有的所有镜像,验证上一步的 mysql.tar 是否成功加载

bash 复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:latest

基于本地的 mysql:latest 镜像,创建并启动一个名为 mysql 的 MySQL 容器

  • -d:容器在后台运行,不占用当前终端;
  • --name mysql:给容器命名为 mysql,方便后续管理,如停止、启动;
  • -p 3306:3306:将宿主机的 3306 端口映射到容器内的 3306 端口,外部可通过宿主机 3306 访问 MySQL;
  • -e MYSQL_ROOT_PASSWORD=123456:设置 MySQL 的 root 用户密码为 123456,MySQL 官方镜像要求必须设置;
  • mysql:latest:指定基于本地的 mysql:latest 镜像启动容器,确保本地已存在该镜像,否则 Docker 会尝试在线拉取。

容器独立隔离应用运行环境,虽不是完整操作系统,但拥有独立的网络空间和端口资源,里面跑的程序会占用自己的内部端口,外部用户或其他设备无法直接访问容器内部的端口,所有请求只能先抵达承载容器的宿主机,而端口映射的作用就是在宿主机和容器间搭建请求转发通道,(-p 宿主机端口:容器端口)前面的宿主机端口是对外暴露的入口,后面的容器端口是内部程序实际占用的端口,外部只需通过 "宿主机IP:宿主机端口" 发起请求,宿主机会自动将请求转发到对应容器的端口上,而且哪怕多个容器内部用相同端口,只要宿主机暴露的端口不同就不会冲突,既实现了外部对容器内服务的访问,又兼顾了灵活性。

远程测试连接

若在测试连接时遇到如下报错

2005-Unknown MySQL server host '192.168.15.128'(11001)

且使用命令行工具执行 ping 192.168.15.128 与目标主机通信成功的话,那么很有可能是 Navicate 版本过低的原因,官网 https://navicat.com.cn/products#navicat 下载最新版本的 Navicat Premium Llite,点击免费下载

总结docker常用命令

搜索docker镜像:docker search ****

下载docker镜像:docker pull mysql:tag

从指定镜像创建并启动一个新的容器:docker run [选项] 镜像名 [容器内执行的命令]

查看正在运行的容器:docker ps,查看所有容器:docker ps -a

查看所有的镜像:docker images

查看日志:docker logs -f 容器ID

进入到容器里:docker exec -it 容器ID/bin/bash

启动/停止/重启容器:docker start/stop/restart 容器ID

删除容器:docker rm 容器ID

删除镜像:docker rmi 镜像ID

查看每个容器的资源占用:docker stats

相关推荐
Homeey2 小时前
深入理解 synchronized:从硬件原子性到并发架构设计
java·后端
ZhangBlossom2 小时前
【Java】EasyExcel实现导入导出数据库中的数据为Excel
java·数据库·excel
L.EscaRC3 小时前
Lua语言知识与应用解析
java·python·lua
S7777777S3 小时前
easyExcel单元格动态合并示例
java·excel
刘个Java3 小时前
对接大疆上云api---实现直播效果
java
用户9545156811623 小时前
== 和 equals 区别及使用方法组件封装方法
java
hashiqimiya3 小时前
html的input的required
java·前端·html
一只叫煤球的猫3 小时前
从1996到2025——细说Java锁的30年进化史
java·后端·性能优化
努力努力再努力wz3 小时前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis