Docker学习笔记

【Docker 学习笔记】Docker 命令大全 【Docker 学习笔记】Docker 命令大全。本文总结了Docker使用过程中常用命令,以及各命令常用参数的解释说明。 阅读详情

1. docker是什么

docker核心功能是镜像(容器)管理,容器是应用的打包,包含了应用执行所依赖的数据(包括lib,配置文件等等),实现快速开发和部署应用。

之前也有可以提供镜像管理的产品,如vagrant。

Vagrant并不提供虚拟化技术,本质上是一个虚拟机外挂,通过虚拟机的管理接口来管理虚拟机,让用户更轻松的进行一些常用配置,比如:CPU/Memory/IP/DISK等分配。并且提供了一些其它的管理操作:比如开机运行指定命令,镜像二次打包,插件编写等等。

docker是一个容器引擎,每一个实例是一个相对隔离的空间,与宿主机共享操作系统内核,并且共享宿主机资源。相对于披着虚拟机皮的vagrant,docker相对虚拟机更加轻量,消耗更少的资源。虚拟化只是docker运行镜像的一个环节。贴一张docker官方介绍图。

这里写图片描述

Vagrant是设计用来管理虚拟机的(操作系统级别镜像),是对传统虚拟机的一层封装,使用puppet和/或chef管理,用来自动调配多个虚拟机,能让你更方便的使用虚拟机,但依赖第三方虚拟化(VirtualBox、VMware fusion,甚至amazon-ec2,最近支持了docker),主要解决的是开发,测试和运维一整套流程相关的问题。

Docker是设计用来管理应用的(应用级别镜像),是基于lxc的虚拟化的容器技术,虚拟化只是docker运行镜像的一个环节,解决了同一机器上的环境隔离,以及提高部署时环境依赖的效率。

两者解决的问题有些相像,但是解决的方案不是在一个层次上的。对于开发环境来说,vagrant是一种更为抽象,更为通用的解决方案。Docker所能提供的场景只是vagrant所支持的特殊场景之一。

2. 框架

Docker使用client-server架构模式,如下图。用户不直接和DOCKER_HOST交互,而是通过Client用户接口接收用户指令,然后和DOCKER_HOST的Daemon通信。Docker daemon会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。

这里写图片描述

Docker内部主要有三种资源:

● images
● registries
● containers

Docker image是一个只读模板,包含了操作系统以及可运行的应用。镜像是用来创建容器的,是Docker的 构建 部分。

Docker registry是镜像仓库。是Docker的 分发 部分。

Docker contatiner类似文件夹,包含了应用运行所需要的所有环境。每一个容器都是一个独立和安全的应用平台,可以运行、开始、停止、移动和删除,是Docker的 运行 部分。

3. 工作原理

3.1 镜像工作原理

Docker镜像是Docker容器运行时的只读模板。每一个镜像由一系列的层(layers)组成。Docker使用UnionFS来将这些层联合到一个镜像中。Union文件系统允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。

修改一个Docker镜像,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级。分层使得分发Docker镜像变得简单和快速。

每个镜像都是从一个基础的镜像开始的,在这些基础镜像上,Docker镜像通过指令(一种简单、具有描述性的步骤)进行创建,每个指令在镜像中创建新的层,指令可以包含这些动作:

  • 运行一个命令。
  • 增加文件或者文件夹。
  • 创建一个环境变量。
  • 当运行容器的时候哪些程序会运行。

这些指令存储在Dockerfile文件中。当你需要建立镜像的时候,Docker可以从Dockerfile中读取这些指令并且运行,然后返回一个最终的镜像。

3.2 仓库工作原理

仓库用于存储镜像。

3.3 容器工作原理

一个Docker容器包含了一个操作系统、用户添加的文件和元数据(meta-data)。

我们可以看到,每个容器都是从镜像建立的。镜像告诉 Docker容器内包含了什么,当容器启动时运行什么程序,还有许多配置数据。

Docker镜像是只读的。当Docker运行一个从镜像建立的容器,它会 在镜像顶部添加一个可读写的层,应用程序可以在这里运行。

4. 容器运行

使用docker指令系统运行容器:

$ docker run -i -t ubuntu /bin/bash

Docker客户端使用docker命令来运行,run参数表明客户端要运行一个新的容器。Docker客户端运行一个容器至少需要告诉Docker守护进程以下参数信息:

  • 这个容器从哪个镜像创建,这里是ubuntu,基础的Ubuntu镜像。
  • 在容器中要运行的命令,这里是/bin/bash,在容器中运行Bash shell。

命令运行后,docker按顺序执行:

  • 拉取ubuntu镜像:Docker检查ubuntu镜像是否存在,如果在本地没有该镜像,Docker会从Docker Hub下载。如果镜像已经存在,Docker会使用它来创建新的容器。
  • 创建新的容器:当Docker有了这个镜像之后,Docker会用它来创建一个新的容器。
  • 分配文件系统并且挂载一个可读写的层:容器会在这个文件系统中创建,并且一个可读写的层被添加到镜像中。
  • 分配网络/桥接接口:创建一个允许容器与本地主机通信的网络接口。
  • 设置一个IP地址:从池中寻找一个可用的IP地址并且服加到容器上。
  • 运行你指定的程序:运行指定的程序。
  • 捕获并且提供应用输出:连接并且记录标准输出、输入和错误让你可以看到你的程序是如何运行的。

现在拥有了一个运行着的容器!从这里开始你可以管理你的容器,与应用交互,应用完成之后,可以停止或者删除你的容器。

5. 底层技术

Docker使用Go语言编写,并且使用了一系列Linux内核提供的性能来实现我们已经看到的这些功能。

5.1 命名空间(Namespaces)

Docker充分利用了一项称为namespaces的技术来提供隔离的工作空间,我们称之为 container(容器)。当你运行一个容器的时候,Docker为该容器创建了一个命名空间集合。

这样提供了一个隔离层,每一个应用在它们自己的命名空间中运行而且不会访问到命名空间之外。

一些Docker使用到的命名空间有:

  • pid命名空间: 使用在进程隔离(PID: Process ID)。
  • net命名空间: 使用在管理网络接口(NET: Networking)。
  • ipc命名空间: 使用在管理进程间通信资源 (IPC: InterProcess Communication)。
  • mnt命名空间: 使用在管理挂载点 (MNT: Mount)。
  • uts命名空间: 使用在隔离内核和版本标识 (UTS: Unix Timesharing System)。

5.2 群组控制

Docker还使用到了cgroups技术来管理群组。使应用隔离运行的关键是让它们只使用你想要的资源。这样可以确保在机器上运行的容器都是良民(good multi-tenant citizens)。群组控制允许Docker分享或者限制容器使用硬件资源。例如,限制指定的容器的内容使用。

5.3 联合文件系统

联合文件系统(UnionFS)是用来操作创建层的,使它们轻巧快速。Docker使用UnionFS提供容器的构造块。Docker可以使用很多种类的UnionFS包括AUFS, btrfs, vfs, and DeviceMapper。

5.4 容器格式

Docker连接这些组建到一个包装中,称为一个 container format(容器格式)。默认的容器格式是libcontainer。Docker同样支持传统的Linux容器使用LXC。在未来,Docker也许会支持其它的容器格式,例如与BSD Jails 或 Solaris Zone集成。

6. 命令

这里写图片描述

docker命令总的来说分为以下几种:

  • 容器生命周期管理

    docker [ run | start | stop | restart | kill | rm | pause | unpause ]
    
  • 容器操作运维

    docker [ ps | inspect | top | attach | events | logs | wait | export | port ]
    
  • 容器rootfs命令

    docker [ commit | cp | diff ]
    
  • 镜像仓库

    docker [ login | pull | push | search ]
    
  • 本地镜像管理

    docker [ images | rmi | tag | build | history | save | import ]
    

    示例:

    docker images # 列出机器上的镜像
    
  • 环境信息相关

    docker [ info | version ]
    

7. 管理数据

docker管理数据有两种方法:数据卷和数据卷容器

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用 *数据卷的使用,类似于 Linux 下对目录或文件进行 mount

创建数据卷

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。

下面创建一个 web 容器,并加载一个数据卷到容器的 /webapp 目录。

sudo docker run -d -P --name web -v /webapp training/webapp python app.py

参考文献

  1. Get started with Docker
  2. 7 步精简 Docker 镜像几百MB(上)
  3. 深入了解Docker存储驱动
  4. Docker生态系统 – 常规组件简介
  5. Docker是什么 Docker定义解释
  6. Linux vs Windows 容器:有什么区别?
告别盲目调参:手把手教你用RKISP2.x Tuner理解AWB、AE、NR等核心模块 本文详细介绍了如何使用RKISP2.x Tuner工具进行ISP调试,重点解析AWB、AE、NR等核心模块的调参技巧。通过RV1126平台的实际操作演示,帮助工程师快速掌握可视化对比实验方法,告别盲目调参,提升图像信号处理效率。 阅读详情

相关推荐

Unity - gamma space下还原linear space效果

还有头发之后的 (头发没有处理完整,因为使用 ASE 连连看练出来的,使用 surface shader,虽然可以生成一下 vert, frag 的方式在修改,但是我懒得去修改了,这样就是 PBR 的 BRDF 里面的部分曲线是不一样的,所以可以看到头发有一些差异)其实上面的代码判断 是否有分量 > 1.0f 的方式来判断是否 HDR 是不太合理的,因为不同的贴图格式的编码方式不同。还有比较隐蔽的一些颜色相关的常量值 (比如PBR中的 绝缘体的 F0 常量值,等等)

Jave.Lin 的学习笔记 2828

Linux系统下使用移动硬盘或者U盘,如何挂载硬盘分区到Linux系统

mount, umount,挂载,LINUX下访问移动硬盘U盘

meihualing的专栏 6059

解密m3u8视频合并:从猫抓插件到本地文件修改全流程

本文详细解析了m3u8视频合并的全流程,特别针对加密视频片段提供了解决方案。从使用猫抓插件捕获m3u8文件地址,到利用N_m3u8DL-CLI工具自动下载、解密并合并ts片段,手把手教你处理AES-128加密等常见问题,最终生成完整的本地MP4文件,适合需要备份或处理流媒体资源的用户。

weixin_29290947的博客 1358

深入探索Linux文件系统与挂载点:掌握分区、挂载技巧

本篇内容很简单,就是给分享一下挂载的小知识点。在挂载文件系统的时候,尽可能选择空目录进行挂载,当然了不是空的目录也可以,但是不建议。在实际的挂载中会出现这样一种情况,如果选择当挂载点的目录非空,当文件系统挂载上之后就会发现原来目录下的文件都“丢失”了,不是真的丢失了,只是隐藏了而已。当你把文件系统卸载之后机会发现目录下原来的文件又都回来了。👇点击下方公众号卡片获取资料👇。

让技术没有门槛 2604

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活,在加上陪伴自己的孩子没有时间更新文章了,这只能在晚上给大家写文档了,我最近在游戏公司上班,研究封包。我把这些东西都做成了笔记,我想有些东西是大家都想弄明白d ...

寒梅独自开 1万+

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1133

docker学习笔记

docker学习笔记1.docker镜像的拉取及启动2.列出容器3.退出容器4.删除容器5.启动及停止容器6.显示log7.查看容器信息8.进入容器 前言 学习并使用docker。 目标:能够使用docker搭建服务 一、docker学习笔记 1.docker镜像的拉取及启动 docker镜像的拉取: docker pull centos 拉取镜像 docker run --helper 查看run后可跟随的命令 启动............

foolishsunday的博客 2402

智能环境感知:STM32多传感器数据融合与报警策略设计

本文详细介绍了基于STM32的多传感器数据融合系统设计,整合DHT11温湿度传感器、MQ-2烟雾检测和光照强度检测模块,通过智能算法实现环境感知与动态报警。系统采用数据滤波、多传感器校验和自适应阈值策略,显著提升监测精度与可靠性,并通过OLED显示屏提供清晰的多级报警界面。

plant的博客 200

docker -- 学习笔记

是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。官网bridge:为每一个容器分配、设置IP等,并将容器连接到一个docker0,虛拟网桥,默认为该模式。使用指定(默认使用dicker0)。host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。使用指定。none:容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等。使用指定。container。

mocoll的博客 758

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3329

基于STM32设计的计算器(实现基本运算)

当前文章介绍的是STM32+LCD触摸屏设计的一个触摸计算器功能,实现基本的加减乘除,二进制转换显示等功能。LCD屏使用的是3.5寸带触摸屏的显示屏,方便操作屏幕,MCU采用STM32F103ZET6。

8814

【docker】docker学习笔记

docker学习笔记

weixin_43308380的博客 1361

05GATK流程和找变异

05GATK流程和找变异 GATK 集合了一套功能全面的高通量测序数据基因组分析工具包,算是业界的权威,更新的速度非常快。需要注意的是,不同版本的 GATK 在工具应用上会有些许不同。这里我们使用是最新版本 GATK 4.1.4.1(截止2019年12月31日)。 数据准备 前面我们提到了,走GATK流程需要到官网下载很多数据库文件,比如下面这些: dbsnp_146.hg38.vcf.gz dbsnp_146.hg38.vcf.gz.tbi Mills_and_1000G_gold_standard.

qq_23435961的博客 1659

Docker的学习笔记

网上关于docker的介绍很多,要不就是讲的很底层,要不就是不连贯,能把知识穿起来的我没找到,所以最后还是自己写个笔记,方便以后回顾。对于笔记的学习,还是看不太进去,准备找一些视频介绍进行学习。

qq_55728814的博客 1686

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Docker学习笔记索引

Docker学习笔记 ->环境与背景篇->1、容器技术 Docker学习笔记 ->环境与背景篇->2、docker简介 Docker学习笔记 ->环境与背景篇->3、安装docker(ubuntu ) Docker学习笔记 ->环境与背景篇->3、安装docker(CentOS7 ) Docker学习笔记 ->环境与背景篇->3、安装d...

外环西路 591

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Docker学习笔记这一篇就够

​ Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。​ Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。

weixin_45501045的博客 1061

狂神Docker学习笔记下载

狂神Docker学习笔记下载 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个名为“狂神Docker学习笔记.pdf”的资源文件下载。该文件是学习Docker时整理的学习笔记,内容详实,适合初学者和进阶学习者参考。 资源文件描述 文件名: 狂神Docker学习笔记.pdf 文件类型: PDF 文件大小: [文件大小] 内容概述: 该PDF文件包含了Docker的...

gitblog_06644的博客 424

Docker 完整学习笔记

记录docker的学习过程

dandingchongci的博客 1280
上一篇: JAVA基础(13)——序列化
下一篇: Flink on yarn 常见错误
白水不开
博客等级 码龄18年 91粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值