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 截断…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...