十四、Docker的基本操作
目录
(一)镜像命令
一、拉取Nginx
二、查看镜像
三、导出文件
四、删除镜像
五、加载镜像
(二)容器命令
一、例子:运行一个nginx容器
1、输入运行命令
2、使用命令查看宿主机ip
3、在外部浏览器访问
4、查看日志
二、例子:修改nginx的index.html文件
1、进入容器
2、进入HTML所在目录
3、修改内容
4、在网页查看
5、停止容器
6、重启容器
7、删除容器
8、展示容器
三、例子:创建并运行一个redis容器,并实现数据持久化
1、使用命令运行redis容器
2、进入容器,并执行redis-cli客户端命令,存入num=666
3、查看是否成功
注:也可以直接进入redis
四、数据卷
1、传统数据和容器耦合
2、使用数据卷解决问题
3、基本操作
4、数据卷的作用
五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置
1、使用命令创建数据卷
2、查看是否创建成功
3、查看详细信息
4、删除未使用的卷
六、例子:挂载数据卷
1、创建nginx容器并挂载
2、查看数据卷详细信息
3、复制文件位置,在Moba中找到文件
4、右键选择使用VSCode打开,并修改
5、在网页中查看
七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
1、下载或导入mysql镜像
2、创建目录
3、在conf中创建配置文件并编写
4、创建容器并挂载
6、总结
八、自定义镜像
九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目
1、创建docker-demo目录和Dockerfile文件,并在其中编写如下
2、向docker-demo中导入文件
3、输入命令,创建镜像
4、创建容器
5、在页面访问
十、例子:使用alpine创建镜像
1、修改dockerfile
2、构建镜像
十一、DockerCompose
1、作用:
十二、部署微服务集群
1、编写docker-compose.yml文件
2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址
3、在每个微服务的pom文件中都加上打包依赖
4、清理缓存
5、打包
6、在target目录中找到jar包,并拷贝到对应目录
7、进入虚拟机,将cloud-demo文件夹导入tmp
8、进入cloud-demo文件并运行
(一)镜像命令

一、拉取Nginx
docker pull nginx
二、查看镜像
docker images
三、导出文件
docker save -o nginx.tar nginx:latest
四、删除镜像
docker rmi 名字:版本 或 ID
五、加载镜像
docker load -i nginx.tar
(二)容器命令

注:
暂停时,操作系统会将容器挂起;(可以恢复)
停止时,操作系统会将容器删除;(无法恢复)
所以不使用unstop;
一、例子:运行一个nginx容器
1、输入运行命令
docker run --name containerName -p 80:80 -d nginx
- docker run :创建并运行一个容器
- --name:给容器起一个名字,比如叫做mn
- -p︰将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d:后台运行容器
- nginx:镜像名称,例如nginx

注意:
此命令会创建一个宿主机80端口和容器80端口的映射,当访问宿主机80端口时,请求会映射到容器的80端口,从而实现容器的访问。
2、使用命令查看宿主机ip
ifconfig

3、在外部浏览器访问

4、查看日志
docker logs -f 容器名 //跟踪日志输出docker logs 容器名 //日志
二、例子:修改nginx的index.html文件
1、进入容器
docker exec -it mn bash
- docker exec :进入容器内部,执行一个命令
- -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- mn :要进入的容器的名称
- bash:进入容器后执行的命令,bash是一个linux终端交互命令
2、进入HTML所在目录
cd /usr/share/nginx/html
3、修改内容
sed -i 's#Welcome to nginx#修改了这里#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
4、在网页查看

5、停止容器
docker stop mynginx
6、重启容器
docker restart mynginxdocker start mynginx
7、删除容器
docker rm mynginx //删除docker rm -f mynginx //强制删除
8、展示容器
docker ps //展示运行中容器docker ps -a //展示所有容器
三、例子:创建并运行一个redis容器,并实现数据持久化
1、使用命令运行redis容器
docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
2、进入容器,并执行redis-cli客户端命令,存入num=666
docker exec -it redis bash
redis-cli
set num 666

3、查看是否成功
get num

注:也可以直接进入redis
docker exec -it redis redis-cli
四、数据卷
1、传统数据和容器耦合

2、使用数据卷解决问题

- 在上图中,数据存储在宿主机的文件系统中,不会因为容器的删除而删除;
- 而且同一份数据可以被多个容器所使用,实现数据共享;
- 在宿主机中更容易修改配置,且容易升级和维护;
3、基本操作

4、数据卷的作用
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
五、例子:创建一个数据卷,并查看数据卷在宿主机的目录位置
1、使用命令创建数据卷
docker volume create html
2、查看是否创建成功
docker volume ls
3、查看详细信息
docker inspect html
4、删除未使用的卷
docker volume prune
六、例子:挂载数据卷
1、创建nginx容器并挂载
docker run --name mynginx -p 80:80 -v html:/usr/share/nginx/html -d nginx
2、查看数据卷详细信息
docker inspect html

3、复制文件位置,在Moba中找到文件

4、右键选择使用VSCode打开,并修改

5、在网页中查看

注意:
若挂载时,数据卷不存在,docker会自动帮你生成;
七、例子:创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
1、下载或导入mysql镜像
docker pull mysql //下载docker load -i mysql.tar //导入
2、创建目录
mkdir -p mysql/datamkdir -p mysql/conf

3、在conf中创建配置文件并编写
vi ms.cnf
[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
4、创建容器并挂载
docker run \--name mysql \-e MYSQL_ROOT_PASSWORD=123 \-p 3306:3306 \-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-v /tmp/mysql/data:/var/lib/mysql \-d \mysql:5.7.25
第一个-v,前面是宿主机配置文件位置,后面是容器配置文件位置;
第二个-v,前面是宿主机数据文件位置,后面是容器数据文件位置;
5、在navicat创建连接

6、总结

八、自定义镜像

镜像是分层结构,每一层称为一个Layer:
- Baselmage层:包含基本的系统函数库、环境变量、文件系统
- Entrypoint: 入口,是镜像中应用启动的命令
- 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置

详情查看官网
九、例子:基于Ubuntu镜像构建一个新的镜像,运行一个java项目
1、创建docker-demo目录和Dockerfile文件,并在其中编写如下
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
2、向docker-demo中导入文件

3、输入命令,创建镜像
docker build -t javaweb:1.0 .
// 镜像名 版本 所在目录
4、创建容器
docker run --name web -p 8090:8090 -d javaweb:1.0
5、在页面访问

十、例子:使用alpine创建镜像
1、修改dockerfile
# 指定基础镜像
FROM openjdk:8-alpine# 配置环境变量,JDK的安装目录
COPY ./docker-demo.jar /tmp/app.jar# 暴露端口
EXPOSE 8090# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
2、构建镜像
docker build -t javaweb:2.0 .
这个可以少几个步骤
十一、DockerCompose
1、作用:
- Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
- Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。
十二、部署微服务集群
1、编写docker-compose.yml文件
version: "3.2"services:nacos:image: nacos/nacos-serverenvironment:MODE: standaloneports:- "8848:8848"mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123volumes:- "$PWD/mysql/data:/var/lib/mysql"- "$PWD/mysql/conf:/etc/mysql/conf.d/"userservice:build: ./user-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10010"
2、将java代码中的数据库和nacos地址都改为yml文件中的服务地址

3、在每个微服务的pom文件中都加上打包依赖
<build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
4、清理缓存

5、打包

6、在target目录中找到jar包,并拷贝到对应目录



7、进入虚拟机,将cloud-demo文件夹导入tmp

8、进入cloud-demo文件并运行
docker-compose up -d
相关文章:
十四、Docker的基本操作
目录 (一)镜像命令 一、拉取Nginx 二、查看镜像 三、导出文件 四、删除镜像 五、加载镜像 (二)容器命令 一、例子:运行一个nginx容器 1、输入运行命令 2、使用命令查看宿主机ip 3、在外部浏览器访问 4、查看…...
C#,数值计算——插值和外推,分段线性插值(Linear_interp)的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 分段线性插值 /// Piecewise linear interpolation object. /// Construct with x and y vectors, then call interp for interpolated values. /// </summary> …...
详细讲解什么是单例模式
当谈到单例模式时,我们指的是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这种模式在软件开发中很常见,特别是需要控制资源访问、配置管理、日志记录器等情况下。 让我们用一个简单的例子来解释单…...
在springBoot中同时使用mysql和MongoDB
在SpringBoot中非关系向数据库MongoDB和关系型数据库MySQL都可通过引入相关依赖并按照指定配置单独集成; mysql引入依赖: compile "org.springframework.boot:spring-boot-starter-web:1.5.18.RELEASE"compile "org.springframework.boot:spring-boot-start…...
2023.11.19 hadoop之MapReduce
目录 1.简介 2.分布式计算框架-Map Reduce 3.mapreduce的步骤 4.MapReduce底层原理 map阶段 shuffle阶段 reduce阶段 1.简介 Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架; Mapreduce核心功能是…...
力扣第841题 钥匙和房间 C++ DFS BFS 附Java代码
题目 841. 钥匙和房间 中等 相关标签 深度优先搜索 广度优先搜索 图 有 n 个房间,房间按从 0 到 n - 1 编号。最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间…...
React 中 react-i18next 切换语言( 项目国际化 )
背景 平时中会遇到需求,就是切换语言,语种等。其实总的来说都是用i18n来实现的 思路 首先在项目中安装i18n插件,然后将插件引入到项目,然后配置语言包(语言包需要你自己来进行配置,自己编写语言包ÿ…...
antd design 5 版本 文件上传
<UploadcustomRequest{customRequest}accept".csv" showUploadList{false}><Button icon{<UploadOutlined />}>上传 CSV 文件</Button></Upload> accept 代表限制的上传类型 也可设置 .excel // 文件上传 ( CSV ) const customReques…...
【如何学习Python自动化测试】—— 浏览器操作
4 、 浏览器操作 4.1 浏览器最大化 Webdriver 打开浏览器后,默认不是最大化,如果需要界面最大化,需要通过 maximize_window()方法来实现,代码如下: maximize_window()方法是Selenium WebDriver提供的一个方法…...
Python编程技巧 – 使用字典
Python编程技巧 – 使用字典 Python Programming Skills – Using Dictionary Dictionary, 即字典,这是Python语言的一种重要的数据结构;Python字典是以键(key)值(value)对为元素,来存储数据的集合。 前文提到Python列…...
el-tree 与table表格联动
html部分 <div class"org-left"><el-input v-model"filterText" placeholder"" size"default" /><el-tree ref"treeRef" class"filter-tree" :data"treeData" :props"defaultProp…...
Leetcode刷题详解——删除并获得点数
1. 题目链接:740. 删除并获得点数 2. 题目描述: 给你一个整数数组 nums ,你可以对它进行一些操作。 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] …...
HTTP四种请求方式,状态码,请求和响应报文
1.get请求 一般用于获取数据请求参数在URL后面请求参数的大小有限制 2.post请求 一般用于修改数据提交的数据在请求体中提交数据的大小没有限制 3.put请求 一般用于添加数据 4.delete请求 一般用于删除数据 5.一次完整的http请求过程 域名解析:使用DNS协议…...
Python - Wave2lip 环境配置与 Wave2lip x GFP-GAN 实战 [超详细!]
一.引言 前面介绍了 GFP-GAN 的原理与应用,其用于优化图像画质。本文关注另外一个相关的项目 Wave2lip,其可以通过人物视频与自定义音频进行适配,改变视频中人物的嘴型与音频对应。 二.Wave2Lip 简介 Wave2lip 研究 lip-syncing 以达到视频…...
2311rust,1.31版本更新
1.31.0稳定版 Rust1.31可能是最激动人心的版本! 使用Cargo创建一个新项目: cargo new foo以下是Cargo.toml的内容: [package] name "foo" version "0.1.0" authors ["名字"] edition "2018" //版本. [dependencies]在[package]…...
文心一言-情感关怀之旅
如何让LLM更有温度。 应用介绍...
下厨房网站月度最佳栏目菜谱数据获取及分析PLus
目录 概要 源数据获取 写Python代码爬取数据 Scala介绍与数据处理 1.Sacla介绍 2.Scala数据处理流程 数据可视化 最终大屏效果 小结 概要 本文的主题是获取下厨房网站月度最佳栏目近十年数据,最终进行数据清洗、处理后生成所需的数据库表,最终进…...
buildadmin+tp8表格操作(5)自定义组装搜索的查询
有时候我们会自定义组装一些数据,发送给后端,让后端来进行筛选,这里有一个示例 const onComSearchIdEq () > {// 展开公共搜索baTable.table.showComSearch true/*** 公共搜索表单赋值* 范围搜索有两个输入框,输入框绑定变量…...
企业级固态硬盘如何稳定运行?永铭固液混合铝电解电容来帮忙
企业级 固态硬盘 永铭固液混合铝电解电容 企业级固态硬盘(SSD)主要应用于互联网、云服务、金融和电信等客户的数据中心,企业级SSD具备更快传输速度、更大单盘容量、更高使用寿命以及更高的可靠性要求。 企业级固态硬盘的运行要求—固液混合电…...
【MISRA C 2012】Rule 4.2 不应该使用三连符
1. 规则1.1 原文1.2 分类 2. 关键描述3. 代码实例 1. 规则 1.1 原文 Rule 4.2 Trigraphs should not be used Category Advisory Analysis Decidable, Single Translation Unit Applies to C90, C99 1.2 分类 规则4.2:不应该使用三连符 Advisory建议类规范。 2…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
