Docker入门

1. 什么是docker

docker的英文意思是 码头工人,意思就是搬运东西的意思,其实这和docker的特点是一样的,docker提供的就是一种容器化搬运东西(我们的软件、程序)的过程。docker自己本来是运行在操作系统上一个程序软件,它会提供一个容器环境,使我们的程序独立地运行在容器中,所以说,官方给docker起的这个名字也真是应景。
在这里插入图片描述

2.docker中的核心概念

2.1 镜像(Image)

镜像到底是个什么东西呢,很多人在学习docker的时候都是一头雾水的,可是是歪果仁对镜像情有独钟吧,好多东西都有镜像的概念。比如我们安装系统的.iso文件,其实就是镜像,这里你就可以把镜像认为是一种模板。我们可以使用docker根据这个模板创建容器来运行,其实更可以理解为镜像是好比github上的仓库一样,我们可以克隆下来源代码然后运行,运行起来的代码可以是一个网站、一个应用程序啥的,这就可以叫做容器。说白了,镜像就是一堆静态的模板,运行起来的镜像就是容器。镜像一般需要我们拉取下来,是只读的,这个我们克隆github上的仓库是一样一样的。

docker镜像中有分层的概念,就是一个镜像可能基于好几个镜像,比如一个web运行环境可能需要操作系统ubuntu、数据库mysql、.net core runtime运行时,那我们拉取的这个镜像就会包好这好几个镜像,这就好像我们前边说的打包好的运行环境一样,直接就拉下来一个小电脑一样。

2.2 容器(Container)

当我们拉取了一个镜像,然后run一下,就会根据这个镜像运行出来一个容器,运行的容器就好像我们的应用程序一样,可以访问可以停止,我们运用多次run命令,就运行了很多很多容器,也可以说是镜像的实例。从这个角度来看,我们可以把镜像看作是类,容器看作new出来的实例,也是很合适的。

2.3 仓库(Repository)

存放镜像的地方就是仓库,就好比存放代码的地方是github一样,我们就把github称为代码的仓库,github算是最大的仓库。那么存放docker镜像的地方我们叫做dockerhub,是docker的中央仓库。其实已经有dockerhub这个网站了(https://hub.docker.com/),这就是 存放docker镜像的官方仓库,好多官方的也保存在这里,保证了镜像的安全性和可靠性,我们可以从上边拉取一下镜像来运行我们的软件。当然我们也可以制作好我们自己镜像推送上去,不过这些肯定是要官方审核的,防止有些人写入一些恶意代码。不过我们可以推到我们自己的dockerhub上去,供我们自己使用,这个就好我们的github账号一样了,属于私有镜像了。

2.4 数据卷(Volumn)

实际上我们的容器就好像是一个简易版的操作系统,只不过系统中只安装了我们的程序运行所需要的环境,前边说到我们的容器是new出来的实例,既然是new出来的实例那就会销毁,那如果销毁了我们的程序产生出的需要持久化的数据怎么办呢,容器运行的时候我们可以进容器去查看,容器一旦销毁就什么都没有了。所以数据卷就是来解决这个问题的,是用来做数据持久化到我们的宿主机上容器间的数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存到我们宿主机上的真实磁盘上了。

docker中基本的概念已经说了,下面我们就可以来使用docker了。

3. docker的命令

3.1 镜像命令

  • docker images 查看本机的镜像。
名称介绍
REPOSITORY仓库 ,也是镜像名称
TAG标签,也是版本号,镜像会有不同的版本号
IMAGE ID镜像id,根据这个id我们可以区分不同的镜像,也可以对某个镜像进行操作
CREATED创建时间
SIZE镜像的大小
  • docker rmi 删除本地的镜像,加上一个参数-f表示强制删除,因为有时候若有运行的相关容器的时候是不能删除的,如:docker rmi -f nginx 强行停止容器并删除镜像,不管是否有占用情况。
  • docker search 根据镜像名称搜索远程仓库中的镜像,可以看一下查到所有相关名称的镜像,可以选择我们要拉取哪个镜像,下边是搜索nignx相关的镜像,红色部分ok 说明是官方镜像。
  • docker pull <镜像名称>:[标签名称]:拉取镜像,默认不写标签名称拉取最新的镜像。
  • docker push 推送镜像,当我们制作了我们自己的镜像时,我们就可以推送到我们自己的docker hub上去。

3.2 容器命令

有了镜像我们就可以new一个镜像实例了,也就是我们所说的容器。

  • docker run :基于某个镜像运行一个容器,如果本地有这个镜像就根据本地的镜像创建,如果没有,就去远程拉取一个镜像再创建,参数如下:

    -d:启动一个容器,后台运行,不会占用我们当前的控制台,一般都要加上,之前我们启动nginx没有指定这个参数,就会占用当前控制台,会一直挂起,有了这个命令就不会占用了。

    -i:以交互模式运行容器,通常会和-t一起来使用(-it)。

    -t:为容器也创建一个命令行窗口,是容器内容的命令行窗口,比如我们拉取一个ubuntu的镜像,我们想要在这个操作系统镜像里边执行一些命令,那就需要这个参数了。

    -P:这个是大写的P,指定宿主机的随机端口映射到容器内部的端口。

    -p:这个是小写的p,指定某个具体端口映射到容器内部端口,比如前边我们用-p 8080:80,就是让宿主机的8080端口映射到容器内的80端口,这样我们就可以在外部用8080端口访问我们容器内部的nginx了(默认容器必须有一个外部的映射端口,不然访问不了)。

    -v:指定宿主机与容器内部的目录映射,就是之前的数据卷所需要的参数,好实现数据的持久化和同步。

–name=“mynginx”:为容器指定一个名称,如果没有指定,那就分配一个随机名称。

  • docker ps 显示正在运行的容器,加一个参数-a 可以看到所有的容器
  • docker start 启动容器 。
  • docker stop 停止容器 。
  • docker kill 强制停止容器。
  • docker restart 重启容器。
  • docker rm 删除容器,删除后容器就不在了,就不能重启和停止了。
  • docker inspect 查看容器的详细信息。

4. 数据卷与数据卷容器

4.1 什么是数据卷

为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的。Docker镜像被存储在一系列的只读层。当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部。如果正在运行的容器修改了现有的文件,该文件将被拷贝出底层的只读层到最顶层的读写层。在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下。当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失。此只读层及在顶部的读写层的组合被Docker称为Union File System(联合文件系统)。为了能够保存(持久)数据以及共享容器间的数据,Docker提出了Volumes的概念。很简单,volumes是目录(或者文件),它们是外部默认的联合文件系统或者是存在于宿主文件系统正常的目录和文件。

4.2 为什么使用数据卷volume

Docker的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。

  1. 容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问
  2. 多个容器之间的数据无法共享
  3. 当删除容器时,容器产生的数据将丢失

为了解决这些问题,Docker引入了数据卷(volume)机制。volume是存在一个或多个容器中的特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下便利。

  • volume在容器创建时就初始化,在容器运行时就可以使用其中的文件
  • volume能在不同的容器之间共享和重用
  • 对volume中的数据的操作会马上生效
  • volume中数据操作不会影响到镜像本身
  • volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除
    在这里插入图片描述
    4.3 配置数据卷

4.3.1 配置单个数据卷:

创建容器时,使用-v 参数设置数据卷

docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名  —privileged=true

注意事项:

  1. 目录必须是绝对路径
  2. 如果目录不存在,会自动创建
  3. 可以挂载多个数据卷
  4. 如果出现 cannot open directory:permission denied 时,需要多加一个 —privileged=true参数即可(有些系统里面可能会认为挂载目录时不安全的所以就被禁止了,而加入参数后会将这一限制打开)

案例如下

第一步,创建启动容器

docker run -it --privileged=true -v /Users/xxxxx/host_data:/tmp/docker_data --name=test1 13b66b487594
## /Users/xxxxx/host_data 表示宿主机绝对路径
## /tmp/docker_data 容器目录路径

第二步,确定容器是否开启成功

docker ps

第三步,查看数据卷是否挂在成功,输入如下命令

docker inspect 容器名
找到Mounts(表示挂载)信息,其中
type:bind  表示绑定型的
Source      表示宿主机路径
destination    表示容器内路径

在这里插入图片描述
上述过程就可以实现容器和宿主机之间数据共享啦。

  • 当在容器目录内输入一些内容时,数据卷(宿主机目录)中的内容也会随即更新;当更新数据卷中的内容时,容器目录中的内容也会随即更新;这种方式也叫做映射。将容器目录映射到宿主机。
  • 当容器被停止时,在宿主机中修改文件,当再进去容器时,文件也同样被修改。

4.3.2 配置多个数据卷

docker run -it -v /宿主机目录绝对路径1:/容器内目录路径1 -v /宿主机目录绝对路径2:/容器内目录路径2 -v /宿主机目录绝对路径3:/容器内目录路径3 -name="xx" 镜像名  —privileged=true

4.3.3 多个容器挂载同一个数据卷

docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名  —privileged=true
或者
docker run -it -v /宿主机目录绝对路径:/容器内目录路径 --name="xx" 镜像名 —privileged=true

4.4 容器的数据卷

多容器间进行数据交换,有两种方式:

  1. 多个容器挂载同一个数据卷(缺点:操作比较麻烦,因为当容器过多时,需要一个个的挂载)
  2. 数据卷容器

相比,数据卷容器方式更胜一筹,同时数据卷容器也体现了数据卷的继承关系。

4.4.1 数据卷容器概念

见名知意,容器的数据卷,也可以称为数据卷容器或者容器卷,表示这个容器是用来共享数据的。

可以看下图,

  1. 在 c3 容器挂载了一个数据卷,
  2. c1 和 c2 容器再分别挂载到 c3 容器上,
  3. 这样 c1 和 c2 容器相当于挂载到了数据卷上,这样的话 c1、c2 c3 可以相互通信,即使 c3 挂了,c1 和 c2也可以通过数据卷进行通信。
    在这里插入图片描述
    4.4.2 如何配置数据卷容器

第一步,创建启动 c3 数据卷容器,使用-v 参数设置数据卷

docker run -it -v /容器目录 —name="c3" 镜像名 /bin/bash
## /容器目录 表示当没有指定宿主机目录时,docker会自动分配

第二步,数据卷继承

docker run -it --name="c1" --volumes-from c3 镜像名
docker run -it --name="c2" --volumes-from c3 镜像名

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

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

相关文章

软考高级系统架构设计师(二)计算机操作系统

【原文链接】软考高级系统架构设计师&#xff08;二&#xff09;计算机操作系统 2.1 进程管理 2.1.1 操作系统的三个重要作用 管理计算机中运行的程序和分配各种软硬件资源为用户提供友善的人机界面为应用程序的开发和运行提供一个高效的平台 2.1.2 操作系统的四个特征 并…

jmeter HTTP请求默认值

首先&#xff0c;打开JMeter并创建一个新的测试计划。 右键单击测试计划&#xff0c;选择"添加" > “配置元件” > “HTTP请求默认值”。 在HTTP请求默认值中&#xff0c;您可以设置全局的HTTP请求属性&#xff0c;例如&#xff1a; 服务器地址&#xff1a…

加速乐(__jsl_clearance_s)动态cookie生成分析实战

文章目录 一、写在前面二、抓包分析三、逆向分析 一、写在前面 加速乐&#xff08;JSL&#xff09;是阿里推出的一项反爬虫服务&#xff0c;其生成cookie的原理基于浏览器的行为特征 我们知道普通网站生成cookie是在请求时生成&#xff0c;而它先生成cookie&#xff0c;然后向服…

allegro输出.IPC文件

1、ipc文件的导出 板厂会使用cam软件生产一个网表文件&#xff1b;如果传递给板厂的数据中也有一个IPC文件&#xff0c;板厂将对两个网表文件进行对比&#xff1b;提高生产的安全性&#xff0c;准确性&#xff1b; 1&#xff0c;PCB软件输出的光绘文件&#xff0c;有时会变异&a…

JUC--线程池

目录 一、线程池的介绍 二、线程池的创建 三、特殊线程池 3.1.CompletionService异步处理 3.2.ThreadPoolExecutor 3.3 ForkJoinPool 虽然多线程的技术大大帮助了程序运行的效率&#xff0c;但是在太多的线程的创建与销毁下&#xff0c;系统的开销也将会是非常庞大的。所以…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

Python土力学与基础工程计算.PDF-隧道涌水量

Python 求解代码如下&#xff1a; 1. # 定义参数 2. A 2000 # 地表面积&#xff0c;单位&#xff1a;平方米 3. S 10 # 截面积&#xff0c;单位&#xff1a;平方米 4. h 500 # 年地下径流深度&#xff0c;单位&#xff1a;毫米 5. 6. # 转换单位 7. h h / 1000 # 单…

基于51单片机直流电机PWM调速液晶1602显示设计

一、系统方案 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。本文中采用了三极管组成了PWM信号的驱动系统&#xff0c;并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节&#xff0c;从而控制其输入信号波形等…

Java面向对象三大特性之多态及综合练习

1.1 多态的形式 多态是继封装、继承之后&#xff0c;面向对象的第三大特性。 多态是出现在继承或者实现关系中的。 多态体现的格式&#xff1a; 父类类型 变量名 new 子类/实现类构造器; 变量名.方法名(); 多态的前提&#xff1a;有继承关系&#xff0c;子类对象是可以赋…

无线上网连接及配置

目录 1. 无线上网连接及配置 1.1 无线路由器连接方式 ​编辑 1.2 无线路由器的基本配置 1.配置用户计算机上的IP地址 2.访问无线路由Web管理界面 1.3 WAN 口设置 1.动态 IP 2.静态 IP 1. 无线上网连接及配置 一小型公司共有20名员工。由于公司业务需要访问Internet&…

考研C语言进阶题库——更新41-50题

目录 41.编写程序要求输出整数a和b若a和b的平方和大于100&#xff0c;则输出a和b的平方和&#xff0c;否则输出a和b的和 42.现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a;第一项是1/1&#xff0c;第二项是是…

【CAM】CAM(Class Activation Mapping)——可视化CNN的特征定位

文章目录 一、CAM(Class Activation Mapping)二、CAM技术实现2.1 网络修改2.2 微调2.2 特征提取 三、总结Reference 完整代码见Github &#xff1a;https://github.com/capsule2077/CAM-Visualization &#xff0c;如果有用可以点个Star&#xff0c;谢谢&#xff01; 一、CAM(C…

RSU交叉工具链安装不可用

1、在安装完交叉工具链去编译程序的时候&#xff0c;提示交叉工具链的命令找不到&#xff0c;检查各种路径配置其实都是配置好了&#xff0c;就是不行。 这是需要用下面的命令去更新一下交叉工具链&#xff0c;当然/opt目录下需要安装好对应文件 目前发现金溢、中兴的V2X交叉工…

链表的顶级理解

目录 1.链表的概念及结构 2.链表的分类 单向或者双向 带头或者不带头 循环或者非循环 3.无头单向非循环链表的实现 3.1创建单链表 3.2遍历链表 3.3得到单链表的长度 3.4查找是否包含关键字 3.5头插法 3.6尾插法 3.7任意位置插入 3.8删除第一次出现关键字为key的节点 …

【3Ds Max】可编辑多边形“点”层级的简单使用

目录 简介 示例 &#xff08;1&#xff09;移除 &#xff08;2&#xff09;断开 &#xff08;3&#xff09;焊接 &#xff08;4&#xff09;挤出 &#xff08;5&#xff09;切角 &#xff08;6&#xff09;目标焊接 &#xff08;7&#xff09;连接 简介 在3ds Max中&…

CH583/2构建工程教程

CH583/2构建工程教程 绪论资源移植步骤准备移植步骤一步骤二 工程配置修改工程名修改前修改后 工程配置修改资源文件 修改C/C general修改C/C构建修改汇编交叉编译修改C交叉编译修改GNU RISC-V Cross Linker 修改跟编译 移植注意事项 绪论 资源 CH583/2的SDK下载 移植步骤 …

昨晚做梦面试官问我三色标记算法

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 三色标记算法增量更新原始快照 某天&#xff0c;爪哇星球上&#xff0c;一个普通的房间&#xff0c…

基于Linux操作系统中的shell脚本

目录 前言 一、概述 1、什么是shell&#xff1f; 2、shell脚本的用途有哪些&#xff1f; 3、常见的shell有哪些&#xff1f; 4、学习shell应该从哪几个方面入手&#xff1f; 4.1、表达式 1&#xff09;变量 2&#xff09;运算符 4.2、语句 1&#xff09;条件语句&am…

HIDS-wazuh 的配置和防御

目录 安装wazuh 常用内容 检测sql注入 主动响应 安装wazuh 本地测试的话建议用ova文件&#xff0c;直接导入虚拟机就能用了 官网&#xff1a;Virtual Machine (OVA) - Installation alternatives 常用内容 目录位置&#xff1a;/etc/ossec 配置文件&…

【自动化剧本】Role角色

目录 一、Roles模块1.1roles的目录结构1.2roles 内各目录含义解释1.3在一个 playbook 中使用 roles 的步骤 二、使用Role编写LNMP剧本2.1 搭建Nginx角色2.2搭建Mysql角色2.3搭建php角色2.4lnmp剧本 一、Roles模块 roles用于层次性、结构化地组织playbook。roles能够根据层次型结…