2020-01-06 Docker入门1-程序员宅基地

Docker简介

官网 www.docker.com
github   https://github.com/docker/docker.github.io
开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的 linux 发行版上,移植很方便
go 语言编写,基于 apache2.0 协议发布
基于 linux kernel ,要想在 win 下运行需要借助一个 vm (虚拟机)来实现
2013 年开始,近些年发展迅猛
docker 1.13x 开始,版本分为社区版 ce 和企业版 ee ,并且基于年月的时间线形式,当前最新稳定版为 17.09 参考 http://blog.csdn.net/chenhaifeng2016/article/details/68062414

 

Docker和传统的虚拟化比较        

Docker 的优势
 启动非常快,秒级实现
资源利用率高,一台高配置服务器可以跑上千个 docker 容器
更快的交付和部署,一次创建和配置后,可以在任意地方运行
内核级别的虚拟化,不需要额外的 hypevisor 支持,会有更高的性能和效率
易迁移,平台依赖性不强

Docker核心概念

镜像, 是一个只读的模板,类似于安装系统用到的那个 iso 文件,我们通过镜像来完成各种应用的部署。
容器,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
仓库,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是 Docker hub hub . docker .com ),国内公开仓库( dockerpool.com

 

Docker安装

curl https://download.docker.com/linux/centos/docker-ce.repo -o  /etc/yum.repos.d/docker.repo
yum install -y docker-ce
速度比较慢,大家也可以直接下载 rpm
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
下载完,上传到 linux
也需要用 yum 安装,可以自动解决依赖关系
yum install -y docker-ce-xxxx.rpm
systemctl start docker  启动docker

docker每次启动都会自动生成的iptables规则,删除后docker的网络会出问题

Docker镜像管理

docker pull centos//可以到官方下载centos镜像,速度很慢
配置 docker 加速器(参考 http://blog.csdn.net/xlemonok/article/details/71403534

创建加速器连接  vi /etc/docker/daemon.json//加入如下内容

{
  "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}

 说明:这个url为加速器地址,需要同学们自行到阿里云申请

配置完 加速器,重启 docker服务,再次docker pull centos会快很多
docker images 查看本地的镜像
TAG  一般为版本标签
IMAGE ID  区分么个镜像的标识
 
docker search xxx //搜索公共仓库镜像,其中xxx是关键词
docker tag centos centos-1 //给镜像打标签
打完标签后会生产新的镜像 标示一个镜像
也可以标签一样TAG不一样
docker run - itd centos // 把镜像启动为容器, - i 表示让容器的标准输入打开,-t表示分配一个伪终端,-d表示后台启动,要把-i -t -d 放到镜像名字前面 报错启动失败

[root@localhost ~]# vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:
    net.ipv4.ip_forward=1

重启network服务
# systemctl restart network

 
docker ps //查看运行的容器,
- 加上-a选项后可以查看所有容器,包括未运行的
 
docker rmi centos // 用来删除指定镜像
其中后面的参数可以是 tag ,如果是tag时,实际上是删除该tag。当后面的参数为镜像ID时,则会彻底删除整个镜像,所有标签也会一同删除,类似linux的软连接

 

Docker通过容器创建镜像

  docker run 启动容器后,可以通过下面命令进入容器
docker exec -it xxxxx   bash// 其中 xxxxx 为容器 id ,这个 id 可以用 docker ps查看,最后面的bash为进入容器后我们要执行的命令,这样就可以打开一个终端
加bash 是因为给他增加bash进程,没有bash进程就不能进行交互
进入容器后可以使用命令查看内存大小 安装软件 等几乎与虚拟机一致,因为这是一个被严重删减的系统命令只有600多个
 
进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像
在容器中执行 yum install -y net-tools,查看IP地址
 
ctrl d退出容器
docker自己找了个网段指定了IP ,每开启一个容器虚拟机就会添加一个网卡使用两者可以进行通信 
 
 
docker commit -m "change somth "  -a "somebody info" container_id new_image_name // container_id
通过 docker ps -a 获取,后面的new_image_name为新镜像名字
例如:   docker commit -m "install net-tools" -a " linux02" 14957c27d477 centos_with_nettool
这个命令有点像 svn 的提交, -m 加一些改动信息,-a 指定作者相关信息  2c74d这一串为容器id,再后面为新镜像的名字
这样如果需要再新建一个镜像就不需要重复之前的操作
使用容器名字进入终端 查看ip                                              
测试网络
linux又多了一个网卡

 

Docker使用模板创建镜像

首先去下载一个模板
http://openvz.org/Download/templates/precreated // 下载速度不快,阿铭下载了一个 centos6 的模板 centos-6-x86-minimal.tar.gz
导入该镜像的命令为:
cat centos-6-x86-minimal.tar.gz|docker import - centos6
docker images查看导入的镜像
启动                                     
把现有镜像,导出为一个文件:
docker save -o aming-centos.tar aming
我们还可以用该文件恢复本地镜像:
docker load --input aming-centos.tar  或者
docker load < aming-centos.tar
docker push image_name   // 可以把自己的镜像传到 dockerhub 官方网站上去,但前提是需要先注册一个用户,后续如果有需求再研究吧
 

Docker容器管理

• docker create  -it  centos6   bash //这样可以创建一个容器,但该容器并没有启动

• docker start   container_id   //启动容器后,可以使用 docker ps  查看到,有start 就有stop,和restart

• 之前我们使用的docker run 相当于先create再start

• docker run -it centos bash  

• 这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit或者ctrl d 退出该bash,当退出后这个容器也会停止。

• docker run -d  可以让容器在后台运行

• 比如:docker run -d centos bash -c "while :; do echo "123"; sleep 2; done"

• docker run --name web -itd centos bash // --name 给容器自定义名字

• docker run --rm -it centos bash -c "sleep 30" //--rm 可以让容器退出后直接删除,在这里命令执行完容器就会退出

 

• docker logs 可以获取到容器的运行历史信息,用法如下

• docker logs  container_id  

• docker attach 可以进入一个后台运行的容器,比如

• docker attach  container_id    //但是attach命令不算好用,比如我们想要退出终端,就得exit了,这样容器也就退出了,还有一种方法

• docker exec -it container_id  bash  //可以临时打开一个虚拟终端,并且exit后,容器依然运行着

• docker rm  container_id  //container_id是ps的时候查看到的,这样就可以把container删除,如果是运行的容器,可以加-f

• docker  export  container_id  > file.tar  // 导出容器,可以迁移到其他机器上,需要导入

• cat file.tar |docker import - aming_test   //这样会生成aming_test的镜像

 

Docker仓库管理

• docker pull registry   //下载registry 镜像,registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库。

• docker run -d -p 5000:5000 registry   //以registry镜像启动容器,-p会把容器的端口映射到宿主机上,:左边为宿主机监听端口,:右边为容器监听端口

• curl 127.0.0.1:5000/v2/_catalog //可以访问它

• 下面我们来把其中一个镜像上传到私有仓库

• docker tag aming_test  172.7.15.113:5000/centos //标记一下tag,必须要带有私有仓库的ip:port

• docker push 172.7.15.113:5000/centos //把标记的镜像给推送到私有仓库

• 此时并不会成功,Get https://172.7.15.113:5000/v2/: http: server gave HTTP response to HTTPS client

• 更改配置文件,vi /etc/docker/daemon.json//更改为

{ "insecure-registries":["192.168.96.135:5000"] }

• systemctl restart docker

• docker ps -a //查看容器已经关闭,还需要启动

• docker start  id //这里的id为registry容器id

• 再次push

• docker push 172.7.15.113:5000/centos

• curl 127.0.0.1:5001/v2/_catalog //可以查看到推送上来的镜像

第二个容器

 

 

Docker数据管理

• 1. 挂载本地的目录到容器里

• docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的/data/为容器里的目录,会在容器中自动创建

 

 

• 2. 挂载数据卷

• 其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名字为relaxed_franklin,这个名字可以使用命令 docker ps  看最右侧一列

• docker run -itd --volumes-from relaxed_franklin aming123 bash

• 这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin  容器的数据卷

• 3. 定义数据卷容器

• 有时候,我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,然后其他容器直接挂载该数据卷。

• 首先建立数据卷容器

• docker run -itd -v /data/ --name testvol centos  bash  //注意这里的/data/是容器的/data目录,并非本地的/data/目录。 

• 然后让其他容器挂载该数据卷

• docker run -itd  --volumes-from testvol aming123 bash

 

 

 

 

Docker数据卷的备份与恢复

• 备份

• mkdir /data/backup

• docker run --volumes-from testvol -v  /data/backup/:/backup centos tar cvf  /backup/data.tar /data/

• 说明:首先我们需要使用testvol数据卷新开一个容器,同时我们还需要把本地的/vol_data_backup/目录挂载到该容器的/backup下,这样在容器中/backup目录里面新建的文件,我们就可以直接在/data/backup/目录中看到了。 然后再把/data/目录下面的文件打包到成data.tar文件放到/backup目录下面。

• 恢复

• 思路: 先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。

• 新建数据卷容器:docker run -itd -v /data/ --name testvol2 centos bash

• 挂载数据卷新建容器,并解包:docker run --volumes-from testvol2  -v /data/backup/:/backup centos tar xf /backup/data.tar

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42720896/article/details/103865963

智能推荐

使用JDBC连接数据库出现 The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one解决方案_jdbc.properties timezone-程序员宅基地

文章浏览阅读553次。在 jdbc.properties 文件中的 url 后面加上 ?serverTimezone=UTC加入之前的jdbc.properties文件:user=rootpassword=12345678url=jdbc:mysql://localhost:3306/testdriverClass=com.mysql.cj.jdbc.Driver加入之后:user=rootpassword=12345678url=jdbc:mysql://localhost:3306/test?serv_jdbc.properties timezone

计算机图形学孔令德基础知识,计算机图形学基础教程孔令德答案-程序员宅基地

文章浏览阅读1.4k次。计算机图形学基础教程孔令德答案【篇一:大学计算机图形学课程设】息科学与工程学院课程设计任务书题目:小组成员:巴春华、焦国栋成员学号:专业班级:计算机科学与技术、2009级本2班课程:计算机图形学指导教师:燕孝飞职称:讲师完成时间: 2011年12 月----2011年 12 月枣庄学院信息科学与工程学院制2011年12 月20日课程设计任务书及成绩评定12【篇二:计算机动画】第一篇《计算机图形学》..._计算机图形学基础教程 孔令德 答案

python xlwings追加数据_大数据分析Python库xlwings提升Excel工作效率教程-程序员宅基地

文章浏览阅读1k次。原标题:大数据分析Python库xlwings提升Excel工作效率教程Excel在当今的企业中非常非常普遍。在AAA教育,我们通常建议出于很多原因使用代码,并且我们的许多数据科学课程旨在教授数据分析和数据科学的有效编码。但是,无论您偏爱使用大数据分析Python的程度如何,最终,有时都需要使用Excel来展示您的发现或共享数据。但这并不意味着仍然无法享受大数据分析Python的某些效率!实际上,..._xlwings通过索引添加数据

java8u211_jre864位u211-程序员宅基地

文章浏览阅读911次。iefans为用户提供的jre8 64位是针对64位windows平台而开发的java运行环境软件,全称为java se runtime environment 8,包括Java虚拟机、Java核心类库和支持文件,不包含开发工具--编译器、调试器和其它工具。jre需要辅助软件--JavaPlug-in--以便在浏览器中运行applet。本次小编带来的是jre8 64位官方版下载,版本小号u211版..._jre8是什么

kasp技术原理_KASP基因分型-程序员宅基地

文章浏览阅读5k次。KASP基因分型介绍KASP(Kompetitive Allele-Specific PCR),即竞争性等位基因特异性PCR,原理上与TaqMan检测法类似,都是基于终端荧光信号的读取判断,每孔反应都是采用双色荧光检测一个SNP位点的两种基因型,不同的SNP对应着不同的荧光信号。KASP技术与TaqMan法类似,它与TaqMan技术不同的是,它不需要每个SNP位点都合成特异的荧光引物,它基于独特的..._kasp是什么

华为p50预装鸿蒙系统,华为p50会不会预装鸿蒙系统_华为p50会预装鸿蒙系统吗-程序员宅基地

文章浏览阅读154次。华为现在比较火的还真就是新开发的鸿蒙系统了,那么在即将上市的华为p50手机上会不会预装鸿蒙系统呢?接下来我们就来一起了解一下华为官方发布的最新消息吧。1.华为p50最新消息相信大家都知道,随着华为鸿蒙OS系统转正日期临近,似乎全网的花粉们都在关注华为鸿蒙OS系统优化、生态建设等等,直接忽略了不断延期发布的华为P50手机,如今华为P50系列手机终于传来了最新的好消息,在经过一系列方案修改以后,终于被..._华为手机p50直接预装鸿蒙系统

随便推点

python用什么软件编程好-初学python编程,有哪些不错的软件值得一用?-程序员宅基地

文章浏览阅读2.1k次。Python编程的软件其实许多,作为一门面向大众的编程言语,许多修正器都有对应的Python插件,当然,也有特地的PythonIDE软件,下面我简单引见几个不错的Python编程软件,既有修正器,也有IDE,感兴味的朋友可以本人下载查验一下:1.VSCode:这是一个轻量级的代码修正器,由微软规划研发,免费、开源、跨途径,轻盈活络,界面精练,支撑常见的自动补全、语法提示、代码高亮、Git等功用,插..._python入门学什么好

pytorch一步一步在VGG16上训练自己的数据集_torch vgg训练自己的数据集-程序员宅基地

文章浏览阅读3.2w次,点赞30次,收藏307次。准备数据集及加载,ImageFolder在很多机器学习或者深度学习的任务中,往往我们要提供自己的图片。也就是说我们的数据集不是预先处理好的,像mnist,cifar10等它已经给你处理好了,更多的是原始的图片。比如我们以猫狗分类为例。在data文件下,有两个分别为train和val的文件夹。然后train下是cat和dog两个文件夹,里面存的是自己的图片数据,val文件夹同train。这样我们的..._torch vgg训练自己的数据集

毕业论文管理系统设计与实现(论文+源码)_kaic_论文系统设计法-程序员宅基地

文章浏览阅读968次。论文+系统+远程调试+重复率低+二次开发+毕业设计_论文系统设计法

在python2与python3中转义字符_Python 炫技操作:五种 Python 转义表示法-程序员宅基地

文章浏览阅读134次。1. 为什么要有转义?ASCII 表中一共有 128 个字符。这里面有我们非常熟悉的字母、数字、标点符号,这些都可以从我们的键盘中输出。除此之外,还有一些非常特殊的字符,这些字符,我通常很难用键盘上的找到,比如制表符、响铃这种。为了能将那些特殊字符都能写入到字符串变量中,就规定了一个用于转义的字符 \ ,有了这个字符,你在字符串中看的字符,print 出来后就不一定你原来看到的了。举个例子>..._pytyhon2、python3对%转义吗

java jar 文件 路径问题_「问答」解决jar包运行时相对路径问题-程序员宅基地

文章浏览阅读1.3k次。我这几天需要做一个Java程序,需要通过jar的形式运行,还要生成文件。最终这个程序是要给被人用的,可能那个用的人还不懂代码。于是我面临一个问题:生成的文件一定不能存绝对路径。刚开始我想得很简单,打绝对路径改成相对路径不就行了吗?于是有了这样的代码:String path = "../test.txt";File file = new File(path);……这个写法本身并没有问题,直接运行代码..._jar启动文件路径中存在!

微信读书vscode插件_曾经我以为 VSCode 是程序员专属的工具,直到发现了这些……...-程序员宅基地

文章浏览阅读598次。如果你知道 VSCode,一说起它,你可能第一个想到的就是把它当做一个代码编辑器,而它的界面应该可能大概率是这样的——如果你恰好又是个程序员,那你可能经常会用到它,不管是 Python、JS 还是 C++ 等各种语言对应的文件,都可以用它来进行简单的编辑和整理,甚至是运行和 debug......但是今天要讲的显然不是这些,经过小美的多方研究,发现了即使是对于大多数并不了解 VSCode,也完全不..._vscode weixin read