@[TOC]
前语
续接上一篇博文: 开发必备技术–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开发手册。