当前位置: 首页 > news >正文

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 并修改标题数据

网页访问

相关文章:

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…...

Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)

A.手玩题&#xff1a; 可以通过最后一个样例&#xff0c;如果是长度为3的连续O&#xff0c;直接在两边放就行&#xff0c;然后一直用中间的水填到其他地方 #include<bits/stdc.h> using namespace std; const int N 3e510,mod 998244353; #define int long long int n…...

给csgo游戏搬砖新手的十大建议

1、不要参与赌博性质的开箱和炼金&#xff0c;因为真的会上瘾&#xff0c;赚了还好&#xff0c;亏了你得哭。 2、实在想要玩饰品&#xff0c;直接去悠悠有品或者网易buff看价格&#xff0c;底价再砍10元&#xff0c;总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请…...

西南科技大学模拟电子技术实验一(常用电子仪器的使用及电子元器件的识别)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元 1、用万用表电阻挡测量实验板(箱)上电位器(可调电阻)的参数范围。 0~1kΩ电阻: 1k*0%=0 1k*100%=1k 所以范围为0~1k 0~10kΩ电阻: 10k*0%=0 10k*…...

回归分析例题(多元统计分析期末复习)

例一 例二 一元线性回归 解&#xff1a; &#xff08;1&#xff09;y a ^ \hat{a} a^ b ^ \hat{b} b^x&#xff0c;求线性回归方程即求出 a ^ \hat{a} a^和 b ^ \hat{b} b^ 而 b ^ \hat{b} b^ L x y L x x { {L_{xy}} \over {L_{xx}} } Lxx​Lxy​​ 所以我们首先需要计算 L x…...

Linux多路转接select,poll

文章目录 目录 文章目录 一、五种IO模型 1.阻塞IO: 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 二、高级IO的一些重要概念 1.同步通信和异步通信 2.阻塞和非阻塞 三、其他高级IO 四、非阻塞IO 1.fctl函数 2.实现setNoBlock函数&#xff0c;将文件描述符设置…...

如何轻松将 4K 转换为 1080p 高清视频

由于某些原因&#xff0c;你可能有一些 4K 视频&#xff0c;与1080p、1080i、720p、720i等高清视频相比&#xff0c;4K 视频具有更高的分辨率&#xff0c;可以给您带来更多的视觉和听觉享受。但是&#xff0c;播放4k 视频是不太容易的&#xff0c;因为超高清电视没有高清电视那…...

责任链模式 (Chain of Responsibility Pattern)

定义 责任链模式是一种行为型设计模式&#xff0c;用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求&#xff0c;从而减少请求的发送者和接收者之间的耦合。在责任链模式中&#xff0c;每个接收者包含对另一个接收者的引用&#xff0c;形成一条链。如果一个对…...

企业营销管理能够实现自动化吗?怎么做?

当今企业面临着越来越多的营销难题&#xff1a;如何有效培育潜在客户、如何提高营销活动的效果、如何优化营销资源的分配......企业的营销管理怎么做&#xff1f;或许CRM系统营销自动化会起到作用。 客户细分&#xff1a; 企业可以通过CRM的客户细分功能&#xff0c;根据客户…...

【数据结构】什么是栈?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;栈的定义 &#x1f4cc;元素进栈出栈的顺序 &#x1f4cc;栈的抽象数据类型 &#x1f4cc;栈的顺序存储结构 &#x1f4cc;栈的链式存储结构 链栈的进…...

基于C#实现鸡尾酒排序(双向冒泡排序)

通俗易懂点的话&#xff0c;就叫“双向冒泡排序”。 冒泡是一个单向的从小到大或者从大到小的交换排序&#xff0c;而鸡尾酒排序是双向的&#xff0c;从一端进行从小到大排序&#xff0c;从另一端进行从大到小排序。 从图中可以看到&#xff0c;第一次正向比较&#xff0c;我们…...

CentOS添加开机启动

1.编写项目启动脚本&#xff08;run.sh&#xff09; #!/bin/bash-切换到程序所在路径 cd /home/cavs_install/app/cavs-admin/target/ # 等待其他组件启动完毕后再启动本项目&#xff08;如果不需要等待&#xff0c;本步骤可省略&#xff09; sleep 300 # 实际启动命令 nohup …...

SpringCloudAlibaba之Nacos的持久化和高可用——详细讲解

目录 一、Nacos持久化 1.持久化说明 2.安装mysql数据库5.6.5以上版本(略) 3.修改配置文件 二、nacos高可用 1.集群说明 2.nacos集群架构图 2.集群搭建注意事项 3.集群规划 4.搭建nacos集群 5.安装Nginx 6.配置nginx conf配置文件 7.启动nginx进行测试即可 一、Nacos持久…...

vue3安装eslint和prettier,最简单的步骤

第1步&#xff1a; 安装eslint yarn add eslint -D 第2步&#xff1a; 在根文件夹中&#xff0c;创建.eslintrc.js文件 第3步&#xff1a; 在package.json文件中新增命令 "lint": "eslint --fix --ext .ts,.tsx,.vue src --quiet","prettier"…...

Day32| Leetcode 122. 买卖股票的最佳时机 II Leetcode 55. 跳跃游戏 Leetcode 45. 跳跃游戏 II

Leetcode 122. 买卖股票的最佳时机 II 题目链接 122 买卖股票的最佳时机 II 本题目设计的还是比较巧妙的&#xff0c;把最终的利润分为每天的利润就解决了&#xff08;贪心&#xff09;&#xff0c;每天的利润就是前一天买进&#xff0c;后一天卖出&#xff0c;转化到代码上就…...

95.STL-遍历算法 for_each

算法概述: 算法主要是由头文件 <algorithm> <functional> <numeric> 组成。 <algorithm> 是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 <numeric> 体积很小&#xff0c;只包括几个在序列上面…...

Python基础语法之学习type()函数

Python基础语法之学习type函数 一、代码二、效果 查看数据类型或者说查看变量存储的数据类型 一、代码 print(type("文本")) print(type(666)) print(type(3.14))二、效果 梦想是生活的指南针&#xff0c;坚持追逐梦想&#xff0c;终将抵达成功的彼岸。不要害怕失败…...

filebeat报错dropping too large message of size

filebeat报错&#xff1a; dropping too large message of size 1714620. 原因&#xff1a; kafka对每一条消息的大小进行了限制。 解决 kafka端 修改config/server.properties&#xff0c;添加以下配置 max_message_bytes10000000 replica.fetch.max.bytes10000000修改…...

【C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )

文章目录 一、子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast1、构造父类和子类2、子类 和 父类 之间的类型转换 - 隐式类型转换3、子类 和 父类 之间的类型转换 - 静态类型转换 static_cast4、子类 和 父类 之间的类型转换 - 重新解释类型转换 reinterpret_cast5、…...

在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问

文章目录 引言第一部分&#xff1a;FastDFS介绍与安装1.1 FastDFS简介1.2 FastDFS安装1.2.1 安装Tracker Server1.2.2 安装Storage Server 1.3 FastDFS配置1.3.1 配置Tracker Server1.3.2 配置Storage Server1.3.3 启动FastDFS服务 第二部分&#xff1a;Nginx配置2.1 Nginx安装…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...