[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. 通过容器名进行容器互联

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

纯C++信号槽使用Demo (sigslot 库使用)

sigslot 库与QT的信号槽一样,通过发送信号,触发槽函数,信号槽不是QT的专利,早在2002年国外的一小哥用C写了sigslot 库,简单易用; 该库的官网(喜欢阅读的小伙伴可以仔细研究)&#xf…

(Go语言)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法

0. 序言 从这章开始,在Go基础语法里难度就开始上来了 在学习函数与方法前,先弄明白指针是很重要的。 1. 指针 在没学指针前,相信很多人就已经大概知道指针是个什么东西了。因为它太有名了,当然是与 C和C 的出名有关。 1.1 指针…

基于redis实现API接口访问次数限制

一,概述 日常开发中会有一个常见的需求,需要限制接口在单位时间内的访问次数,比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢,通常大家都会想到用redis,确实通过redis可以实现这个功能&#xff0c…

实在智能受邀出席柳州市智能终端及机器人产业发展合作大会

10 月 27 日至 28 日,由中共柳州市委员会与柳州市人民政府主办的2024柳州市智能终端及机器人产业发展合作大会在柳州莲花山庄隆重举行。大会充分整合各方资源,持续深化与柳州在重大战略规划、重大平台建设、重点产业培育等领域的合作。作为智能体行业的知…

JDBC-PreparedStatement

在前面使用的Statement中,编写sql语句使用的是拼接的形式,这样不仅可读性差,还非常容易导致出错,最大的问题是安全问题。 sql注入 在需要用户输入的地方,用户输入的是SQL语句的片段,最终用户输入的SQL片段…

如何创建备份设备以简化 SQL Server 备份过程?

SQL Server 中的备份设备是什么? 在 SQL Server 中,备份设备是用于存储备份数据的物理或逻辑介质。备份设备可以是文件、设备或其他存储介质。主要类型包括: 文件备份设备:通常是本地文件系统中的一个或多个文件。可以是 .bak 文…

非计算机背景但是想从事医学AI研究,需要掌握的编程语言|个人观点·24-11-08

小罗碎碎念 目前,我们从事医学AI研究的,接触的最多的两种编程语言应该就是R和Python了。那么初学者很容易提出一个疑问,**我想从事医学AI相关的研究的话,应该学哪些编程语言呢?**在文章的开头,我可以先给出…

Jmeter基础篇(21)教你手动修改Jmeter测试报告和压测结果

哈喽呀各位小伙伴!今天给大家带来一期关于Jmeter黑科技的教学! 在日常性能测试过程中,我们经常使用JMeter这个强大的工具来执行压力测试,并通过JMeter的报告生成命令,从CSV或JTL文件中读取数据,生成HTML格式的测试报告。然而,测试报告生成之后,数据就是固定的了,很多…

AHB Matrix 四星级 验证笔记(2.4) Tt3.3AHB总线协议测试时的 并行数据

文章目录 前言一、代码二、错误1.地址范围2. 并行执行线程中变量覆盖的情况3.有关incr的beat 前言 来源路科验证本节搞定 T3.3 AHB总线协议的覆盖:AHB_PROTOCOL_COVER 即测试ahb slave接口和master接口支持(尽可能)全部的ahb协议传输场景&am…

IDA*算法 Power Calculus————poj 3134

目录 闲聊 前言 DFS算法的无效搜索 BFS算法的空间浪费 IDDFS A*算法 IDA* Power Calculus 问题描述 输入 输出 问题分析 代码 闲聊 前几周在忙着数学竞赛,所以就没时间更新,高等数学,一生之敌,真不知道报名的时候我是怎么想…

权限管理简单练习

1.修改/tmp的权限改为 rwxrwxrwx 2.添加SUID权限到/tmp 3.添加SBIT权限到/tmp目录 4. 使用rhel创建 /tmp/123.txt 5.使用其他非root账号删除 /tmp/123/txt 能否执行成功 6.普通用户除了使用sudo可以执行poweroff以外,还有什么别的办法可以执行poweroff

uni-app 图标库整合最佳实践:使用 iconfont 构建属于自己的图标库

一. 前言 在前端开发中,图标已经成为页面设计中不可或缺的一部分。图标可以使界面更加美观、清晰,并且能够提升用户体验。而使用图标库来管理和引用图标资源,可以带来更多的便利和效率。 而在众多的图标库中,iconfont 独树一帜。…

课程讲解--深入探究二分算法

一、二分查找算法的基本概念 定义与原理 二分查找,也被称为折半查找,是一种在有序数据集合中查找特定元素的高效算法。其原理基于分治思想,每次查找都将查找区间缩小一半。例如,在一个有序数组中查找一个特定的数字,我…

达梦数据库DM Exception字符串截断错误,略坑~

前言 我之前在使用达梦数据库的时候,遇到了很多很多的问题,主要对达梦数据库也不是很熟悉,它的语法和我所熟悉的mysql和postgresql有很大的区别。 今天,讲一下我之前遇到的一个问题。这个问题的起因是用达梦数据库迁移工具&…

Java版工程行业管理系统-提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色,如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统,该系统支持前后端分离,功能全面,可满足不同角色的需求。从项目进度图表到施工地图,再到…

高考:心态、时间、知识,多维度攻略让你脱颖而出

高考,宛如一场无声的激战,承载着无数莘莘学子的梦想与热望。在这激烈的竞争中,充分且周全的准备显得尤为关键。那么,高考备考究竟应从哪些方面入手?又有哪些行之有效的备考策略能为我们保驾护航呢? 一、高考…

信息安全工程师(82)操作系统安全概述

一、操作系统安全的概念 操作系统安全是指操作系统在基本功能的基础上增加了安全机制与措施,从而满足安全策略要求,具有相应的安全功能,并符合特定的安全标准。在一定约束条件下,操作系统安全能够抵御常见的网络安全威胁&#xff…

SQL server 中 CROSS APPLY的使用

CROSS APPLY 是 SQL Server 中的一个操作符,用于将一个表表达式(如子查询、函数等)与外部表进行连接。CROSS APPLY 类似于 INNER JOIN,但它允许你在一个查询中多次引用外部表的行,并且可以动态地生成结果集。 基本语法…

硬件---3电容---电容特性、上电和断电延时、稳压功能、容抗计算

一电容是什么 1概念 电容就是两块不连接的导体加上中间的绝缘材料。其本身能够存储电荷&#xff0c;当在这两个互相导体两端增加电压的时候&#xff0c;就会形成电场&#xff0c;从而存储电能。 2注意 <1>电解电容正负极一定不能接反&#xff0c;如果接反轻则烧坏&am…

行车记录打不开?原因分析与数据恢复全攻略

行车记录遭遇困境 行车记录仪&#xff0c;作为现代驾驶中的重要设备&#xff0c;不仅能够帮助我们记录行车过程&#xff0c;还能在关键时刻提供有力的证据。然而&#xff0c;当行车记录突然打不开时&#xff0c;这无疑给车主们带来了不小的困扰。行车记录打不开&#xff0c;可…