Docker-简介、基本操作

目录

Docker理解

1、Docker本质

2、Docker与虚拟机的区别

3、Docker和JVM虚拟化的区别

4、容器、镜像的理解

5、Docker架构

Docker客户端

Docker服务器

Docker镜像

Docker容器

镜像仓库

Docker基本操作

1、Docker镜像仓库

镜像仓库分类

镜像仓库命令

docker login

docker pull

docker push

docker search

docker logout

2、Docker镜像操作

docker images

docker image inspect

docker tag

docker rmi

docker build

docker save

docker load

docker history

docker import

docker image prune

去 DockerHub 搜索并拉取一个 Nginx 镜像,打包后删除镜像,重新加载 .tar 文件

DockerHub搜索 Nginx 镜像

利用docker pull命令拉取镜像

利用docker save命令将 Nginx:latest打包为一个 Nginx.tar 包 

利用docker rmi 删除本地的 Nginx:latest

利用docker load 重新加载 Nginx.tar文件 

3、Docker容器操作

docker run

docker ps

docker logs

docker exec

docker rm

4、数据卷

数据卷解决了什么问题

数据卷操作

创建一个数据卷,查看数据卷在宿主机的目录位置,实现挂载数据卷,最后修改容器内容

使用docker run在运行容器的时候,可以通过 -v 参数来挂载一个数据卷到某个容器目录

查看数据卷

查看数据卷的详细信息


Docker理解

1、Docker本质

Docker本质其实是LXC之类的增强版,它本身不是容器,而是容器的易用工具。容器是Linux内核中的技术,Docker只是把这种技术在使用上普及了。

docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器,docker将程序以及程序所有的依赖都打包到docker container,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系。

我们可以看到docker可以屏蔽环境差异,也就是说,只要你的程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,真正实现了“build once, run everywhere”。

2、Docker与虚拟机的区别

Docker传统虚拟机
底层系统进程操作系统中的操作系统
性能体积小、启动速度快、性能好,接近原生虚拟机体积大、启动速度慢、性能一般
磁盘占用一般为MB一般为GB
启动速度秒级分钟级
隔离策略CGroupsHypervisor
高可用策略弹性、负载、动态备份、容灾、迁移

3、Docker和JVM虚拟化的区别

JVMDocker容器
性能JVM需要占用一定的CPU和内存基本没有损失
虚拟层面基于JVM虚拟化,更加上层基于操作系统,更加通用
代码无关一个特定代码的执行平台,它是运行时才存在的,只能支撑特定代码的执行,并且必须是在jvm进程内

模拟了一整个操作系统,它是静态存在的,可以支撑任何相同平台的应用程序

主机隔离性jvm不隔离主机通过命令空间实现隔离

4、容器、镜像的理解

容器就像一个打包工具,打包的不仅是你的程序,也包括运行环境。就好比你把你的开发主机和开发程序完全复制了一份,别人拿到后就不需要搭建环境,也不需要根据环境进行调试,直接就可以运行了。

镜像像是一个包含了OS文件系统和应用的对象,类似虚拟机的模板(比如Window10镜像)。如果你是一个开发 者,可以把镜像看成面向对象编程中的只读类(read-only Class)。

容器和镜像几乎一模一样,唯一的区别是镜像是只读的,而容器上面有一个可读写层。所以容器=镜像+读写层。

5、Docker架构

Docker客户端

是用户和docker交互的一种方式。它用来接收用户指令并且和docker的守护进程进行通信。

Docker服务器

Docker daemon运行在Docker host上,负责创建、运行、监控容器,构建、存储镜像。默认配置下,Docker daemon默认只能响应来自本地Host的客户端请求

Docker镜像

Docker 镜像是用于创建Docker容器的模板。可将Docker镜像看成只读模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。通过它可以创建Docker容器。

Docker容器

Docker容器就是Docker镜像的运行实例,容器是独立运行的一个或一组应用。容器可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。可以把容器看做是一个简易版的linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

镜像仓库

Registry是存放Docker镜像的仓库,Registry分私有和公有两种。

Docker基本操作

1、Docker镜像仓库

镜像仓库(Docker Registry)具备存储、管理和分发镜像的功能,镜像是Docker运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。

镜像仓库管理多个Registry,Registry通过命名来区分。每个Registry包含一个或多个镜像,镜像通过镜像名称和标签来区分。

镜像仓库分类

公有仓库:像阿里云、dockerhub等放到公有网络上,不用登录就可以下载镜像,供大家使用

私有仓库:不对外开放,往往位于私有网络,只有内部人员可以使用

镜像仓库命令

查看所有命令

docker --help

docker login

登录到一个Docker镜像仓库

docker pull

从镜像仓库中拉取或者更新指定镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

docker push

将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

docker push [OPTIONS] NAME[:TAG]

docker search

从Docker Hub查找镜像

docker search [OPTIONS] TERM

docker logout

登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub

docker logout [SERVER]

2、Docker镜像操作

docker images

查看镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]

docker image inspect

查看镜像详细信息

docker image inspect [OPTIONS] IMAGE [IMAGE...]

docker tag

标记本地镜像,用于推送镜像仓库

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

docker rmi

删除本地镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

关键参数:

        -f:强制删除

        --no-prune:不移除该镜像的过程镜像,默认移除

docker build

通过dockerfile制作镜像

docker save

将指定镜像保存成tar归档文件

docker save [OPTIONS] IMAGE [IMAGE...]

关键参数:

        -o:输出到的文件

docker load

导入使用docker save命令导出的镜像 

docker load [OPTIONS]

关键参数:

        --input,-i:指定导入的文件,代替STDIN

        --quiet,-q:精简输出信息

docker history

查看镜像历史

docker history [OPTIONS] IMAGE

关键参数:

        -H,--human:大小和日期采用人容易读的格式展现

        --no-trunc:显示全部信息,不要隔断

        -q,--quiet:只显示镜像id信息

docker import

从归档文件docker export中创建镜像

docker image prune

删除不使用的镜像

docker image prune [OPTIONS]

关键参数:

        -a,--all:删除全部不使用的镜像

        --filter filter:指定过滤条件

        -f,--force:不提示是否删除

去 DockerHub 搜索并拉取一个 Nginx 镜像,打包后删除镜像,重新加载 .tar 文件

DockerHub搜索 Nginx 镜像

查看 Nginx 镜像的帮助文档信息

利用docker pull命令拉取镜像

docker pull nginx

没有指定版本时就为最新版本

查看镜像

利用docker save命令将 Nginx:latest打包为一个 Nginx.tar 包 

利用docker rmi 删除本地的 Nginx:latest

利用docker load 重新加载 Nginx.tar文件 

3、Docker容器操作

可以通过docker ps查看容器状态

docker run

创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

关键参数:

        -d:后台运行容器,并返回容器ID

        -i:以交互模式运行容器,通常与-t同时使用

        -P:随机端口映射,容器内部端口随即映射到主机的端口

        -p:指定端口映射,格式为:主机(宿主)端口:容器端口

        -t:为容器重新分配一个伪输入终端,通常与-i同时使用

        --name="nginx-lb":为容器制定一个名称

        -h "mars":指定容器的hostname;

        -e username="ritchie":设置环境变量

        -m:设置容器使用内存最大值

        --network="bridge":指定容器的网络连接类型

        --link=[]:添加链接到另一个容器

        --volume,-v:绑定一个卷

        --rm:shell退出的时候自动删除容器

例如:

docker run -d -p 8081:80 nginx:1.23.4

docker ps

查看容器运行状态

关键参数:

        -a:查看所有状态的容器

        -f:根据条件过滤显示的内容

        --format:指定返回值的模版文件,如json或者table

        -l:显示latest的容器

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

        --no-trunc:不阶段输出

        -q:静默模式,只显示容器编号

        -s:显示总的文件大小

docker logs

查看容器日志信息

-f:持续查看容器信息

docker exec

进入容器

docker exec -it mynginx bash

进入mynginx的容器里,

docker rm

删除容器(不能删除运行中的容器)

-f:强制删除

4、数据卷

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁

数据卷解决了什么问题

容器与数据(容器内文件)耦合所引发的问题:容器内数据修改困难:修改时需进入容器内操作,操作复杂不方便;数据不可复用:容器内的修改对外不可见,也就是说每新建一个容器均需执行一次相关操作;升级维护困难:升级容器时会删除旧容器,而数据存储在容器内,也就是说容器升级时数据会跟随旧容器一同被删除。

数据卷操作

数据卷操作的基本语法:

docker volume [COMMAND]

相关参数:

create:创建数据卷

ls:查看所有数据卷

rm:删除指定数据卷

inspect:查看某个数据卷的详情

prune:清楚数据卷

  • 在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载
  • 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷

创建一个数据卷,查看数据卷在宿主机的目录位置,实现挂载数据卷,最后修改容器内容

使用docker run在运行容器的时候,可以通过 -v 参数来挂载一个数据卷到某个容器目录

其中 -v 后面的 html 是我们刚刚创建的数据卷(如果没创建会自动创建),而后面的 /user/share/nginx/html 是对应容器中的目录地址 

查看数据卷

查看数据卷的详细信息

vim 打开后可以看到 index.html 并修改标题数据

网页访问

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

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

相关文章

CV计算机视觉每日开源代码Paper with code速览-2023.11.22

点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【语义分割】Mobile-Seed: Joint Semantic Segmentation and Boundary Detection for Mobile Robots 论文地址:https://arxiv.or…

高效视频剪辑:按指定时长批量分割视频,释放无尽创意

随着数字媒体技术的不断发展,视频剪辑已经成为日常生活中不可或缺的一部分。无论是制作电影、电视剧,还是创意生活短视频,视频剪辑都扮演着重要的角色。然而,对于许多非专业人士来说,视频剪辑可能是一项复杂而耗时的任…

C#,《小白学程序》第二十五课:大数乘法(BigInteger Multiply)的Karatsuba算法及源代码

1 文本格式 /// <summary> /// 《小白学程序》第二十五课&#xff1a;大数&#xff08;BigInteger&#xff09;的Karatsuba乘法 /// Multiplies two bit strings X and Y and returns result as long integer /// </summary> /// <param name"a">&…

如何在Ubuntu系统上安装Redis

Redis的下载 Redis安装包分为windows版和Linux版当前示例中介绍的是Linux版本Linux的下载地址&#xff1a;Index of /releases/ (redis.io)本次下载的压缩包为&#xff1a;redis-6.2.14.tar.gzRedis的安装 将压缩包通过ssh远程工具上传到Linux服务器中解压压缩包 tar -zxvf red…

深度学习18

卷积层 查看每个数据 使用tensorboard查看 池化层 使用数据集进行训练 创建实例&#xff0c;使用tensorboard进行显示 最大池化保留了图片信息&#xff0c;神经网络训练的数据量大大减小&#xff0c;可以加快训练 非线性激活 非线性激活为神经网络加入了一些非线性的特质…

蓝桥杯每日一题2023.11.27

题目描述 星系炸弹 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目一一枚举即可 #include<bits/stdc.h> using namespace std; bool is_r(int n) {if((n % 4 0 && n % 100 ! 0)|| n % 400 0)return true;return false; } int mm[13] {0, 31, 28, 31, 30, 3…

【日常总结】优雅升级Swagger 2 升至 3.0, 全局设置 content-type application/json

目录 一、场景 二、问题 三、解决方案 四、延伸 上一节&#xff1a;【日常总结】Swagger-ui 导入 showdoc &#xff08;优雅升级Swagger 2 升至 3.0&#xff09;-CSDN博客 一、场景 接上一节&#xff1a;在 Swagger3Config extends WebMvcConfigurationSupport&#xff0c…

ECShop 4.x collection_listSQL注入

漏洞描述 ECShop是一款B2C独立网店系统&#xff0c;适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序 影响版本&#xff1a;ecshop4.0.7及以下 漏洞环境及利用 docker环境搭建 访问8080端口&#xff0c;数据库主机为mysql&a…

vue day2

1、指令修饰符&#xff1a;.指明一些指令后缀&#xff0c;不同后缀封装不同处理操作 按键修饰符&#xff1a;keyup.enter v-model修饰符&#xff1a; v-model.trim&#xff1a;去首位空格 v-model.number&#xff1a;转数字 事件修饰符&#xff1a; 阻止事件冒泡&#xff1…

毫米波雷达DOA角度计算-----DBF算法

DBF算法实现程序如下&#xff1a; 输入&#xff1a; parameter 是 毫米波雷达的参数设置。 antVec 是 目标点的8个虚拟天线的非相参积累数据。 function [angle,doa_abs] dbfMethod(parameter,antVec)txAntenna parameter.txAntenna; % 发射天线 [1 1]rxAntenna para…

交换技术-电路交换-报文交换-分组交换

交换技术是指主机之间、通信设备之间或主机与通信设备之间为交换信息所采用的数据格式和交换装置的方式。按交换技术可分为&#xff1a;电路交换、报文交换和分组交换。 电路交换 交换(switching)&#xff0c;就是按照某种方式动态地分配传输线路的资源。 电路交换是在源结点…

MFC、VC++操作excel后,excel程序进程无法正常退出的非暴力处理方法

先说处理方式 1、最low的方式&#xff1a;强制结束进程 //打开进程得到进程句柄 HANDLE hProcessOpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid); if(hProcess!NULL) { //结束进程 if (TerminateProcess(hProcess,0)){printf("结束进程成功\n");return 0;} }这种方式…

带你用uniapp从零开发一个仿小米商场_10. 首页开发

图标菜单栏开发 轮播图开发完成后,就是图标菜单栏了 可以看出这些图标都是一样的样式,所以可以勇哥flex布局让他们每个占百分之20 代码如下,既然都是一样的那就直接用个循环嵌套一下 data数据如下 同样,为了能让这段代码能在别的地方也用到,我直接把它封装成组件 <templ…

nodejs+vue+elementui学生竞赛管理系统65o97

高校人才培养计划的重要组成部分&#xff0c;是实现人才培养目标、培养学生体育 能力与创新思维、学生竟赛管理系统检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而我所在学院多采用半手工管理学生竟赛的方式&#xff0c;所以有必要开发学生竟赛管理系统来对学生…

成为AI产品经理——TPR、FPR、ROC、AUC

目录 一、PR图、BEP 1.PR图 2.BEP 二、灵敏度、特异度 1.灵敏度 2.特异度 三、真正率、假正率 1.真正率 2.假正率 三、ROC、AUC 1.ROC 2.AUC 四、KS值 一、PR图、BEP 1.PR图 二分类问题模型通常输出的是一个概率值&#xff0c;我们需要设定一个阈值&#xff…

金蝶Apusic应用服务器 任意文件上传漏洞复现

0x01 产品简介 金蝶Apusic应用服务器&#xff08;Apusic Application Server&#xff0c;AAS&#xff09;是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件&#xff0c;全面支持JakartaEE8/9的技术规范&#xff0c;提供满足该规范的Web容器、EJB容器以及WebSer…

【uniapp】微信运行报错TypeError_ Cannot read property ‘FormData‘ of undefined

文章目录 一、报错详情&#xff1a;二、解决&#xff1a; 一、报错详情&#xff1a; 二、解决&#xff1a; npm install axios0.27.2 #或者 npm install axios1.3.4

“于阗佛国、美食和田”——“万人游新疆”推广活动走进企业

11月23日&#xff0c;在安徽省文旅厅、安徽省援疆指挥部、和田地区文旅局的指导和支持下&#xff0c;由安徽环球文旅集团组织的“于阗佛国、美食和田”——“万人游新疆”分享会在安徽合肥市财富广场瑞众保险&#xff08;原华夏保险&#xff09;3楼黄山厅会议室举行&#xff0c…

Django总结

文章目录 一、Web应用Web应用程序的优点Web应用程序的缺点应用程序有两种模式C/S、B/S C/S 客户端/服务端局域网连接其他电脑的MySQL数据库1.先用其他电脑再cmd命令行ping本机ip2.开放MySQL的访问 B/S 浏览器/服务端基于socket编写一个Web应用 二、Http协议1.http协议是什么2.h…

docker基础快速入门:基础命令、网络、docker compose工具

docker基础命令快速入门 目录 docker基本命令docker 网络docker compose Docker介绍 Docker是一个虚拟环境容器&#xff0c;可以将你的开发环境、代码、配置文件等一并打包到这个容器中&#xff0c;并发布和应用到任意平台中。 Docker的三个概念 镜像 Docker镜像是一个特…