Docker快速入门
Docker是一个用来快速构建、运行和管理应用的工具。
Docker技术能够避免对服务器环境的依赖,减少复杂的部署流程,有了Docker以后,可以实现一键部署,项目的部署如丝般顺滑,大大减少了运维工作量。
即使你对Linux不熟悉,你也能轻松部署各种常见软件、Java项目。
学习目标:
- 能利用Docker部署常见软件
- 能利用Docker打包并部署Java应用
- 理解Docker数据卷的基本作用
- 能看懂DockerCompose文件
1. 快速入门
要想让Dockert帮我们安装和部署软件,首先要保证你的机器上有Docker,我们可以在CentOS的虚拟机中安装Docker。
Docker安装的官方文档:
Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.
https://docs.docker.com/engine/install/centos/首先使用SSH客户端连接到我们的Linux虚拟机:
1.1 卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

1.2 配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1.3 安装Docker
- 最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证Docker是否安装成功,输入:docker -v,查看Docker的安装版本
docker image命令:用于列出本地系统中存在的Docker镜像!
- 在Docker中,镜像是用于运行Docker容器的构建块,镜像是Docker容器的基础,即容器运行时所需要使用的文件系统。
Docker也是一个服务,需要启动起来!
1.4 启动和校验
# 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
输入systemctl enable docker命令,让Docker开启自启:
输入systemctl start docker,启动Docker:
1.5 配置镜像加速
-
这里以阿里云镜像加速为例
5.1 首先访问阿里云网站,注册一个阿里云账号:
阿里云-计算,为了无法计算的价值阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。免费备案,7x24小时售后支持,助企业无忧上云。
https://www.aliyun.com/
5.2 开通镜像服务
1. 在首页的产品中,找到阿里云的容器镜像服务:

5.3 点击管理控制台
5.4 找到镜像工具下的镜像加速器
具体命令如下:
# 创建目录
mkdir -p /etc/docker# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker
2. 部署MySQL
- Docker部署 VS 传统的Linux部署
回忆,利用传统方式部署MySQL,大概的步骤有:
- 搜索并下载MySQL安装包
- 上传至Linux环境
- 编译和配置环境
- 安装
步骤一:先检测系统是否自带安装mysql:yum list installed | grep mysql
步骤二:删除系统自带的MySQL及其依赖(防止后面安装发生冲突)
- yum -y remove mysql-libs.x86_64
而我们利用Docker来安装一个MySQL软件,仅仅需要一步即可:
首先需要先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面的命令即可安装Docker:
- \ 表示换行的意思!
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql

MySQL安装完毕,通过任意客户端工具即可连接到MySQL!
大家可以发现,当我们执行命令后,Docker做的第一件事情,是去自行搜索并下载了MySQL,然后会自动运行MySQL,我们完全不用插手,非常方便~!
而且,这种安装方式你完全不用考虑运行的操作系统环境,它不仅在CentOS系统是这样,在Ubuntu系统、MacOS系统,甚至是安装了WSL的Windows下,都可以使用这条命令来安装MySQL。
要知道,不同操作系统下的安装包、运行环境都是不相同的,如果是手动安装,必须手动解决安装包不同、环境不同、配置不同的问题。
镜像和容器
- 当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image),镜像不仅包含应用本身,还包含应用运行时所需要的环境、配置、系统函数库,Docker会在运行镜像时创建一个隔离(的)环境,称为容器(Container)。
- Docker的镜像能够做到跨平台,忽略不同的操作系统之间的差异!
而使用Docker,这些完全不要考虑,就是因为Docker会自行搜索并下载MySQL,注意:这里下载的不是安装包,而是镜像!镜像中不仅包含了MySQL本身,还包含了其运行所需要的环境、配置、系统级函数库,因此它在运行时就有自己独立的环境,就可以跨系统运行,也不需要手动再次配置环境了,这套独立运行的隔离环境我们称为容器。
说明:
- 镜像:英文是image
- 容器:英文是container
因此,Docker安装软件的过程,就是自动搜索下载镜像,然后创建并运行容器的过程!·
镜像仓库
Docker会根据命令中的镜像名称自动搜索并下载镜像image,那么问题来了,它是去哪里搜索和下载镜像的呢?这些镜像又是谁制作的呢?
- Docker官方提供了一个专门管理、存储镜像的网站,并对外开放了镜像上传、下载的权利。
- Docker官方提供了一些基础镜像,然后各大软件公司又在基础镜像的基础上,制作了自家软件的镜像,全部都存放在这个网站,这个网站就成了Docker镜像交流的社区:
https://hub.docker.com/
https://hub.docker.com/基本上我们常用的各种软件都能在这个网站上找到,我们甚至可以自己制作镜像上传上去。
像这种提供存储、管理Docker镜像的服务器,被称为DockerRegistry,可以翻译为镜像仓库。
- 镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共的镜像仓库:Docker Hub。
DockerHub网站是官方仓库,阿里云、华为云会提供一些第三方仓库,我们也可以自己搭建私有的镜像仓库。
官方仓库在国外,下载速度较慢,一般我们都会使用第三方仓库提供的镜像加速功能,提高下载速度,而企业内部的机密项目,往往会采用私有镜像仓库。
总之,镜像的来源有两种:
- 基于官方基础镜像自己制作
- 直接去DockerRegistry下载
总结:
- Docker本身包含一个后台服务,我们可以利用Docker命令告诉Docker服务,帮助我们快速部署指定的应用。
- Docker服务部署应用时,首先要去搜索并下载应用对应的镜像,然后根据镜像创建并运行容器,应用就部署完成了。


Docker是做什么的?
- Docker可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用。
什么是镜像?
- 将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像。
什么是容器?
- 为每个镜像的应用进程创建的隔离运行环境就是容器。
什么是镜像仓库?
存储和管理镜像的服务就是镜像仓库。
- DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像。
3. 命令解读
利用Docker快速的安装了MySQL,非常的方便,不过我们执行的命令到底是什么意思呢?
- 所有的Docker命令都是以Docker为前缀!
解读:
docker run -d:创建并运行一个容器(容器是一个隔离环境),-d则是让容器以后台进程运行
--name mysql:-name给容器命名,给容器起个名字叫mysql,方便我们去区分不同的容器,名字必须唯一,当然也可以叫别的
-p 3306:3306:设置端口映射
- 容器是隔离环境,外界不可访问(容器它也有自己的IP地址),但是可以将宿主机(容器所在的机器称为宿主机)端口映射到容器内的端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内的端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式:-p 宿主机端口:容器内端口,示例中就是将宿主机的3306端口映射到容器内的3306端口

- MySQL客户端直连容器的端口会被拒绝访问!
docker inspect 容器名称:该命令将返回JSON格式的容器的详细信息,例如容器的ID、名称、状态、IP地址等。


-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
- 格式:-e KEY=VALUE,是设置环境变量,配置容器内进程运行时的一些参数,KEY和VALUE都由容器内进程决定
- 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
mysql:设置镜像名称 或 指定运行的镜像名称,Docker会根据这个名字搜索并下载镜像
- 镜像的名称不是随意的,而是要到DockerRegistry中寻找,镜像运行时的配置也不是随意的,要参考镜像的帮助文档,这些在DockerHub网站或者软件的官方网站中都能找到。
- 镜像名称结构的格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是镜像的版本号
- 在未指定TAG版本号的情况下,默认是latest,代表最新版本的镜像,也就是mysql:latest
docker ps是一个Docker命令,用于列出正在运行的Docker容器的信息:
- CONTAINER ID(容器ID):每个容器都有唯一的ID。
- IMAGE(镜像):容器所使用的镜像
- COMMAND(命令):容器启动时执行的命令
- CREATED(创建时间):容器的创建时间
- STATUS(状态):容器的运行状态
- PORTS(端口映射):容器内部服务与宿主机之间的端口映射关系

如果需要显示所有容器(包括已经停止的容器),可以使用docker ps -a命令!
- Nginx容器的默认端口是80端口!
相关文章:
Docker快速入门
Docker是一个用来快速构建、运行和管理应用的工具。 Docker技术能够避免对服务器环境的依赖,减少复杂的部署流程,有了Docker以后,可以实现一键部署,项目的部署如丝般顺滑,大大减少了运维工作量。 即使你对Linux不熟…...
36 Gateway网关 快速入门
3.Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式…...
MyBatis的知识点和简单用法
MyBatis 是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执…...
KITTI数据集(.bin数据)转换为点云数据(.pcd文件)
目录 cmake代码 代码 cmake代码 cmake_minimum_required(VERSION 3.17) project(TEST2)set(CMAKE_CXX_STANDARD 14)# Find PCL find_package(PCL 1.8 REQUIRED)# If PCL was found, add its include directories to the project if(PCL_FOUND)include_directories(${PCL_INC…...
【电路笔记】-节点电压分析和网状电流分析
节点电压分析和网状电流分析 文章目录 节点电压分析和网状电流分析1、节点电压分析1.1 概述1.2 示例 2、网格电流分析2.1 概述2.2 示例 3、总结 正如我们在上一篇介绍电路分析基本定律的文章中所看到的,基尔霍夫电路定律 (KCL) 是计算任何电路中未知电压和电流的强大…...
jenkins通知
构建失败邮件通知 配置自己的邮箱 配置邮件服务,密码是授权码 添加构建后操作 扩展 配置流水线 添加扩展 钉钉通知 Jenkins安装钉钉插件 钉钉添加机器人 加签 https://oapi.dingtalk.com/robot/send?access_token98437f84ffb6cd64fa2d7698ef44191d49a11…...
技术分享 | Spring Boot 异常处理
Java 异常类 首先让我们简单了解或重新学习下 Java 的异常机制。 Java 内部的异常类 Throwable 包括了 Exception 和 Error 两大类,所有的异常类都是 Object 对象。 Error 是不可捕捉的异常,通俗的说就是由于 Java 内部 JVM 引起的不可预见的异常&#…...
【Python 千题 —— 基础篇】成绩评级
题目描述 题目描述 期末考试结束,请根据同学的分数为该同学评级。 A:90 ~ 100B:80 ~ 89C:70 ~ 79D:60 ~ 69E:0 ~ 60 输入描述 输入同学的分数。 输出描述 输出该同学的等级。 示例 示例 ① 输入&…...
【ARM Coresight OpenOCD 系列 2 -- OpenOCD 脚本语法详细介绍】
请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1 swj-dp.tcl 介绍1.1.1 source [find target/swj-dp.tcl]1.1.2 调试传输协议选择 transport selec1.1.3 newtap 命令介绍1.1.4 内存读取数据函数 mem2array1.1.5 变量名检查1.1.6 设置 flash 烧录用到的 ram 空…...
pytorch 初始化
初始化 import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.utils.data import Dataset,DataLoader import torch.optim as optim import numpy as np random_seed=1000 # np.random.seed(random_seed) torch.manual_seed(random_seed)#自定义损…...
process.env.XXX环境变量不生效的解决方法
问题: 使用process.env.XXX时获取不到环境变量的值: axios.defaults.baseURL process.env.VUE_APP_BASE_API; 解决方法: 一:.env.development和.env.production 必须在根目录下。 二:项目根目录下的.env.develop…...
QT项目|时间服务器架构
目录 一、 创建新UI界面的标题 二、 创建服务器运行图标 2.1 查找图标,并截图 2.2 加入QT资源库 三、编辑UI界面 3.1 根据要求,绘制UI界面 3.2 对控件进行命名 3.3 加入Group Box进行美化 四、 按钮操作设置 4.1 QT加入网络 4.2 转到槽&…...
Java学习 10.Java-数组习题
一、创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100 代码实现 public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < arr.length; i) {arr[i]i1;}System.out.println(Arrays.toString(arr));} 运行结果 二、改变…...
Vue3使用vue-print-nb插件打印功能
插件官网地址https://www.npmjs.com/package/vue-print-nb 效果展示: 打印效果 根据不同的Vue版本安装插件 //Vue2.0版本安装方法 npm install vue-print-nb --save pnpm install vue-print-nb --save yarn add vue-print-nb//Vue3.0版本安装方法: npm install vue3…...
Leetcode300 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1…...
2000-2022年上市公司数字化转型同群效应数据
2000-2022年上市公司数字化转型同群效应数据 1、时间:2000-2022年 2、指标:股票代码、年份、行业代码、行政区划代码、数字化转型程度-A、数字化转型程度-B、同行业同群-数字化转型程度-A_均值、同行业同群-数字化转型程度-A_中位数、同省份同群-数字化…...
Python 如何实践 Builder(生成器) 对象创建型设计模式?
开始之前,我们先介绍一下该模型的基本信息。 生成器(Builder)设计模式是一种创建型设计模式,它用于创建复杂对象,将对象的构建过程与表示分离。这种分离可以让我们创建不同类型或配置的对象,同时避免构造函…...
【Qt绘制小猪】以建造者模式绘制小猪
效果 学以致用,使用设计模式之建造者模式绘制小猪。 代码 接口:申明绘制的步骤 PigBuilder.h #ifndef PIGBUILDER_H #define PIGBUILDER_H#include <QObject> #include <QPainter>class PigBuilder : public QObject {Q_OBJECT public:ex…...
开发中常用的SQL语句
开发中常用的SQL语句 1.update更新时不能引用本身表2.备份MySQL3.函数的使用1. case,when的使用2. IF3.其它4.拼接5. 处理时间 4.导出表结构注释等 1.update更新时不能引用本身表 UPDATE student SET valid_flag 0 WHERE id IN (SELECT idFROM (SELECT su.idFROM student su …...
Unreal UnLua + Lua Protobuf
Unreal UnLua Lua Protobuf https://protobuf.dev/ protobuf wire format:pb 编译到底层的数据协议 https://github.com/starwing/lua-protobuf/blob/master/README.zh.md buffer 处理 lua string 可以当 buffer 用,# len 不会遇到 0 截断…...
Comfy UI 工作流(二)潜空间放大与二次生成对比
1. 潜空间放大技术解析 潜空间放大(Latent Upscale)是Comfy UI中一种独特的高清修复技术。我第一次接触这个概念时也是一头雾水,直到实际测试了几十组对比图后才真正理解它的价值。简单来说,它直接在潜在空间(latent s…...
python cairo
## 关于Python Cairo的一些个人理解 最近在整理一些图形处理相关的代码,又翻出了Cairo这个库。其实很多开发者可能不太熟悉它,毕竟在Python的世界里,做图形绘制的选择太多了。但如果你需要生成高质量的矢量图形,或者对图形的精确控…...
别再踩坑了!ZYNQ7000双核FreeRTOS通信与LwIP API调用的五个关键细节
ZYNQ7000双核FreeRTOS通信与LwIP API调用的五个关键细节 调试ZYNQ7000双核系统就像在走钢丝——稍有不慎就会掉进隐蔽的陷阱。去年我们团队在开发工业网关时,曾因一个Cache未刷新的问题浪费了两周时间。本文将分享那些手册上不会写的实战经验,特别是当Fr…...
3步找回消失的微信记忆:WechatDecrypt工具实战指南
3步找回消失的微信记忆:WechatDecrypt工具实战指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因手机更换而痛失珍贵的聊天记录?或是急需找回某段重要对话却束手无策&…...
【词汇专栏】Graph-RAG:图增强的智能检索
Graph-RAG:图增强的智能检索 一句话理解 Graph-RAG RAG 知识图谱。传统RAG按"文本块"检索,Graph-RAG按"实体和关系"检索,能理解"谁是谁的谁",特别擅长回答"全局性问题"(如…...
实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力
实战教程:星图平台私有化部署Qwen3-VL:30B,实现本地AI多模态能力 1. 项目概述与准备工作 1.1 为什么选择Qwen3-VL:30B? Qwen3-VL:30B是目前最强大的开源多模态大模型之一,具备300亿参数规模,能够同时处理文本和图像…...
Simulink信号源配置与信号处理实战指南
1. Simulink信号源模块全解析 第一次打开Simulink库浏览器时,看到Sources分类下密密麻麻的模块图标,我完全懵了——这么多信号源到底该用哪个?经过多年项目实战,我把最常用的几个信号源模块整理成了这份"生存指南"。 **…...
如何用ViGEmBus虚拟游戏控制器驱动解决Windows游戏兼容性难题
如何用ViGEmBus虚拟游戏控制器驱动解决Windows游戏兼容性难题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否遇到过这样的情况:心爱的游戏…...
WPF中RelativeSource在CommandParameter绑定中的高级应用技巧
1. RelativeSource基础:为什么它是WPF绑定的瑞士军刀 第一次看到RelativeSource这个语法时,我正试图在一个DataGrid里实现点击按钮获取当前行数据的场景。当时试了各种Binding Path写法都失败,直到发现RelativeSource这个神器。简单来说&…...
如何免费获取八大网盘直链下载地址:LinkSwift完全使用指南
如何免费获取八大网盘直链下载地址:LinkSwift完全使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …...






