Docker安装与使用
文章目录
- 0.关键词
- 1.安装docker
- 2.镜像和容器
- 3.Docker基础
- 1.常见命令
- 2.数据卷(volume)
- 要解决的问题:
- 什么是数据卷:
- 解决的办法:
- 3.数据卷的使用
- 基本命令
- 挂载数据卷(nginx)
- 基于本地目录数据挂载(mysql)
- O创建容器时添加到数据卷
- 4.自定义镜像
- 镜像的结构:
- Dockerfile
- Dockerfile使用
- 构建镜像步骤
- Docker网络(network)
- 默认bridge
- 自定义网络
- O创建容器的时候添加到网络
- 4.项目部署
- 比较
- 项目部署步骤
- 5.DockerCompose
- 什么是DockerCompose
0.关键词
镜像/自定义镜像
Dockerfile
容器
数据卷(默认/自定义)
网络(默认/自定义)
1.安装docker
根据自己操作系统版本选取对应
参考文档: https://docs.docker.com/engine/install/ubuntu/#prerequisites
2.镜像和容器
3.Docker基础
1.常见命令
(命令不会写,在命令后–help会打印提示)
镜像操作
1.docker pull 镜像名 【拉取镜像】
2.docker images 【查看本地镜像列表】
3.docker rmi 镜像名:版本号【删除镜像】
4.docker save -o 镜像名.tar 镜像名 【保存镜像到本地压缩包】
5.docker load -i 要读取的镜像.tar -q(可选,打印的信息) 【读取本地压缩包到镜像】
容器操作
6.docker run 【创建并运行容器】
6.docker ps 【查看容器状态:默认查看已启动的容器】-a查看所有的容器
7.docker logs 镜像名【查看日志】-f 持续查看
8.docker stop 容器名【停止容器】
9.docker start 容器名 【启动容器】
10.docker rm 容器id 【删除容器】
11.docker exec -it 容器名 bush【进入容器内部】
12.exit【退出容器】
13.docker inspect 容器名【查看容器挂载信息】
2.数据卷(volume)
要解决的问题:
当我们需要修改nginx内的静态文件使用vi命令,但是在docker中是没有这个命令的,所有无法修改,那么我们就要用到数据卷解决问题
什么是数据卷:
一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
解决的办法:
由于nginx内的文件无法修改,那么我们通过数据卷做容器内目录与宿主机目录之间的双向绑定,只要宿主机目录改变,那么容器内目录也会发生改变
3.数据卷的使用
基本命令
查看如何使用 docker --help
14.docker volume ls【查看数据卷】
15.docker volume rm 数据卷名【删除指定数据卷】
16.docker volume inspect 数据卷名【查看指定数据卷详情】
17.docker volume prune【删除未被使用的数据卷】
挂载数据卷(nginx)
创建容器时,利用-v 数据卷名:容器内目录 完成挂载
//以nginx为例
//创建并且挂载数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx//查看卷,就能看到有一个名为html的数据卷
docker volume ls//查看html卷的详细信息
docker volume inspect html
宿主机/var/lib/docker/volumes/html/_data与容器/usr/share/nginx/html完成映射
[{"CreatedAt": "2024-12-24T14:04:32+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]//到达宿主机的该目录下做修改
cd /var/lib/docker/volumes/html/_data//再进入nginx容器查看,我们发现再宿主机做的修改,容器内也发生了修改
docker exec -it nginx bush//查看nginx容器的挂载信息
docker inspect nginx"Mounts": [//这里就可以看到挂载到的宿主机目录和容器内目录{"Type": "volume",//类型数据卷"Name": "html",//数据卷名"Source": "/var/lib/docker/volumes/html/_data",//宿主机目录"Destination": "/usr/share/nginx/html",//容器内目录"Driver": "local","Mode": "z","RW": true,"Propagation": ""}],
基于本地目录数据挂载(mysql)
挂载到宿主机任意(自己定义的)目录,而不是固定的/var/lib/docker/volumes目录下
**解决了什么问题****:**如果mysql做版本升级,删除了mysql容器,但是数据不会被删除会存在宿主机默认目录下,但是如果重新创建mysql容器,那么mysql数据卷就会产生一个新的命名的匿名数据卷,原来的数据就用不了了,那么我们通过指定的宿主机目录,每次mysql做版本升级,只需要指定到这些目录,这些数据即可使用
匿名数据卷:由于mysql的数据会越来越多,容器放不下,所以会自动把数据挂载出去,产生的数据卷就是匿名的
注意:mysql数据目录、配置文件(cnf文件,配置一些字符格式)、初始化脚本(sql文件)目录都需要挂载
O创建容器时添加到数据卷
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD = root1234\-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/init:/docker-entrypoint-initdb.d \-v /root/mysql/conf:/etc/mysql/conf.d \mysql-e TZ=Asia/Shanghai \ 用户指定时区,防止日志等修改有差异
4.自定义镜像
**问题:**有一些镜像docker是没有的,那么我们需要自己去制作镜像,例如java应用,每一个java应用都不一样,所以我们需要自己定义自己java项目的镜像
镜像的结构:
镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。例如我们要运行java项目,不同操作系统的要有对应的JRE才能运行,那么我们需要配置对应的环境
1.基于Ubuntu构建的java镜像结构
我们只需要清楚的描述镜像的结构,docker就会自动帮我们完成整个镜像的构建
Dockerfile
copy命令拷贝到镜像的指定目录,目录不一定存在,但docker制作过程中会自动创建出来
Dockerfile使用
18.docker build -t 镜像名:版本 所在目录【构建镜像】
# 基础镜像 注意基础镜像需要引入,可以通过docker load -i .tar文件
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/shanghai
RUN ln -snf /usr/share/zoneinfo/$Tz /etc/localtime && echo $Tz > /etc/timezone
# 拷贝jar包
copy hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java","-jar","/app.jar"]
构建镜像步骤
基础镜像.tar包需要提前上传并加入镜像
1.上传jar包到当前目录下,
2.编写好Dockerfile文件
3.执行docker build的命令(这个时候镜像已经完成,通过docker images查看)
4.执行docker run -d --name 自定义容器名 -p 指定的启动端口:端口 镜像名【创建并运行容器】
5.查看运行状态(日志) docker log -f 容器名
Docker网络(network)
环境之间需要相互访问
默认bridge
自定义网络
解决的问题:默认方式下的网桥,要是A服务停止后,B服务开启就会占用A的ip,A再次开启就会分配其他ip,那么其他引用A服务的服务需要更改A服务现用的ip
那么我们使用自定义网络,通过容器名就可以互相访问,不需要知道对方的ip
19.docker network create 自定义网络名【创建一个网络】
20.docker network ls【查看全部网络】
21.docker network prune 【清楚未使用的网络】
22.docker network inspect 网络名【查看网络详情】
23.docker network connect 自定义的网络名 容器名【指定容器加入某个网络】
24.docker network rm 网络名【删除自己定有的网络/网桥】
**注意:**如果我们通过(docker inspect 容器名)查看容器的网络详情,发现ip是空的,那么就是该容器,没有被启动
O创建容器的时候添加到网络
那么查看容器网络详情就不会看到默认bridge的网桥,就只剩自己自定义的网桥,那么我们访问其他该网络下的容器就可以直接 (ping 容器名)访问了
docker run -d --name 需要创建的容器名 -p 端口号:映射的端口号 --network 自定义的网络名 镜像名
4.项目部署
比较
java应用原来再本地访问数据库需要访问localhost:3306地址,我们使用容器化部署后配置自定义网络通过容器名就可以访问了
原
现:注意这里的mysql是自定义网络的网络名
前端配置nginx(这里采用自定义数据卷)
项目部署步骤
1.打包jar包,
2.编写Dockerfile文件
3.执行docker build -t 镜像名:版本 所在目录 命令来构建java镜像
4.docker run启动java镜像
5.准备号静态资源和nginx配置文件(文件需要做修改,所以挂载到数据卷)
注意:自定义网络需要再同一个网络下,【java容器、mysql容器、nginx容器】
【可以创建容器时指定–network 网络名】或者【通过docker netword connect 自定义的网络名 容器名】命令连接到网络
5.DockerCompose
什么是DockerCompose
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
相关文章:

Docker安装与使用
文章目录 0.关键词1.安装docker2.镜像和容器3.Docker基础1.常见命令2.数据卷(volume)要解决的问题:什么是数据卷:解决的办法: 3.数据卷的使用基本命令挂载数据卷(nginx)基于本地目录数据挂载&am…...

通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理
通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理 安装nginx 首先需要去官网下载一个nginx,我这里下载了最新的稳定版本:nginx-1.26.2,下载下来是一个压缩包,解压之后就可以直接用了。 修改nginx的配置文件 …...
MacOS M3源代码编译Qt6.8.1
编译时间过长,如果不想自己编译,可以通过如果网盘进行下载: 链接: https://pan.baidu.com/s/17lvF5jQ-vR6vE-KEchzrVA?pwdts26 提取码: ts26 在macOS上编译Qt 6需要一些前置步骤和工具。以下是编译Qt 6的基本步骤: 安装Xcode和…...
【Pytorch实用教程】PyTorch 自带的数据集全面解读
下面这篇博客文章将带你快速了解 PyTorch 自带(或官方维护)的各类常用数据集,并介绍它们的使用方法,包括图像、文本和音频数据集。希望能帮助你在项目中快速上手并提高效率。 一、为什么要使用 PyTorch 自带的数据集? 1. 方便、快捷 官方维护的数据集通常已经帮助我们做好…...
Flask使用的正例和反例
Flask使用的正例和反例 文章目录 Flask使用的正例和反例一 , 使用注册异常二 , 新增数据成功后要返回新增数据的id三, 模型查询语句抽取成函数四, 业务逻辑函数传递的参数不应该用字典类型,要传不同字段的参数…...

2024年河北省职业院校技能大赛云计算应用赛项赛题第2套(私有云)
#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…...

我的软件架构师——Java 职位面试经历。
最近,我参加了一家领先的服务型公司的软件架构师(Java)职位的面试。我在这里分享了一些面试官问我的问题。我只列出了与 Java 相关的问题,因为本文主要关注 Java。面试官问我有关 AWS、Docker、Kubernetes、Kafka、Elastic Search、SQL/NoSQL 和设计模式的问题。 ClassNotF…...

npm error code ETIMEDOUT
参考:https://blog.csdn.net/qq_38572963/article/details/142052986 二、解决办法 1、清空缓存 npm cache clean --force 2、查看当前的npm镜像设置 npm config get registry 3、切换新镜像源 npm config set registry https://registry.npmmirror.com 4、查看新源是否设置成功…...

(11)(3.2) ESC信号问题
文章目录 前言 1 信号电平不足 2 感应噪声 3 ESC过电压尖峰 4 ESC固件错误 前言 本页讨论了 ESC 信号的几个潜在问题,这些问题可能导致不可靠的操作,甚至在起飞时坠毁。这些主要发生在较大的四轮飞机上,这些飞机从动力和自动驾驶仪到 E…...
Postman最新接口自动化持续集成
学习地址:https://www.bilibili.com/video/BV1VDC5Y7EJA?spm_id_from333.788.videopod.episodes&vd_source336a0b0a2ff09832b3a55c3599ffb193&p9 1、旧版:PostmanNewmanAllureJenkins 缺点:需要安装较多软件,脚步需要手…...

windows nacos安装配置
GitHub下载压缩包 解压目录(注意不要用中文路径) 在mysql先创建数据库nacos,再执行sql脚本 配置数据库 #*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated conf…...
重温设计模式-外观模式和适配器模式的异同
文章目录 目的不同适配器模式:外观模式: 结构和实现方式不同适配器模式:外观模式: 对客户端的影响不同适配器模式:外观模式: 目的不同 适配器模式: 主要目的是解决两个接口不兼容的问题&#…...

数据中台从centos升级为国产操作系统后,资源增加字段时,提交报500错误
文章目录 背景一、步骤1.分析阶段2.查看nginx3.修改用户(也可以修改所有者权限) 背景 故障报错: nginx报错信息: 2024/12/19 15:25:31 [crit, 500299#0: *249 onen0 " /var/lib/nginx/tmp/cient body/0000000001" f…...
云原生后端开发(一)
云原生后端开发 云原生(Cloud-Native)是指一种构建和运行应用程序的方式,它充分利用了云计算的特点,比如弹性伸缩、自动化部署、容器化等。在云原生的架构下,后端应用通常具备高度可扩展、可维护、易于自动化管理的特…...

实现用户登录系统的前后端开发
**一、**实验名称 实现用户登录系统的前后端开发。 **二、**参考资料 Web开发技术第一章课件。 **三、**实验目的 1.练习前端基本技术的使用。 2.练习使用Servlet/JSP开发简单后端程序。 3.练习使用Tomcat发布Web应用。 4.练习使用Spring Boot开发简单的后端程序。 **…...

双刃剑下的机遇与风险:交易中的杠杆效应
做外汇交易的人都会不可避免地需要考虑交易的杠杆大小。在这个市场中,杠杆效应作为一种关键的金融工具,不仅为投资者提供了放大收益的机会,同时也带来了更高的风险。今天,EagleTrader想与广大交易员一起深入探讨这个不可或缺的要素…...
伏羲0.13(文生图)
确保伏羲0.12(文生图)注释和GUI显示均为中文,项目文件夹名称为中文,并提供使用说明。此外,我将完善风格迁移的确定及训练函数和代码。以下是完整的Python文件和相关说明。 项目结构 文本生成多模态项目/ ├── conf…...

深度学习blog-卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于计算机视觉领域,如图像分类、目标检测和图像分割等任务中的深度学习模型。 1. 结构 卷积神经网络一般由以下几个主要层组成: 输入层:接收…...

深度学习中的残差网络、加权残差连接(WRC)与跨阶段部分连接(CSP)详解
随着深度学习技术的不断发展,神经网络架构变得越来越复杂,而这些复杂网络在训练时常常遇到梯度消失、梯度爆炸以及计算效率低等问题。为了克服这些问题,研究者们提出了多种网络架构,包括 残差网络(ResNet)、…...
在Nginx部署Web应用,如何保障后端API的安全
1. 使用HTTPS和http2.0 参考:Nginx配置HTTP2.0_nginx 支持 2.0-CSDN博客 2. 设置严格的CORS策略 通过add_header指令设置CORS头。 只允许来自https://frontend.yourdomain.com的请求访问API location /api/ {if ($http_origin ~* (https://frontend\.yourdomai…...

IDEA项目推送到远程仓库
打开IDEA——>VCS——>Creat Git 选择项目 push提交到本地 创建远程仓库 复制地址 定义远程仓库 推送 推送成功...
前端ul-image的src接收base64快捷写法
前端ul-image的src接收base64快捷写法 data:image/png;base64,你的base64数据 注意如果是jpg就改成jpg,中间的逗号格式要注意,/注意不要反了 假设后端返回的detail中的url已经是base64格式,下面是示例 <u-image height"120rpx"…...
nginx+tomcat动静分离、负载均衡
一、理论 nginx用于处理静态页面以及做调度器,tomcat用于处理动态页面 lvs(四层) 轮询(rr) 加权轮询(wrr) 最小连接(lc) 加权最小连接(wlc) ngi…...

【数据库】安全性
数据库安全性控制的常用方法:用户标识和鉴定、存取控制、视图、审计、数据加密。 1.用户标识与鉴别 用户标识与鉴别(Identification & Authentication)是系统提供的最外层安全保护措施。 2.存取控制 2.1自主存取控制(简称DAC) (1)同一用户对于不同的数据对…...
ArrayList和LinkedList(深入源码加扩展)
ArrayList 和 LinkedList 是 Java 集合框架中两种常用的列表实现,它们在底层数据结构、性能特点和适用场景上有显著的区别。以下是它们的详细对比以及 ArrayList 的扩容机制。 1. ArrayList 和 LinkedList 的底层区别 (1) 底层数据结构 ArrayList: 基于动态数组(Dynamic Ar…...

Starrocks Full GC日志分析
GC日志样例: [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…...

数据结构第6章 图(竟成)
第 6 章 图 【考纲内容】 1.图的基本概念 2.图的存储及基本操作:(1) 邻接矩阵法;(2) 邻接表法;(3) 邻接多重表、十字链表 3.图的遍历:(1) 深度优先搜索;(2) 广度优先搜索 4.图的基本应用:(1) 最小 (代价) 生…...

下载并运行自制RAG框架
项目部署 https://github.com/huangjia2019/rag-project01-framework git clone https://github.com/huangjia2019/rag-project01-framework.git 一 、 前端分部分部署 在 Ubuntu 系统 上安装 Node.js 和 npm(Node Package Manager),并初始…...

【Zephyr 系列 6】使用 Zephyr + BLE 打造蓝牙广播与连接系统(STEVAL-IDB011V1 实战)
🧠关键词:Zephyr、BLE、广播、连接、GATT、低功耗蓝牙、STEVAL-IDB011V1 📌适合人群:希望基于 Zephyr 实现 BLE 通信的嵌入式工程师、蓝牙产品开发人员 🧭 前言:为什么选择 Zephyr 开发 BLE? 在传统 BLE 开发中,我们大多依赖于厂商 SDK(如 Nordic SDK、BlueNRG SD…...
批量大数据并发处理中的内存安全与高效调度设计(以Qt为例)
背景 在批量处理大型文件(如高分辨率图片、视频片段、科学数据块)时,开发者通常希望利用多核CPU并行计算以提升处理效率。然而,如果每个任务对象的数据量很大,直接批量并发处理极易导致系统内存被迅速耗尽,出现程序假死、崩溃,甚至系统级“死机”。 Qt自带的线程池(Q…...