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…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
Linux系统:进程间通信-匿名与命名管道
本节重点 匿名管道的概念与原理匿名管道的创建命名管道的概念与原理命名管道的创建两者的差异与联系命名管道实现EchoServer 一、管道 管道(Pipe)是一种进程间通信(IPC, Inter-Process Communication)机制,用于在不…...
[C++错误经验]case语句跳过变量初始化
标题:[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...
