开发必备技术--docker(使用篇)
文章目录
- 前言
- Docker的基本概念
- 概念
- 数据卷
- 虚拟网络
- 镜像操作
- 镜像名称
- 镜像命令
- 容器操作
- 基本操作
- 容器创建
- 数据卷操作
- 创建和查看数据卷
- 其他指令
- 实战
前言
续接上一篇博文:
开发必备技术–docker(一)
这也是开学了,假期的最后一篇博文,后面的一些文章可能就是以图片,pdf文档的形式了,尤其后面设计到数学,算法类型的博文都是这种形式的,当然无所谓,写东西的核心目的还是方便自己,如果觉得对你有用的话,请不要吝啬你的三连~
Docker的基本概念
概念
在docker的操作之中有两个比较重要的概念,镜像和容器。其实他们的之间的关系非常简单,我们通过镜像来创建容器。因此对于docker的命令其实也就是分为三个类别,第一个是关于镜像的操作,第二个是关于容器的操作,第三个其实就是一些其他的辅助的命令。
那么镜像和容器之间的关系是啥呢,我们用虚拟机来举例子其实就是,这个镜像其实就相当于我们在创建虚拟机的时候系统镜像,只不过这个系统镜像比较特殊,它里面自带了一些“捆绑软件”,这些软件是我们开发的时候需要用到的软件,比如mysql,redis,mongdb,之类的东西。那么容器呢起就是我们创建出来的虚拟机,通过一个镜像我们可以创建很多个虚拟机。所以说我们用docker后面部署运行的其实就是容器,但是这个容器和我们的虚拟机不一样的是,虚拟机是在一个系统上模拟一个新的系统,然后在模拟的系统上面在运行软件,但是docker不是,他就是在同一个系统上面去运行,只是环境进行了隔离。其实再类比一下就是,虚拟机是我们使用一些模拟玩游戏的场景类似,在运行游戏的时候,还需要运行一个模拟的安卓系统。那么docker里面的容器其实就相当于这个微信,或者支付宝小程序一样,小程序之间是不同的,只是用微信,或者支付宝作为载体。
数据卷
现在的话我们已经知道了镜像和容器之间的关系。我们需要使用镜像来创建我们的容器,容器是一个相对隔离的东西,那么有时候,我们希望在容器里面的一些操作可以被我们持久化到我们的本地。因此此时一个容器,我们还是可以看做一个虚拟操作系统的,我们可以运行这个容器,也可以到容器里面操作,但是我们还希望有时候容器里面的一些数据也可和我们本地的计算进进行一个保存。
那么数据卷其实就相当于我们本地计算机和容器之间的一个映射,那么这样做有啥好处嘛?首先肯定是保存数据,那么第二其实也是方便我们直接做一些修改。比如我们部署了一个nginx的容器,现在要修改里面的配置文件,我们可以进入到容器里面进行修改,但是这样做的其实还是比较麻烦的,也可以做一个映射,我们在我们的宿主电脑上直接修改配置文件。
所以:
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录
那么这个在文章下面关于容器的操作当中会进行描述,因为这个显然和我们容器是相关的。
虚拟网络
是的和虚拟机一样,docker也是支持虚拟网络的。
docker 使用linux 桥接,在宿主机虚拟一个docker 容器网桥(docker0) ,docker 启动一个容器时会根据docker 网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker 网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
docker 网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP 访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主机(端口映射),即 docker run 创建容器时候,通过 -p 或者 -P 参数来启用。访问容器的时候,就通过 [宿主机IP]:[映射端口] 访问容器。
docker run -itd --name=为容器指定名称 -p 宿主机端口:容器端口 镜像名称
这里的话我就不展开了,其实也挺复杂的,我用的挺少的,当然我的开发水平也就这样,接触的不多,我顶多就是部署一下环境,部署一下java应用,部署一下pytorch 写的dome,或者跑跑智能计算的benchmark。
镜像操作
镜像名称
- 镜名称一般分两部分组成:[repository]:[tag]。
- 在没有指定tag时,默认是latest,代表最新版本的镜像
mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。
镜像命令
镜像之间的操作如图所示:
对于这些指令的话,我们直接通过–help可以看到如何用,以save指令为例子:
docker save --help
那么这里可能用的比较频繁的指令有:
docker pull 镜像名:(拉取镜像,在线)docker load -i 镜像压缩包docker save -o [保存的目标文件名称] [镜像名称]docker images 查看拉取到的镜像docker rmi 镜像名:版本号 (删除镜像)
容器操作
基本操作
那么说了有关于镜像的操作,我们来看到关于容器的操作,他们的之间的关系如图:
首先的话我们的容器有几个基本的状态。
- 运行:进程正常运行
- 暂停:进程暂停,CPU不再运行,并不释放内存
- 停止:进程终止,回收进程占用的内存、CPU等资源
此外:
- docker run:创建并运行一个容器,处于运行状态
- docker pause:让一个运行的容器暂停
- docker unpause:让一个容器从暂停状态恢复运行
- docker stop:停止一个运行的容器
- docker start:让一个停止的容器再次运行
- docker ps -a 查看所有容器
- docker container -ls / docker ps -n x 查看在运行的容器
- docker rm:删除一个容器
容器创建
那么之后我们来看到我们关于容器的一个重点,那就是我们如何通过镜像来创建我们的容器。
那么这里的话,我们直接以一段命令来解释:
(安装ElasticSearch)
docker run -d \--name es \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-e "discovery.type=single-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
命令解释:
-e "cluster.name=es-docker-cluster"
:设置集群名称
-e "http.host=0.0.0.0"
:监听的地址,可以外网访问
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
:内存大小
-e "discovery.type=single-node"
:非集群模式
-v es-data:/usr/share/elasticsearch/data
:挂载逻辑卷,绑定es的数据目录
-v es-plugins:/usr/share/elasticsearch/plugins
:挂载逻辑卷,绑定es的插件目录
--privileged
:授予逻辑卷访问权
--network es-net
:加入一个名为es-net的网络中
-p 9200:9200
:端口映射配置
数据卷操作
okey,我们现在来说一下这个数据卷,前面我们有说到数据卷是啥,并且在容器的创建当中我们通过-v指令其实也是
数据卷操作的基本语法如下:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
- create 创建一个volume
- inspect 显示一个或多个volume的信息
- ls 列出所有的volume
- prune 删除未使用的volume
- rm 删除一个或多个指定的volume
创建和查看数据卷
需求:创建一个数据卷,并查看数据卷在宿主机的目录位置
- 创建数据卷
docker volume create html
- 查看所有数据
docker volume ls
- 查看数据卷详细信息卷
docker volume inspect html
其他指令
数据卷操作:
- docker volume create:创建数据卷
- docker volume ls:查看所有数据卷
- docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置
- docker volume rm:删除指定数据卷
- docker volume prune:删除所有未使用的数据卷
创建使用实例:
$ docker volume create hello
hello
$ docker run -d -v hello:/world busybox ls /world
实战
那么接下来的话可以查考一下这篇博文做一个实战:ElasticSearch Docker 部署实例
当然这些其实都是最基本的用法,后面其实还有如何自己做一个镜像,如何拉取私服镜像等等。不过这件事情如果按照职责划分的话,应该算是运维干的事情。我们只是用一用,能够完成需求就可以,精力充沛的可以直接去看docker开发手册。
相关文章:
开发必备技术--docker(使用篇)
文章目录前言Docker的基本概念概念数据卷虚拟网络镜像操作镜像名称镜像命令容器操作基本操作容器创建数据卷操作创建和查看数据卷其他指令实战前言 续接上一篇博文: 开发必备技术–docker(一) 这也是开学了,假期的最后一篇博文&a…...
2023备战金三银四,Python自动化软件测试面试宝典合集(三)
马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我:现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试,一个程序员成长之路永恒绕…...
TortoiseGit 使用教程
一、下载工具 这里给大家准备了所有安装包自取 链接:https://pan.baidu.com/s/1xrxxgyNXNQEGD_RjwKnPMg 提取码:qwer 也可在官网自行下载最新版 1.下载git,直接去官网下载Git - Downloads,根据自己的系统合理下载,…...
Linux项目自动化构建工具make/Makefile
本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 目录 前言 正文 makefile文件与语法规则 make指令与执行逻辑 makefile任务刷新策略 .PHONY修饰为伪目标 最后 前言 会不会写makefile,从一个侧面…...
M100嵌入式自动吞吐式读写器|电动读卡机如何通过C#程序读取社保卡号
M100嵌入式自动吞吐式读写器|电动读卡机是一款双保护门功能读卡器,第一层防尘防异物机械门,第二层电动门。 M100嵌入式自动吞吐式读写器|电动读卡机采用耐高温、耐磨擦、高强度、抗老化的复合型塑胶为主体,在走卡通道两侧镶有不锈钢金属&…...
STM32----搭建Arduino开发环境
搭建Arduino开发环境前言一、Arduino软件1.软件下载2.软件安装3.软件操作二、Cortex官方内核三、烧录下载四、其他第三方内核1.Libmaple内核2.Steve改进的LibMaple 内核3.STMicroelectronics(ST)公司编写的内核总结前言 本章介绍搭建STM32搭建Arduino开发环境,包括…...
华为OD机试 - 事件推送(Python),真机试题
事件推送 题目 同一个数轴 X 上有两个点的集合 A={A1, A2, …, Am} 和 B={B1, B2, …, Bn}, Ai 和 Bj 均为正整数,A、B 已经按照从小到大排好序,A、B 均不为空, 给定一个距离 R (正整数), 列出同时满足如下条件的所有(Ai, Bj)数对: Ai <= BjAi, Bj 之间的距离小于…...
论如何获取CSDN原力
0x00 前言 因为个人需求,所以需要增长原力值,故对原力值的增长方式进行探索和总结。 0x01 正文 参考:https://blog.csdn.net/SoftwareTeacher/article/details/114499372 1.举报了劣质内容(博客,下载的资源&#x…...
流程引擎之发展史及对比总结
流程引擎渊源市场上比较有名的开源流程引擎有 jBPM、Activiti、Camunda、Flowable 和 Compileflow。其中 jBPM、Activiti、Flowable、camunda 四个框架同宗同源,祖先都是 jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个。而 Compile…...
【DSView逻辑分析抓取波形CAN步骤-硬件连接-数据解析-底层波形认识CAN-工具使用】
【DSView逻辑分析抓取波形CAN步骤-硬件连接-数据解析-底层波形认识CAN】1、概述2、实验环境3、写在前面的一个问题4、实验准备(1)硬件连接1)CAN卡连接开发板(2)逻辑分析仪连接开发板(2) CAN卡连接软件&…...
C++中的模板
1.模板C 的模板一直是这门语言的一种特殊的艺术,模板甚至可以独立作为一门新的语言来进行使用。模板的哲学在于将一切能够在编译期处理的问题丢到编译期进行处理,仅在运行时处理那些最核心的动态服务,进而大幅优化运行期的性能。因此模板也被…...
Maven_第四章 使用Maven:IDEA环境
目录第一节 创建父工程第二节 配置Maven信息第三节 创建Java模块工程第四节 创建Web模块工程1、创建模块2、修改打包方式3、Web 设定4、借助IDEA生成web.xml5、设置 Web 资源的根目录6、测试6.1 创建文件6.2 配置tomcat第五节 其他操作1、在IDEA中执行Maven命令①直接执行②手动…...
RocketMQ基础学习
前言: RocketMQ阿里开源的,一款分布式的消息中间件,它经过阿里的生产环境的高并发、高吞吐的考验,同时,还支持分布式事务等场景。RocketMQ使用Java语言进行开发,方便Java开发者学习源码。但是,R…...
I.MX6ULL内核开发4:设备号的组成与哈希表
目录 一、设备号 二、hash table 一、设备号 文件夹:/home/geralt/linux_driver/kernel/ebf_linux_kernel_6ull_depth1/include/linux/kdev.h 这里面是linux中关于设备号的具体描述 #define MINORBITS 20 #define MINORMASK ((1U << MINORBITS) - 1)#defin…...
【博学谷学习记录】大数据课程-学习第六周总结
Hadoop 3.x的版本架构和模型介绍 由于Hadoop 2.0是基于JDK 1.7开发的,而JDK 1.7在2015年4月已停止更新,这直接迫使Hadoop社区基于JDK 1.8重新发布一个新的Hadoop版本,即hadoop 3.0。Hadoop 3.0中引入了一些重要的功能和优化,包括…...
Cordova
一、简介 Cordova 是用 Web 技术( HTML,CSS 和 JS )构建移动应用的平台。我们可以认为Cordova 是一个容器,用于将的 Web 应用移植到移动端,同时支持移动端的功能(例如:定位、蓝牙、摄像头等&am…...
9.语义HTMLVScode扩展推荐
语义HTML 定义: 一个元素使用我们并不是只关心他是什么样子的,而是要去关心这个元素名称的实际意义或者代表什么 我们使用标签并不是他仅代表导航栏,只是将导航栏部分归为一个块。现实生活中,多使用之前都是使用div这个元素去构…...
一款非常不错的微信系统垃圾清理工具:微信清理大师,操作简单,清除较快。
微信清理大师 微信清理大师是一款专为微信所推出的系统垃圾清理工具。它的功能十分强大,可快捷清理微信内储存垃圾文件,操作十分简单,只需要轻轻一点,即可删除清理。 功能特点: 【一键清理】一键搞定无用垃圾&#x…...
PMP考前冲刺2.11 | 2023新征程,一举拿证
承载2023新一年的好运让我们迈向PMP终点一起冲刺!一起拿证!每日5道PMP习题助大家上岸PMP!!!题目1-2:1.以下哪三种情况是Scrum主管应该注意的障碍?(选择三个)A. 阻碍敏捷能力的技术B. 缺乏团队授…...
yalc(比 yarn/npm link 更加友好的前端依赖库 link 方案)
参考链接: 【yalc 官方文档】:https://github.com/wclr/yalc 【yalc-watch 官方文档】:https://github.com/johot/yalc-watch 链接依赖库背景 以 D-SASS 前端框架为例,当我们在修改 D-SASS 前端框架时,当想着马上就要预览到修改的内容是否生效,于是在前端框架目录下进…...
Github | 个人资料自述文件配置的不完全总结
本文简单总结配置 Github 主页上个人资料自述文件的流程和参考文件。 更新:2022 / 02 / 11 Github | 配置个人主页的信息总览方法的不完全总结创建、删除个人资料自述文件编辑个人资料自述文件参考链接创建、删除个人资料自述文件 首推自然是官方说明文档 1&#…...
2022年12月电子学会Python等级考试试卷(二级)答案解析
目录 一、单选题(共25题,共50分) 二、判断题(共10题,共20分) 三、编程题(共2题,共30分) 青少年软件编程(Python)等级考试试卷(二级) 一、单选题(共25题,共50分) 1. 运行下列程序…...
SpringCloud第二讲 Ribbon负载均衡源码分析
前言介绍: 这一讲我们将依据Eureka的负载均衡规则,Eureka的具体服务搭建以及服务注册和服务发现可以参考基于Eureka实现服务注册和服务发现_热爱Java的编程小白的博客-CSDN博客 Eureka的服务搭建之后便可以在这上面进行服务注册,如果存在两个…...
Clip-path实现按钮流动边框动画
前言 👏Clip-path实现按钮流动边框动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 添加div标签 <div>苏苏_icon</div>添加样式 div {position: relative;width: 220px;height: 6…...
不停服更新应用的方案:蓝绿发布、滚动发布、灰度发布
原文网址:不停服更新应用的方案:蓝绿发布、滚动发布、灰度发布_IT利刃出鞘的博客-CSDN博客 简介 本文介绍不停服更新应用的方案:蓝绿发布、滚动发布、灰度发布。 升级服务器的应用时,要停止掉老版本服务,将程序上传…...
有趣的KaTeX(附源码)
两年半未见,甚是想念 给大家带来有趣的KaTeX\KaTeXKATEX,可以放在洛谷主页 文章目录1234561 1#include<bits/stdc.h>\texttt{1 \color{orange}\#include <bits/stdc.h>}1 #include <bits/stdc.h> 2usingnamespacestd;\texttt{2 \col…...
Golang map笔记
map定义三种方式package mainimport "fmt"func main() {// map 的基本定义// 第一种方式 使用make分配数据空间var map1 map[string]stringmap1 make(map[string]string, 3)map1["no1"] "北京"map1["no2"] "天津"map1[&q…...
Android Jetpack组件之WorkManager高级概念介绍与使用(三)
一、介绍 通过前面两篇,我们基本掌握了组件的workmanager的接入,以及api的使用等。但是一个框架如果运用在复杂的项目中,肯定需要有其他额外的支持,介绍来我们将会介绍高级概念,以及对前面的知识点进行回顾与拓展。 高…...
Spring框架中用到的设计模式(都用到了哪些设计模式?)
文章目录简单工厂模式:工厂模式:单例模式:原型模式:迭代器模式:代理模式:适配器模式:观察者模式:模板模式:责任链模式:这是一道相对有难度的题目,…...
Python中的类和对象(4)
1. 构造函数 (_ init _(self[,……])) 在类中定义 _init _() 方法,可以实现在实例化对象的时候进行个性化定制: >>> class C: ... def __init__(self, x, y): ... self.x x ... self.y y ... …...
网站客服怎么做/百度扫一扫识别图片
FAILED: SemanticException [Error 10044]: Line 1:24 Cannot insert into target table because column number/types are different ‘deptno’: Table insclause-0 has 3 columns, but query has 4 columns. 遇到这种错误,就是说查询的结果和写入的表列数对不上…...
电商网站开发公司/怎么在百度上推广自己的产品
1、首先第一步需要导入对应的jar包 我们来看下面的一个例子 OK,在前面的一系列博客里面,我整理过了Assert类下面常用的断言方法,比如assertEquals等等,但是org.junit.Assert类下还有一个方法也用来断言,而且更加强大。…...
有没有专业做艺术品的网站/seo外包推广
摘要:7月3日“Docker之道”培训中,笔者发现大家对Docker的理解还比较初级,刚好看到了一篇通俗易懂的文章,看完后对Docker有了一个清楚的认识,在这里分享给读者。编者按:7月3日的“CSDN在线培训:…...
网站开发全程实例/企业qq和个人qq有什么区别
例题:这个问题是以第二次世界大战中的一个实际问题为背景,经过简化而提出来 的。在甲、乙双方的一场战争中,一部分甲方部队被乙方部队包围长达 4 个月。由于乙 方封锁了所有水陆交通要道,被包围的甲方部队只能依靠空中交通维持供给…...
哪个网站做免费小程序/百度关键词关键词大全
很多时候,定义清楚问题比解决问题更难。 什么是MapReduce? 它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现。 MapReduce这个编程模型解决什么问题? …...
公司做网站的价格江阴/汕头网站建设方案开发
上篇文章《51单片机实现单极性spwm原理详解》已经详细介绍如何模拟单片机用代码在matlab-simulink中实现spwm调制,本文继续利用上文中的代码进行仿真,驱动单相全桥逆变器。首先对代码作部分修改,上述代码中默认正弦波与调制波幅值都是250&…...