原文:https://yq.aliyun.com/articles/63035

随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍。目前的资料不少,但是由于docker的发展较快,每个团队对docker的关注点也并不相同,大部分的文章还是不够完整和易懂,所以希望有这样一篇文章能让大家通过简单的阅读来客观全面的认识一下docker。

(提前申明一下,文章内容不会涉及较深入的使用,主要为了阐述docker的概念和入门的使用。并且我也是docker的初学者,并没有过丰富的使用经验,所以内容若有不妥,请大家指正,希望能在日后不断的完善。)

基本概念

Docker由下面几样东西组成,先简单认识一下吧

  • Docker Client : Docker提供给用户的客户端。Docker Client提供给用户一个终端,用户输入Docker提供的命令来管理本地或者远程的服务器。
  • Docker Daemon : Docker服务的守护进程。每台服务器(物理机或虚机)上只要安装了Docker的环境,基本上就跑了一个后台程序Docker Daemon,Docker Daemon会接收Docker Client发过来的指令,并对服务器的进行具体操作。
  • Docker Images : 俗称Docker的镜像,这个可难懂了。你暂时可以认为这个就像我们要给电脑装系统用的系统CD盘,里面有操作系统的程序,并且还有一些CD盘在系统的基础上安装了必要的软件,做成的一张 “只读” 的CD。
  • Docker Registry : 这个可认为是Docker Images的仓库,就像git的仓库一样,用来管理Docker镜像的,提供了Docker镜像的上传、下载和浏览等功能,并且提供安全的账号管理可以管理只有自己可见的私人image。就像git的仓库一样,docker也提供了官方的Registry,叫做Dock Hub(http://hub.Docker.com)
  • Docker Container : 俗称Docker的容器,这个是最关键的东西了。Docker Container是真正跑项目程序、消耗机器资源、提供服务的地方,Docker Container通过Docker Images启动,在Docker Images的基础上运行你需要的代码。 你可以认为Docker Container提供了系统硬件环境,然后使用了Docker Images这些制作好的系统盘,再加上你的项目代码,跑起来就可以提供服务了。 听到这里,可能你会觉得是不是有点像一个VM利用保存的备份或者快照跑起来环境一样,其实是挺像的,但是实际上是有本质的区别,后面我会细说。

Docker是怎么玩的?

一下接触这么多东西肯定有一点点晕了吧,没关系,我们把这些串起来走一遍就会好了。

  1. 首先你得安装一下docker的环境,这个我在这里就不说了,针对你的系统看一下docker的官网( http://www.docker.com/products/docker ) 吧。
  2. 安装好后,我们在terminal中就有了docker的命令了,这个命令就是Docker Client啦。所有的操作都是通过docker命令完成的。比如: docker version
  1. ruideMacBook-Pro:~ ruihuang$ docker version
  2. Client:
  3. Version: 1.12.1
  4. API version: 1.24
  5. Go version: go1.7.1
  6. Git commit: 6f9534c
  7. Built: Thu Sep 8 10:31:18 2016
  8. OS/Arch: darwin/amd64
  9. Server:
  10. Version: 1.12.1
  11. API version: 1.24
  12. Go version: go1.6.3
  13. Git commit: 23cf638
  14. Built: Thu Aug 18 17:52:38 2016
  15. OS/Arch: linux/amd64
  1. 查看一下我们拥有了哪些images吧,命令: docker images
  1. ruideMacBook-Pro:~ ruihuang$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED
  3. job1 latest de714ebe3a54 29 hours ago
  4. ubuntu latest f753707788c5 3 weeks ago
  5. busybox latest e02e811dd08f 4 weeks ago

可以看到我们拥有3个images,其中ubuntu大家都知道,busybox是一个linux下的大工具箱,它集成压缩了 Linux 的许多工具和命令,而job1则是我自己基于busybox创建的一个image,可以通过busybox的工具进行一些命令的执行,比如 echo 'hello world'。

  1. 再查看一下我们有哪些Docker Container吧,命令: docker ps
  1. ruideMacBook-Pro:~ ruihuang$ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED
  3. 2c08ddb62c77 ubuntu "/bin/bash" 28 hours ago
  4. 5aa853bdb033 ubuntu "/bin/bash" 28 hours ago

这里看到的都是正在运行的Container,如果要查看所有的Container就使用 docker ps -a

  1. 下面我们从Docker hub的Registry下载一个Image,命令: docker pull image-name
  1. ruideMacBook-Pro:~ ruihuang$ docker pull hello-world
  2. Using default tag: latest
  3. latest: Pulling from library/hello-world
  4. c04b14da8d14: Pull complete
  5. Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
  6. Status: Downloaded newer image for hello-world:latest

再看一下现在images,命令: docker images

  1. ruideMacBook-Pro:~ ruihuang$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED
  3. job1 latest de714ebe3a54 30 hours ago
  4. ubuntu latest f753707788c5 3 weeks ago
  5. busybox latest e02e811dd08f 4 weeks ago
  6. hello-world latest c54a2cc56cbb 4 months ago

我们看到刚才我们从docker hub上面下载了一个docker官方已经制作好的叫做hello-world的image,下载完成后,就在本地可以查看到这个image了。

  1. 我们把hello-world的image,放到一个docker container里面让他跑起来吧。命令 docker run image-name
  1. ruideMacBook-Pro:~ ruihuang$ docker run hello-world
  2. Hello from Docker!
  3. This message shows that your installation appears to be working correctly.
  4. To generate this message, Docker took the following steps:
  5. 1. The Docker client contacted the Docker daemon.
  6. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
  7. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
  8. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

这个image运行后很简单,就是打印了这段话。告诉了我们,我们已经成功的让docker daemon从docker hub上拉了一个"hello-world"的image,并且通过这个image创建了一个container,并且通过daemon将输出的内容传回了docker client,也就是我们现在看到的这段话。

  1. 我们最后再看一下是否真的创建了docker container,命令 docker ps -a
  1. ruideMacBook-Pro:~ ruihuang$ docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS
  3. 3d9b24449cb3 hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago
  4. c08ddb62c77 ubuntu "/bin/bash" 28 hours ago Up 28 hours

首先看到,确实已经创建了docker container了,可见 docker run 的命令实际上是create 和 start的结合命令,基于hello-world的image创建并启动了container。container启动后执行了打印的程序,打印完上面我们看到的那句话,程序执行完成,container也跟着关闭了。从STATUS可以看出,在9分钟前hello-world的这个container已经exited了。

思考一下

  • 这里我们可以想象一下,这个hello-world里面到底有什么?前面我也说了,其实一个image就是一个系统盘加上你的代码,所以对于这个hello-world的image,我想里面就是一个busybox这样的命令工具箱和一个打印文本(echo ....)的个sh文件,当image加载后执行了这个sh文件这么简单。
  • 那么再思考一下,如果要我去创建这个image,我也可以拿一个ubuntu的image,并且安装了jre,再写一个class,main方法里面打印这段文本,最后build成这一个image,上传到docker hub。是不是也是一个hello-world-for-java的image呢。其它人下载后也可以一样的打印出预期的结果。

小结

好了通过这个简单的演示,希望大家已经初步认识了docker是怎么运作的。下面我们再来聊docker的概念和他可以为我们带来什么吧。

MARSGGBO♥原创







2019-3-8

【转载】大白话Docker入门(一)的更多相关文章

  1. 【转载】大白话Docker入门(二)

    原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...

  2. 大白话Docker入门(一)

    摘要: #大白话Docker入门(一) 随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍.目前的资料不少,但是由于docker的发 ...

  3. 转载:Docker入门只需看这一篇就够了

    最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...

  4. Docker入门(转载)

    Docker入门 一.Docker 1.什么是容器? 容器就是将软件打包成标准化单元,用于开发.交付和部署.容器是轻量的.可执行的独立软件包 ,包含软件运行所需的所有内容:代码.运行时环境.系统工具. ...

  5. docker入门实例(转载)

    1.Docker 是什么?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 ) ...

  6. Docker 入门实践

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...

  7. Docker入门学习

    Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...

  8. 这可能是最为详细的Docker入门吐血总结

    这可能是最为详细的Docker入门吐血总结  https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...

  9. Docker(一):Docker入门教程

    如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...

随机推荐

  1. QTableWidgetItem class

    Help on class QTableWidgetItem in module PyQt5.QtWidgets: class QTableWidgetItem(sip.wrapper)  |  QT ...

  2. C语言之输入月收入,输出该月应纳税额-2019(简易版)

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define s1 0.03 //税率b < ...

  3. VS2019 更新MSDN并创建快捷方式

    本文主要记录了 VS2019 中帮助查看器(Help Viewer)相关的内容,如何安装.如何启动.如何复用已有的文档.如何创建快捷方式等内容,通过本文将会对该工具有一个全面的了解. 安装 Help ...

  4. Asp.Net Core Options模式的知识总结

    Options模式是Asp.Net Core中用于配置的一种模式,它利用了系统的依赖注入,并且还可以利用配置系统.它使我们可以采用依赖注入的方法直接使用绑定的一个POCO对象,这个POCO对象就叫做O ...

  5. [模板] tarjan/联通分量/dfs树

    //to update 边的分类 有向图边分为四类: 树边, 前向边, 返祖边(后向边), 横叉边. 上图: 判定 有向图 对图进行dfs, 不考虑已经遍历过的点, 得到dfs序 \(dfn_i\). ...

  6. Msi中文件替换

    转自https://blog.csdn.net/davidhsing/article/details/9962377 ※说明:目前可以用于MSI编辑的软件很多,但是有些软件在保存时会在MSI文件中写入 ...

  7. sql server查看表是否死锁

    1,查看那个表死锁 select object_name(resource_associated_entity_id) as tableName, request_session_id as pid ...

  8. JavaScript基础入门 - 01

    JavaScript入门 - 01 准备工作 在正式的学习JavaScript之前,我们先来学习一些小工具,帮助我们更好的学习和理解后面的内容. js代码位置 首先是如何编写JavaScript代码, ...

  9. python 2.x 与3.x 的区别总结

    宏观上:2.x 源码不规范,混乱,冗余. 3.x 源码优美清晰,统一标准,去除了冗余.   默认编码方式:2.x ASCII码  3.x UTF-8 用2.x 处理中文时,需要声明编码方式(由于cmd ...

  10. postman随机生成数

    postman做重复测试时,随机数就有很大的作用,不用每次都输入 在postman的Params中,输入一个左大括号,会显示三种随机数: 也可以在body中设置 随机数如下: {{$guid}}:添加 ...