第二部分:Docker

news2025/1/8 16:14:40
学习基础:Linux基础知识,准备一台虚拟机(装有centOS7系统)

1. Docker的安装

Docker是【快速构建、运行、管理应用的工具】,就是用来部署项目以及项目所依赖的各种各样的组件,可以说就是典型的【运维工具】;
安装步骤:直接参考Docker官方文档,根据不同的虚拟机系统进行安装:
1.卸载旧版Docker;
2.配置Docker的yum库(安装一个yum工具-->执行命令,配置Docker的yum源);
3.安装Docker(【完毕】说明安装成功);
4.启动Docker:systemctl start docker;
5.验证Docker是否安装成功(执行docker -v命令));
6.验证安装启动成功:执行docker ps命令;
7.配置镜像加速(注册阿里云账号--开通镜像服务--将地址配置到Docker中即可)

2.快速入门

2.1.部署MySQL

前提:先停掉虚拟机中的MySQL,确保虚拟机中已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL:
docker run -d \
	--name mysql \
	--p 3306:3306 \
	--e TZ=Asia/Shanghai \
	--e MYSQL_ROOT_PASSWORD=123 \
	mysql

当一个软件安装好,且对安装好的软件进行打包压缩发送给其他电脑,其他电脑解压后,不需要安装,就可以直接使用,这就是【绿色安装版本】;

Docker下载就类似绿色版安装包,其名字叫做【镜像】;

利用Docker安装应用时,Docker会自动搜索并下载应用【镜像】。
【镜像】不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库(类似绿色面安装版本软件)。
Docker会在运行镜像时,创建一个隔离环境,称为【容器】。
【镜像仓库】:存储和管理镜像的平台,Docker官方维护了一个公共仓库(服务):Docker Hub(国外网站查看已经保存的镜像);

2.2.命令解读

命令:
docker run -d \
	--name mysql \
	-p 3306:3306 \
	-e TZ=Asia/Shanghai \
	-e MYSQL_ROOT_PASSWORD=123 \
	mysql
	
1. docker:docker命令前缀;
2. run:子命令(含有很多的子命令);
3. docker run:创建并运行一个容器;
4. -d:让容器在后台运行;
5. --name mysql:给容器起名字,方便区分不同容器,必须唯一;
6. -p 3306:3306:设置端口映射(第一个3306是【宿主机端口】(可改动),第二个3306是【容器内端口】,容器内端口取决于进程(不需要被改动的));
7. -e KEY=VALUE:e(environment简称)是设置环境变量,镜像里去查其环境变量;
8. -e TZ=Asia/Shanghai:时区;
9. -e MYSQL_ROOT_PASSWORD=123:账户号密码;
10. mysql:指定运行的镜像的名字;
镜像命名规范:
镜像名称一般分两部分组成:[repository]:[tag]
repository:镜像名;
tag:镜像的版本,若没有指定tag时,默认是latest,代表最新版本的镜像;

3.Docker基础

3.1 常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档:https://docs.docker.com/

3.2 命令别名

使用docker ps --format ”table {{命令}}“ 对输出的内容进行格式化
找到source /root/.bashrc起别名的文件,在文件中给命令起别名:
alias 别名=”需要起别名的源命令“

3.3 数据卷挂载

数据卷:数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁(双向);
数据卷:html/conf
宿主机文件系统:/var/lib/docker/volumes/html/_data或/var/lib/docker/volumes/conf/_data
数据卷常见命令:
1. docker volume create:创建数据卷
2. docker volume ls:查看所有数据卷
3. docker volume rm:删除指定数据卷
4. docker volume inspect:查看某个数据卷的详情
5. docker volume prune:清除数据卷

3.4 本地目录挂载

1.在执行docker run命令时,使用【-v 本地目录: 容器内目录】 可以完成本地目录挂载;
2.本地目录必须以”/“ 或”./"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql : /var/lib/mysql 会被识别为一个数据卷叫mysql
-v ./mysql : /var/lib/mysql 会被识别为当前目录下的mysql目录

3.4 Dockerfile语法

更新详细语法说明,请参考官网文档

Dockerfile就是利用固定的指令来描述镜像的结构和构建过程,这样Docker才可以依次来构建镜像;
【构建镜像的命令:docker build -t 镜像名 Dockerfile目录】
Dockerfile就是一个【文本文件】,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像,将来Docker可以根据Dockerfile帮我们构建镜像,常见指令:
1. from:指令基础镜像,如from centos:6
2. env:设置环境变量,可在后面指令使用,如env key value
3. copy:拷贝本地文件到镜像的指定目录,如copy ./jrell.tar.gz /tmp
4. run:执行Linux的shell命令,一般是安装过程的命令,如run tar -zxvf /tmp/jrell.tar.gz&& exports path=/tmp/jrell:$path
5. expose:指定容器运行时监听的端口,是给镜像使用者看的,如expose 8080
6. entrypoint:镜像中应用的启动命令,容器运行时调用,如entrypoint java -jar xx.jar

3.5 自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述【文件打包】的过程。
部署一个Java应用的步骤:
1.准备一个Linux服务器;
2.安装jre并配置环境变量;
3.拷贝jar包;
4.运行jar包;
构建一个Java镜像的步骤:
1. 准备一个Linux运行环境;
2. 安装jre并配置环境变量;
3. 拷贝jar包;
4. 编写运行脚本;
【镜像结构:就是文件包】(每层需要压缩打包):
入口(entrypoint):镜像运行入口,一般是程序启动的脚本和参数;
层(layer):添加安装包、依赖、配置等,每次操作都形成新的一层;
基础镜像(baseImage):应用依赖的系统函数库、环境、配置、文件等;

3.6 容器网络互连

【默认情况下】,所有容器都是以bridge方式连接到Docker的一个虚拟网桥(虚拟网卡)上:
1. 虚拟网卡(网桥):docker0 172.17.0.1/16(地址是一个范围,/16代表IP地址的前16位[前两段172.17]不能动)
2. 容器:与上面网桥建立连接,会被分配一个IP(如172.17.0.2),此处可能存在多个容器(每个容器的IP地址不同);

【自定义网络】
加入自定义网络的容器才可以【通过容器名】互相访问,Docker的网络操作命令如下:
3. docker network create:创建一个网络;
4. docker network ls:查看所有网络;
5. docker network rm:删除指定网络;
6. docker network prune:清除未使用的网络;
7. docker network connect:使指定容器连接加入某网络;
8. docker network disconnect:使指定容器连接离开某网络;
9. docker network inspect:查看网络详细信息;

4.项目部署

4.1 部署Java应用(后端)

1. 项目打包,得到jar包,并将jar包和Dockerfile文件一起放到虚拟机中;
2. 构建镜像:docker build -t hmall .
3. 验证镜像是否构建成功:dis命令
4. 运行新创建的镜像:docker run -d --name hm -p 8080:8080 --network heima hmall
5. 查看日志:docker log
6. 访问:浏览器中访问

4.2 部署前端

1.准备nginx和静态页面;
2.同Java;

4.3 DockerCompose

Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现【多个相互关联的Docker容器的快速部署】;
使用docker compose的相关命令
#docker-compose.yml模板
version: "3.8"
services:
	containerA:      #服务A
		image: A     #镜像
		container_name: A  #容器名称
		ports:       #端口
			- "11:11"
		environment:
			TZ: Asia/Shanghai
		volumes:  #数据卷挂载
			-
		networks:
			-hm
	containerB:     #服务B
		image: B
		container_name: B
		ports:
			- "22:22"
	containerC:     #服务C
		image: C
		container_name: C
		ports:
			- "33:33"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273311.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

maven多模块项目编译一直报Failure to find com.xxx.xxx:xxx-xxx-xxx:pom:1.0-SNAPSHOT in问题

工作中项目上因为多版本迭代,需要对不同迭代版本升级版本号,且因为项目工程本身是多模块结构,且依然多个其他模块工程。 在将工程中子模块的pom.xml中版本号使用变量引用父模块中定义的版本号时,一直报Failure to find com.xxx.x…

uniapp 微信小程序 自定义日历组件

效果图 功能&#xff1a;可以记录当天是否有某些任务或者某些记录 具体使用&#xff1a; 子组件代码 <template><view class"Accumulate"><view class"bx"><view class"bxx"><view class"plank"><…

Mysql--基础篇--函数(字符串函数,日期函数,数值函数,聚合函数,自定义函数及与存储过程的区别等)

MySQL提供了丰富的内置函数&#xff0c;涵盖了字符串处理、数值计算、日期和时间操作、聚合统计、控制流等多种功能。这些函数可以帮助你简化SQL查询&#xff0c;提升开发效率。 除了内置函数&#xff0c;MySQL还支持自定义函数&#xff08;User-Defined Functions&#xff09;…

关于Mac中的shell

1 MacOS中的shell 介绍&#xff1a; 在 macOS 系统中&#xff0c;Shell 是命令行与系统交互的工具&#xff0c;用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell&#xff0c;主要包括 bash 和 zsh。在 macOS Catalina&#xff08;10.15&#xff09;之前&#xff0c…

外卖院长帝恩以专业打法,开启外卖运营新格局

据中国饭店协会数据显示&#xff0c;2023年我国在线餐饮外卖市场规模已达到15254亿元&#xff0c;同比增长36.7%。预计到2027年&#xff0c;我国在线餐饮外卖市场规模有望达到19567亿元&#xff0c;行业渗透率有望达到30.4%。在这一蓬勃发展的行业背后&#xff0c;离不开无数从…

高清绘画素材3600多张动漫线稿线描上色练习参考插画原画

工作之余来欣赏一波线稿&#xff0c;不务正业版... 很多很多的线稿... 百度网盘 请输入提取码

Power BI如何连接Azure Databricks数据源?

故事背景: 近期有朋友询问&#xff0c;自己公司有一些项目使用了Azure Databricks用于数据存储。如何使用Power BI Desktop桌面开发软件连接Azure Databricks的数据源呢&#xff1f; 解决方案: 其实Power BI是提供了连接Azure Databricks数据源的选项的&#xff0c;只是配置…

了解RabbitMQ中的Exchange:深入解析与实践应用

在分布式系统设计中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;而RabbitMQ作为开源消息代理软件的佼佼者&#xff0c;以其高性能、高可用性和丰富的功能特性&#xff0c;成为了众多开发者的首选。在RabbitMQ的核心组件中&…

前端通过后端返回的数据流下载文件

后端返回文件流,下载的文件无法读取,损坏,原因是因为接口处理没有加 blob类型 downloadFile(row.fileId).then(res > { // res 即后端返回的数据流 const blob new Blob([res.data]) if (blob && blob.size 0) { this.$notify.error(内容为空&#xff0c;无法下载…

基于 GEE Sentinel-1 数据集提取水体

目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一&#xff0c;对于多个领域都具有重要的应用价值。它有助于更好地管理水资源&#xff0c;保护环境&#xff0c;减少灾害风险&#xff0c;促进可持续发展&#xff0c;以…

BloombergGPT: A Large Language Model for Finance——面向金融领域的大语言模型

这篇文章介绍了BloombergGPT&#xff0c;一个专门为金融领域设计的大语言模型&#xff08;LLM&#xff09;。以下是文章的主要内容总结&#xff1a; 背景与动机&#xff1a; 大语言模型&#xff08;如GPT-3&#xff09;在多个任务上表现出色&#xff0c;但尚未有针对金融领域的…

ansible-api分析(VariableManager变量)

一. 简述&#xff1a; ansible是一个非常强大的工具&#xff0c;可以支持多种类型(字符,数字,列表&#xff0c;字典等)的变量。除了有大量的内置变量及fact变量&#xff0c;也可以通过多种方式进行变量自定义 。不同方式定义的变量&#xff0c;优先级也不太一样&#xff0c;之…

2025年PMP考试最新报名通知

经PMI和中国国际人才交流基金会研究决定&#xff0c;中国大陆地区2025年第一期PMI认证考试定于3月15日举办。在基金会网站报名参加本次PMI认证考试的考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守考试有关规定。 一、时间安排 &#xff08;一&#…

Mysql--基础篇--数据类型(整数,浮点数,日期,枚举,二进制,空间类型等)

MySQL提供了多种数据类型&#xff0c;用于定义表中列的数据格式。选择合适的数据类型不仅可以提高查询性能&#xff0c;还能确保数据的完整性和准确性。 一、数值类型 数值类型用于存储整数、浮点数和定点数。根据精度和范围的不同&#xff0c;数值类型可以分为以下几类&…

1-Transformer算法解读

目录 一.RNN与Transfrmer 二.word2vec 三.自注意力机制 四.辅助向量Q/K/V 五.计算过程 六.整体架构​编辑 七.Bert 一.RNN与Transfrmer RNN(循环神经网络)和Transformer都是深度学习中用于处理序列数据的模型,但它们在结构和性能上有显著的区别。以下是它们的一些…

Java Web开发进阶——Spring Boot与Spring Data JPA

Spring Data JPA 是 Spring 提供的一种面向数据访问的持久化框架&#xff0c;它简化了 JPA 的实现&#xff0c;为开发者提供了一种快速操作数据库的方式。在结合 Spring Boot 使用时&#xff0c;开发者能够快速完成数据库访问层的开发。 1. 介绍Spring Data JPA 1.1 什么是Spr…

【计算机操作系统:一、绪论】

第1章 绪论 1.1 操作系统在计算机系统中的地位 1.1.1 存储程序式计算机的结构和特点 存储程序式计算机&#xff08;Stored Program Computer&#xff09;是现代计算机的基础&#xff0c;其概念源于冯诺依曼&#xff08;John von Neumann&#xff09;提出的模型。这种计算机架…

如何查看服务器上的MySQL/Redis等系统服务状态和列表

如果呢你知道系统服务名称&#xff0c;要看状态很简单&#xff1a; systemctl status server-name 比如 systemctl status nginxsystemctl status redis # 等 这是一个nginx的示例&#xff1a; 那问题是 当你不知道服务名称时该怎么办。举个例子&#xff0c;比如mysql在启动…

安科瑞Acrel-1000DP分布式光伏监控系统在浙江安吉成3234.465kWp分布式光伏发电项目中的应用

摘 要&#xff1a;分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上&#xff0c;利用太阳能进行发电的一种可再生能源利用方式&#xff0c;与传统的大型集中式光伏电站相比&#xff0c;分布式光伏发电具有更灵活的布局、更低的建设成本和更高…

探索 Vue.js 的动态样式与交互:一个有趣的样式调整应用

修改日期备注2025.1.3初版 一、前言 今天和大家分享在 Vue.js 学习过程中开发的超酷的小应用。这个应用可以让我们通过一些简单的交互元素&#xff0c;如复选框、下拉菜单和输入框&#xff0c;来动态地改变页面上元素的样式哦 让我们一起深入了解一下这个项目的实现过程&…