docker入门学习感悟

在一个月之前,恕我孤陋寡闻,我对docker的理解停留于一个英文词汇,dock:船坞,码头;docker:码头工人。等我走上工作岗位一个月之后,我对docker有了更深的理解,当然,还远远不够。
我们先来看一下百度百科的介绍:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。emmm,很抽象对不对,我首先想到的是虚拟机,很显然,docker的机制和虚拟机很像,虚拟机我们知道,你需要安装臃肿的操作系统、虚拟机管理系统、各种依赖和各种应用等,需要更多的硬件资源,而docker的守护进程可以直接与主操作系统通信,为各个docker容器分配资源,还可以将容器与主操作系统隔离,并将各个容器隔离。虚拟机启动需要数分钟,而docker容器在数毫秒内启动,同时大大节省计算机资源。下面盗图一张,直观明了
docker与虚拟机
可能还不够简单明了,举个例子,你需要运输一批各种各样的货物,这批货物堆积在码头(dock)上,这些货物可能易碎不可积压,或者易燃易爆,你需要运输这批货物,在没有其他条件的情况下,你可能需要一趟趟地运输或者一次调动多艘运输船,耗时耗力,一艘艘船就好比是计算机资源,这些货物就是你需要执行的应用程序,它们会互斥,相互影响,你只能按部就班,兴师动众。可是现在情况不同了,这时候你进来了一批集装箱,你可以把这些货物分别装在不同的集装箱里,层层堆积,易碎也好,易燃易爆也好,统统塞进集装箱,一趟一艘运输船搞定。这样是不是很高效,对,这一个个集装箱就是docker容器,它们之间相互隔离,也与船体(计算机资源如操作系统)隔离。什么?不知道哪个箱子装的是啥?没关系,每个集装箱打个编号,这不就是PID或者端口号吗。。。
相信看完上面,你对docker有了一个既专业又通俗的理解了。我们正式开始docker的学习。首先我们需要理解docker仓库、镜像与容器三个概念。还是用上 面的例子。仓库就是堆放货物的码头或者厂房,镜像就是这一批批货物,容器就是一个个集装箱。专业一点,Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所,Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。简单介绍一下相关指令:
1.获取镜像

$ docker pull dl.dockerpool.com:5000/ubuntu:14.04

注:dl.dockerpool.com为注册服务器,5000为端口号,ubuntu为仓库名称,14.04是镜像也是版本号

2.查看镜像信息

列出本地主机已有的所有镜像

$ docker images

更改tag信息

$ docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest

000为镜像ID,显示这个镜像的详细信息

$ docker inspect 000

3.搜寻镜像

$ docker search xxx (输出信息包括镜像名字、描述、星级、是否为官方创建、是否自动创建)

4.删除镜像

$ docker rmi dl.dockerpool.com:5000/ubuntu:latest

注:rmi指令,remove images,当有该镜像创建的容器存在时,镜像文件默认是无法删除的,所以删除镜像前最好是删除所有依赖该镜像的容器。当然可以添加参数-f强制删除,不过一般不推荐。

5.创建镜像

有三种方法:

基于已有镜像的容器创建
$ docker commit -m “add new image”-a “” 000(容器ID) test(新建image name)

基于本地模板导入
$ cat ubuntu-14.04-x86_64-minimal.tar.gz | Docker import - ubuntu:14.04

基于dockerfile创建(需要特别注意)
6.存出镜像

$ docker save -o ubuntu_14.04.tar ubuntu:14.04

7.载入镜像

$ docker load –input ubuntu_14.04.tar

或者

docker load < ubuntu_14.04.tar

8.上传镜像

$ docker push user/test:latest

user用户需要在dockerHub网站注册

容器

容器是镜像的一个运行实例,但它带有额外的可写层

1.创建容器

$ docker create -it ubuntu:12.04

2.创建并启动容器

$ docker run -it ubuntu:12.04 /bin/bash

3.守护态运行daemon

$ docker run -d ubuntu:12.04

4.查看容器信息

$ docker ps

5.获取容器的输出信息

$ docker logs cet

cet是容器ID前三个字符

6.终止容器

$ docker stop cet

7.启动容器

$ docker start cet

8.重启容器

$ docker restart cet

9.进入容器

attach命令

$ docker attach nostalgic(nostalgic是docker的name)

缺点:所有窗口同步显示

exec命令

  • docker exec -it 243… /bin/bash (243…为docker ID)

nsenter命令
1.找PID
PID= P I D = (docker-pid 243..)

2.通过PID链接容器
nsentertarget n s e n t e r − − t a r g e t PID –mount –uts –ipc –net –pid

10.删除容器

$ docker rm [-f -l -v] cet

-f 强行终止并删除

-l 删除容器的链接,保留容器

-v 删除挂载的数据卷

11.导出容器

$ docker export cet >test.tar

12.导入容器(将容器快照导入到本地镜像库)

$ cat test.tar | docker import - test/ubuntu:v1.0

重新指定标签为ubuntu的镜像名称,v1.0的版本号

docker load 也可以导入镜像存储文件到本地镜像库,他比import方式的好处是:import导入镜像快照文件将丢失所有的历史记录和元数据信息。

注:通过导出容器和导入容器可以实现容器迁移(拷贝文件)

仓库是集中存放镜像的地方,一个注册服务器上有很多仓库,一个仓库中有很多镜像。

  1. 登录

$ docker login

  1. 基本操作

查找、上传、下载

  1. 自动创建

  2. 查看镜像

http://www.dockerpool.com/downloads

  1. 更新镜像标签

$ docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04
1
将前面的镜像更改为ubuntu:12.04

  1. 创建私有仓库

$ docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registryregistry
1
自动下载并启动registry容器,创建本地的私有仓库服务,默认仓库船舰的容器在/tmp/registry,可以通过-v参数来存放到指定路径上

7.管理私有仓库镜像

假设私有仓库地址为10.0.2.2,端口为5000,

$ docker tag ubuntu:14.04 10.0.2.2:5000/test

更改标签名

$ docker push 10.0.2.2:5000/test

push镜像,会自动push到10.0.2.2地址的机器上

$ curl http://10.0.2.2:5000/v1/search

查看仓库10.0.2.2:5000中是否含有test镜像

docker pull 10.0.2.2:5000/test

指令介绍并不是很详细,很多参数都没有介绍。大家可以自行--help。通过这些指令,我最大的感受就是英语得过硬,很多指令、很多参数实际上就是英文单词或者缩写,并不是去盲目记忆,尤其是参数。不过好记性不如烂笔头,多敲多练习少不了。经过一段时间的学习,只能说对docker有了一个初步的入门,掌握了指令的基本使用,接下来需要在项目中进行实战演练,实现docker进阶。第一次写博客,不足之处还望批评指正,感谢大家!
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值