[linux]docker基础

常见命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: Docker Docs

案例: 查看DockerHub,拉取Nginx镜像,创建并运行Nginx容器

  1. 在DockerHub中搜索Nginx镜像

  1. 拉取Nginx镜像

  1. 查看本地镜像列表

  1. 把镜像保持到本地
  • 查看保持命令的提示
  • 把最新版本的nginx保存到本地, 格式是.tar名称是nginx

  1. 删除镜像

  1. 加载本地镜像

  1. 创建并运行Nginx容器
  • -d 让指令后台运行, 不占用命令行
  • --name 给容器起一个名字, 要唯一
  • -p 进行端口映射, 容器端口:宿主机端口
  • nginx 是镜像的名字

  1. 查看容器

  • 格式化: docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

  • 查看所有: docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" -a

  1. 停止容器

  1. 再次启动容器

  1. 进入Nginx容器
  • nginx是要进入的容器名称
  • bash是进入容器后使用的终端

  1. 退出容器

  1. 查看日志
  • 查看日志记录

  • 跟踪日志(调试时使用)(ctrl + c退出)

  1. 删除容器
  • 默认情况下无法删除运行中的容器, 要先停止
  • -f 是强制删除

命令别名

配置命令别名, 简化命令

  1. 编辑文件

  1. 配置命令

  1. 加载配置文件

  1. 使用命令别名

数据卷

1.挂载数据卷

需求

  1. 创建Nginx容器,修改nginx容器内的html目录下的index.html文件,查看变化
  2. 将静态资源部署到nginx的html目录
// 进入容器
docker exec -it nginx bash // 切换目录
cd /usr/share/nginx/html// 查看文件
ls
bash: 50x.html index.html// 编辑文件
vi index.html
bash: vi: command not found
  • 由于容器只提供了镜像最小运行的环境,所以看起来很简单的操作, 却是十分麻烦

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁, 方便我们操作容器内文件

挂载数据卷

  1. 在执行docker run命令时,使用 -v 数据卷:容器内目录 可以完成数据卷挂载
  2. 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
  3. 对于已经创建的容器, 是无法再进行数据卷的挂载

常用命令

示例

  1. 确保nginx镜像不存在

  1. 启动nginx镜像, 自动创建数据卷

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
  • -v 命令完成数据卷的挂载
  • html是数据卷目录的名称, 可以自定义
  • /usr/share/nginx/html是容器内要挂载的目录, 一般去镜像官网文档找
  1. 确认镜像服务

  1. 查看数据库卷列表

  1. 查看数据卷的详细信息
  • Mountpoint就是数据卷在宿主机的位置

  1. 切换目录, 查看文件

  1. 使用vi修改文件

  1. 访问nginx首页内容就已经变化

2.本地目录挂载

需求

查看mysql容器,判断是否有数据卷挂载

  1. 查看nginx挂载的信息

  • volume意为卷
  • Name是卷的名称
  • Source是卷位于宿主机的位置
  • Destination是卷位于容器内的位置
  1. 查看nginx的挂载信息

  • 创建mysql镜像时并没有指定数据卷, 但是默认存在, 称为匿名卷
  • 默认挂载到/var/lib/mysql目录下, 是mysql用于数据存储的目录
  • mysql会把数据存储目录挂载到宿主机, 这样实现了数据和数据库的解耦合, 不然随着数据积累, 容器的体积过大, 维护和升级起来就很困难
  • 默认的匿名卷名字太长, 使用起来很不方便, 所以我们可以自己去挂载

基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文档)

  1. 提前创建文件夹

  1. 把资料中的文件放到对应目录中
  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录
  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录,携带课前资料准备的SQL脚本

  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录,携带课前资料准备的配置文件

  1. 确保mysql容器已经删除

  1. 运行命令, 启动mysql容器,并通过-v 指令把mysql的数据挂载到本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql

  1. 删除mysql容器, 重新启动, 数据还会存在,这样数据库容器的迁移升级就会非常方便

自定义镜像

镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。

镜像分层

Dockerfile

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:

  • 更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs

我们可以基于Ubuntu基础镜像,利用Dockerfile描述镜像结构, 也可以直接基于JDK为基础镜像,省略前面的步骤:

当编写好了Dockerfile,可以利用下面命令来构建镜像:

-t 是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest

. 是指定Dockerfile所在目录,如果就在当前目录, 则指定为 "."

实际操作

  1. root下新建demo文件夹, 把资料中的文件上传上来

  1. 把资料中的jdk包上传到root目录下

  1. 把jdk加载为docker容器

  1. 执行命令构建镜像

  • -t是给镜像器起名字
  • . 用来指定自定义镜像的位置, .表示镜像文件在当前目录, 且文件名是Dockerfile, 如果不是则需要修改
  1. 启动镜像服务

  • 先启动镜像服务
  • -d表示后台运行, --name给镜像起名字, 要唯一, -p 进行端口映射, docker-demo是要运行的镜像名
  • 再查看镜像进程, 确定镜像的运行状态
  • 再查看镜像运行日志
  1. 访问镜像服务

容器网络

容器独立的运行环境, 但是查看不同容器, 发现他们处于同一个网段内, 处于同一个网段内就可以相互访问

  • Gateway就是容器的网关
  • IPAddress是容器的ID地址

默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:

  1. 当我们安装docker时, docker会创建一张虚拟网卡, 这张网卡的名字默认为docker0
  2. 这张网卡还会创建一个虚拟网桥, 这个网桥的地址是一个范围,
  3. 172.17.0.1/16就是IP地址的范围, 且前16位不变(就是前2段不变, 后面会变)
  4. 所有跟网桥连接的容器都会被分配一个ip地址
  5. 所以虽然docker容器是独立的环境, 但是通过网桥, 就可以实现相互连接
  6. 验证一下:

自定义网络

加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下

  1. 使用容器的ip地址虽然可以互通, 但是一旦机器或容器重启, 容器的ip地址可能变化
  2. 所以要使用自定义网络, 通过容器名, 来进行稳定的连接
  3. 查询所有网络, 并创建网络

  1. 让mysql连接自定义网络

  1. 让自定义镜像连接自定义网络

  1. 通过容器名进行容器互联

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++builder中的人工智能(10)神经网络中的Sigmoid函数

在这篇文章中,我们将探讨最受欢迎的激活函数之一——Sigmoid函数。我们将解释什么是Logistic函数,以及它与Sigmoid函数的区别,并展示如何在C应用中使用这些函数。 目录 人工神经网络(ANN)中的激活函数是什么&#xff…

cursor:如何注销帐号和使用流量

点击右上角的设定图标 点击管理 在弹出的网页点登入 点”continue" 点SETING 了解最新信息请扫码关注:

如何选择适合小团队的项目管理工具?免费与开源软件推荐

目录 一、小团队项目管理工具的重要性 二、热门项目管理工具介绍 (一)禅道 (二)Trello (三)Asana (四)JIRA 三、免费项目管理软件推荐 (一)ES 管理器 …

Scaffold-ETH 2:颠覆传统开发的区块链神器,快速构建你的去中心化应用!

目录 引言一、Scaffold-eth框架二、前期准备三、搭建Scaffold-ETH 2(一)使用npx create-ethlatest进行设置(二)使用git clone进行设置1、克隆仓库:2、进入到此目录3、安装依赖项 四、配置Scaffold ETH-2的开发环境&…

kafka+zookeeper的搭建

kafka从2.8版本开始,就可以不用配置zookeeper了,但是也可以继续配置。我目前使用的kafka版本是kafka_2.12-3.0.0.tgz,其中前面的2.12表示是使用该版本的scala语言进行编写的,而后面的3.00才是kafka当前的版本。 通过百度网盘分享…

恢复rm -rf删除的数据

注:本文演示的是ext4文件系统格式数据恢复 系统版本:ubuntu16.04 恢复数据目录:数据盘(非根)目录 恢复工具:extundelete 0.2.4 恢复所有被删除数据 ext4magic 恢复指定目录数据 一、注意事项: …

Elasticsearch(三):Elasticvue使用及DSL执行新增、查询操作

Elasticvue使用及DSL执行CURD 1 概述2 什么是Elasticsearch DSL3 基本结构4 客户端工具介绍4.1 索引介绍4.2 创建简单索引4.3 创建相对完整的索引4.4 插入数据4.4.1 基本插入操作4.4.2 批量插入操作 5 常用的DSL查询类型5.1 match查询5.1.1 match工作原理5.1.2 operator 参数5.…

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

1.1库的概念 库:程序代码的集合,编译好的二进制文件加上头文件供使用,共享程序代码的一种方式。 1.2库的分类 根据开源情况分为:开源库(能看到具体实现)、闭源库(只公开调用的的接口&#xf…

C++【string类,模拟实现string类】

🌟个人主页:落叶 🌟当前专栏: C专栏 目录 为什么学习string类 C语言中的字符串 标准库中的string类 auto和范围for auto关键字 迭代器 范围for string类的常用接口说明和使用 1. string类对象的常见构造 2.string类对象的容量操作 3…

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

关于在VS中使用Qt不同版本报错的问题

最开始需要配置的地方 首先看一下我的Qt有关的环境变量: Path环境变量里: 这里就是把对应Qt编译器环境下的bin目录放进来:比如你使用的是msvc2017_64或者MinGW QMAKESPEC环境变量: 这个就选择Qt对应的编译器目录下的\mkspecs\w…

Windows Server 怎么关闭IE增强安全配置(关闭IE弹窗)

首先第一步打开IE浏览器,根据下图所示,访问网页时会弹出警告窗口。 打开【控制面板】图标。查看方式改为小图标,打开【管理工具】 第五步进入【管理工具】页面后,找到并双击【服务器管理器】选项。 第六步在弹出的窗口中&#…

中肿团队提出的“免疫三明治”(放疗+化疗+免疫治疗),成功登上柳叶刀肿瘤|顶刊精析·24-11-08

小罗碎碎念 该研究首次发现在同期放化疗基础上增加特瑞普利单抗(PD-1抗体)新辅助和辅助治疗显著提高了高危局部晚期鼻咽癌患者生存率。 如果大家看完这篇推送以后,有什么好的医工交叉点子,欢迎和我一起探讨!&#xff0…

Golang--协程和管道

1、概念 程序: 是为完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码。(程序是静态) 进程: 是程序的一次执行过程。正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域&#xff0…

动力商城-02 环境搭建

1.父工程必须满足&#xff1a;1.1删除src目录 1.2pom 2.依赖继承 //里面的依赖&#xff0c;后代无条件继承<dependencies></dependencies>//里面的依赖&#xff0c;后代想要继承&#xff0c;得自己声明需要使用&#xff0c;可以不写版本号&#xff0c;自动继承&l…

JavaWeb开发9

ResponseBody 类型&#xff1a;方法注解、类注解 位置&#xff1a;Controller方法上/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值类型是实体对象/集合&#xff0c;将会转换为JSON格式响应 说明&#xff1a;RestControllerControllerResponseBody; 统…

夜天之书 #103 开源嘉年华纪实

上周在北京参与了开源社主办的 2024 中国开源年会。其实相比于有点明显班味的“年会”&#xff0c;我的参会体验更像是经历了一场中国开源的年度嘉年华。这也是在会场和其他参会朋友交流时共同的体验&#xff1a;在开源社的 COSCon 活动上&#xff0c;能够最大限度地一次性见到…

06 Oracle性能优化秘籍:AWR、ASH、SQL trace与实时监控的实战指南

文章目录 Oracle性能优化秘籍&#xff1a;AWR、ASH、SQL trace与实时监控的实战指南一、AWR&#xff08;Automatic Workload Repository&#xff09;1.1 理论部分1.2 实践部分1.2.1 使用方式1.2.2 分析方式 二、ASH&#xff08;Active Session History&#xff09;2.1 理论部分…

JS实现,防抖节流 + 闭包

防抖&#xff08;Debounce&#xff09; 防抖是指短时间内大量触发同一事件&#xff0c;只会在最后一次事件完成后延迟执行一次函数。 防抖的典型应用场景是输入框的搜索建议功能&#xff0c;用户输入时不需要每次输入都去查询&#xff0c;而是在用户停止输入一段时间后才进行…

1.每日SQL----2024/11/7

题目&#xff1a; 计算用户次日留存率,即用户第二天继续登录的概率 表&#xff1a; iddevice_iddate121382024-05-03232142024-05-09332142024-06-15465432024-08-13523152024-08-13623152024-08-14723152024-08-15832142024-05-09932142024-08-151065432024-08-131123152024-…