Docker学习笔记

news2025/7/12 7:32:45

1.docker比vm快的原因:

        docker有着比虚拟机更少的抽象层,不需要实现硬件资源的虚拟化运行,运行在docker上的程序使用的都是物理机的资源.

        dicker利用的是宿主机的内核,不需要加载操作系统的os内核.

2.docker帮助文档docker help

        具体到某一个命令是使用 docker run --help即可

3.docker images的表头说明

        repository :表示镜像的源仓库 

        tag: 表示镜像的标签版本号(同一个仓库源可以有多个tag,不说明是默认版本,也可以指定版本)

        image id  镜像id

        created 创建时间

        size 镜像大小

4.docker search --limit 5 redis 搜索前5条redis

5.doker pull 镜像名字[:TAG]  eg:docker pull hello-world    docker pull redis:6.0.8

6.docker system df 列出当前docker上装载的实例

 7.docker rmi -f 镜像ID 删除单个镜像,

     docker rmi -f$(docker images -qa)删除全部镜像, 其中docker images -qa是查询全部id的命令

8.虚悬镜像: 仓库名 和 标签都是none 的镜像

9.要有镜像才能创建容器,也就是说要在docker上创建一个ubuntu或者centos才行

 10.docker中使用run来按照对象生成一个个的实例.

      docker run [options(有些是一个-,有些是两个--)]  image [command][arg...]

        options说明:

            --name ="容器名字" 为容器指定名字

            -d: (详情见15点)后台运行容器并返回容器id,即启动守护式容器 

            -i: 交互模式启动容器,

            -t: 为容器重新分配一个伪输入终端,通常与-i一起使用(docker run -it hello-world)

                如果启动ubuntu系统,需要bash, docker run -it  ubuntu /bin/bash

                退出终端: exit

            -p :指定端口,

            -P:随机端口

11.docker ps 列出所有正在运行的容器实例

        -a: 当前以及历史上运行过的实例

        -l: 最近创建过的容器

        -n:最近创建的n个容器

        -q: 只罗列容器id

12.退出容器:

        exit run进去容器,exit停止,容器停止

        ctrl+p+q: run进去容器,ctrl+p+q 退出,容器不停止

 13.启动已经停止的容器:

        docker start 容器id

14.删除已经停止的容器

        docker rm 容器id  强制删除: docker rm - f  容器id名字

         删除镜像使用 docker rmi 镜像名字

15.docker如果使用docker run -d ubuntu启动实例,会返回一串id,但是 在使用docer ps -a 查看,会发现,并没有刚才已经启动的实例,这是因为docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,比如top.tail,他是会自动退出的.常见的解决方式是以-it 的形式前台运行,这样不会自动退出 .

        redis举例:

        前台启动redis : docker run -it redis 出现了熟悉的redis的图标

        后台守护启动redis: docker run -d redis  这种命令启动的redis是可以的,上文提到的ubuntu是不能以这种方式启动的.

         监控: docker logs id

16.docker 的理解: 

        从面向对象的角度来看.docker利用容器独立运行的一个或者一组应用,容器是用镜像创建的运行实例,容器为镜像提供了一个标准的隔离的运行环境,每个容器都是相互隔离的,保证安全的平台.

        从镜像容器角度:可以把容器看做是一个简易版本的linux环境(包括root用户权限,进程空间,用户空间等)以及运行在其中的应用程序.

17.进入正在运行的容器,并进行交互

      1.docker exec 参数(-it)  容器id  命令  eg: docker exec -it a2dsaaf /bin/bash   无论是何种类型的容器这里都要是-it 容器id /bin/bash 这里这个bin/bash必须加,如果启动的时候,可以不加,这里不加会报错如下:

      2.docker attach 容器id

      二者区别:attatch会直接进入容器命令的终端,不会启动新的进程,用exit退出,会导致容器的停止

                      exec是在容器中打开新的终端,并且可以启动新的进程,也就是说在使用exec执行                              后, 再用exit不会导致容器的终止,使用docker ps命令仍然可以查看到这个容器.

18:docker备份:

        1.拷贝文件到主机:

             docker cp 容器id:容器内的路径 目的主机路径

        2.备份整个容器:

                docker export 容器id > 想要导出成什么名字.tar

         3.将tar导回到原容器:

                cat 文件名.tar|docker import-镜像用户/镜像名:镜像版本号

 然后docker run -it  ycl/ubuntu /bin/bash,  此时得到的容器是之前导入的相同的容器

 19.docker镜像的加载原理:

        docker镜像实际是一种多层次的文件系统组成的,这种层级的文件系统叫UnionFS,对外暴露成一个系统,对内,则像花卷一样,是层层堆叠的.

        bootfs主要包含bootloader和kernel,就像上文提到的一样,可以把容器看做是一个简易版本的linux环境,bootloader的主要作用就是引导加载kernel,linux刚启动的时候会加载bootfs文件系统,在docker镜像的最底层是引导文件系统bootfs,这一层与linux/Unix系统是一样的,包含boot加载器和内核,当boot加载完成后,整个内核就在内存中了,此时内存的使用权交给内核,并卸载bootfs.

        rootfs,在bootfs之上,包含的是典型的linux系统中的/dev ,/proc, /bin等标准目录和文件,rootfs就是各种不同的操作系统的发行版本,比如ubuntu,centos

        对于精简版本的os,只需要最基本的命令,工具就可以了 ,所以底层直接使用的是宿主机的kernel,自己只提供rootfs,因此对于不同的发行版本,bootfs基本是一致的,rootfs会有一定的差别.

20.容器启动时,一个新的可写层被加入到镜像的顶部,这一层通常被称作容器层,容器层之下的都叫镜像层.镜像层是可读的.容器层是可写的.

21.commit命令 上传镜像

         以vim命令举例,在官网上docker pull ubuntu得到的ubuntu是没有vim命令的,需要我们自己安装,安装命令如下:        

apt-get update
#先更行包管理工具
apt-get install vim
#然后安装我们需要的vim

操作结束后,使用commit命令

        docker commit -m="提交的描述信息" -a="作者" 容器id  要创建的目标镜像名:[标签名]

        eg:    docker commit -m="add vim" 41c4273eb615 ycl/ubuntu

        使用 docker images可以得到如下的结果:

        

        可以看出自行创建的镜像的大小明显要大于原始的镜像的大小. 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JMeter】Jmeter分布式压测教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、原理二、环境搭建2.1 环境准备2.2 slave机器配置2.3 master机器配置三、脚本及执行3.1 参数化问题3.2 GUI启动测试3.3 命令行启动测试总结一、原理 Jmeter分布式…

【深入理解Kotlin协程】CoroutineScope.launch源码追踪扒皮

lifecycleScope、viewModelScope、GlobalScope、MainScope的上下文 协程最重要的就是协程上下文对象,因为通过上下文可以获取到协程相关的任何东西(Job、Dispatcher、Interceptor、Name、ExceptionHandler),所以有必要了解清楚常用的协程作用域对象中cor…

asp.net+sqlserver汽车4s店销售网站系统c#项目

数据项 管理员信息表{用户编号,用户名称,用户密码} 新闻信息表{编号,标题,内容,添加时间} 汽车信息表{编号,汽车名称,汽车价格&#x…

制造业行业现状及智能生产管理系统一体化解决方案

前言: 《中国制造2025》作为我国实施制造强国战略第一个十年的行动纲领。它重点提出了坚持:创新驱动、质量为先、绿色发展、结构优化、人才为本的基本方针。坚持:市场主导、政策引导,立足当前、着眼长远,整体推进、重…

Selenium实现原理

Selenium 是目前主流的用于Web应用程序测试的工具,可以直接运行在浏览器中,就像真正的用户在操作一样。 selenium的实现原理是这样的: 1.运行代码,启动浏览器后,webdriver会将浏览器绑定到特定端口,作为we…

[go学习笔记.第十五章.反射] 1.反射的基本介绍以及实践

一.反射的引入以及基本介绍 1.看两个问题 (1).对于结构体的序列化和反序列化,看一段代码 package mainimport("fmt" "encoding/josn" )type Monster struct {Name string json:"monsterName"Age int json:"monsterAge&quo…

deque容器(20221115)

1、基本概念 功能:双端数组,可以对头端进行插入删除元素 deque与vector的区别: vector对应头部的插入删除效率低,数据量越大,效率越低 deque对头部的插入删除速度比vector快 vector访问元素速度比deque快 deque内…

sanic 教程

sanic 教程 在Sanic的生命周期流程大致如下: http请求——Sanic解析request——匹配路由——请求中间件——视图函数——响应中间件——http响应 依赖库 sanic21.3.4 sanic-jwt1.7.0 sanic-openapi21.12.0 gunicorn20.1.0 PyMySQL1.0.2 aiomysql0.1.1 DBUtils1.3…

WPS(WSC)中M1 到M8 图解

背景 之前实习的时候就学了Wifi p2p相关的东西,当时找M1到M8的功能把我累惨了,找到的还全是千篇一律的东西,讲的不是很清楚(当然原版出书的那个前辈肯定是懂的),但是对我等小白不友好,就萌生了这…

3.线性代数-矩阵

矩阵和Tensor1. Tensor2.矩阵3.线性代数正确打开方式3.1 行视图3.2 列视图4.线性相关和线性无关5. Span、基和子空间(Subspace)6.四个基本的子空间6.1 列空间6.2 零空间6.3 行空间6.4 左零空间6.5 四个基本子空间的关系7.可逆矩阵8.方阵的特征值与特征向量9.特征分解9.1一般矩阵…

【Pytorch with fastai】第 7 章 :训练SOTA的模型

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

Nginx优化方案

目录 一、Nginx返回错误页面 1、HTTP常见状态代码列表 二、Nginx状态页面 1、安装status模块 2、激活status 三、优化并发连接数 1、压力测试软件ab(http-tools) 2、优化并发连接数 2.1、修改nginx并发数 2.2、修改内核最大文件数量 四、Nginx…

吉莱斯皮随机模拟算法(SSA)(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

【K8S系列】第十讲:Knative 简介

目录 一、 Serverless介绍 二、Knative 介绍 2.1 Knative 的定位 2.2 Knative的组成 2.2.1 Build 构建系统 2.2.2 Serving:服务系统 2.2.3 Eventing:事件系统 补充: 三、总结: 一、 Serverless介绍 在讲Knative之前&a…

【毕业设计】机器视觉手势检测和识别系统 - python 深度学习

文章目录0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构4 最后0 前…

线程池源码解析 2.工作原理与内部结构

线程池源码解析—工作原理与内部结构 工作原理 概述 线程池是线程的池子,本质上是通过单个线程执行多个并发任务,使得尽量少的创建线程,减少开销。在线程池内部,是没有区分核心线程和非核心线程的,是通过 Set 集合的…

拒绝内卷,阿里架构师整理的这份Java核心手册,堪称最强

2022年注定是不寻常的一年,在今年因为疫情以及各大大厂纷纷传来裁员的消息,引得整个互联网圈动荡不堪。腾讯裁员30%、京东、百度、字节等大厂都在纷纷裁员,引的这些中厂和小厂也跟风裁员。 这个时候外部的各种变化愈发证明一个重要的一点&am…

2022.11.7-11.13 AI行业周刊(第123期):技术人员的职业发展在哪里?

篇章一:技术人员的职业发展 上周和大学时的舍友聊天,交流当前大家的生活状态。 我们已经本科毕业将近10年了,他目前也有两个孩子,在湖北的一个地级市中,从事的是通信行业。 不过随着工作的时间越久,他发…

软件测试面试真题 | 黑盒测试和白盒测试的基本概念是什么?

在软件测试的面试中,什么是黑盒测试,什么是白盒测试是特别容易被问到的一个问题。 面试官问出这个问题,其实考察的是大家对于软件测试基础理论的掌握程度。下面来梳理一下这个问题的回答思路。 黑盒测试 黑盒测试会把被测的软件看作是一个…

只会加班的项目经理,迟早被淘汰

早上好,我是老原。 最近看到一个文章的标题「废掉一个人最好的方式,就是让他忙到没时间学习」,具体内容是什么我还没有细读,只看完标题,有一丝心酸和自豪: 有那么一群人,在玻璃渣里找糖吃&…