开发必备技术--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仓库与Java应用服务动态发布那些事
讲师简介: James老师 十余年Java经验,曾就职于携程.人人网等一线互联网公司,专注于java领域,精通软件架构设计,对于高并发.高性能服务有深刻的见解, 在服务化基础架构和微服务技术有大量的建 ...
- Qt开发必备技术栈学习路线和资料
简介 本文为:C++ QT 学习路线大纲+资料(文章底部) Qt 可以做什么? Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部:Qt 除了可以绘制漂亮的界面( ...
- 大数据开发必备面试题Hive篇
1.数据建模常用的模型有哪些? (1)星型模型. 星形模式(Star Schema)是最常用的维度建模方式.星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样. 星形模式的维度建模由 ...
- 数据产品必备技术知识:机器学习及常见算法,看这一篇就够了
大家都知道,产品经理需要懂技术,很多面试官都偏好有技术背景的同学,毕竟产品经理经常要和开发同学相爱相杀.当然也不是一定要求能够精通,但是至少不要让这块成为沟通的障碍,懂点技术,实际工作中也能少被开发同 ...
- 「docker实战篇」python的docker爬虫技术-安卓模拟器(二)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker爬虫技术-安卓模拟器(二) 为什么要手机模拟器,如果有条件正好有不使用的安卓手 ...
- STM32开发必备知识篇:STM32的运行机制
时间飞逝,转眼间已经硕士毕业工作第四年了,嵌入式研发成长道路上曲折坎坷,所以这也是我今年撰写博客的初心,即分享技术积累和研发经验,目前主要分为STM32和FPGA两个专辑,都包括开发必备知识篇和实战项 ...
- python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17)...
原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具appium工具(17) Appium是一个开 ...
- python docker自动化_「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15)...
原创文章,欢迎转载.转载请注明:转载自 IT人故事会,谢谢! 原文链接地址: 「docker实战篇」python的docker爬虫技术-移动自动化控制工具安卓ADB的使用(15) adb(Androi ...
- 「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker爬虫技术-在linux下mitmproxy介绍和安装(四) 上次说了fiddl ...
最新文章
- CString初始化时提示字符串太大
- C++ 十字链表图转java版
- BZOJ 2208[Jsoi2010]连通数
- 本田crv混动操作手册_【广汽本田】不只是奶爸车 新出行试驾本田奥德赛锐混动...
- 我的Docker-CE学习笔记(03)
- ABAP EXPORTING IMPORTING
- linux鼠标手势双dock,Linnx Mint 上使用触摸板手势
- 计算机视觉算法面试准备
- 超级计算机排行榜历年,历代游戏主机浮点运算能力排行榜 究竟谁才是真正的性能怪兽...
- 基于Python的决策树分类器与剪枝
- Delphi中的线程类--之(1)
- 数据库附加出错解决方法
- 蓝桥杯——机器人行走(模拟类题目)Java语言实现
- 英语单词积累8.10
- matlab中syms与sym有什么区别
- 每日一记 - 3.7
- 24个好用到爆的Python实用技巧
- 2013一些好的句子
- 跨境牛facebook营销系统的终极玩法
- 东南融通无领导小组面试记