【转载】大白话Docker入门(一)
随着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是怎么玩的?
一下接触这么多东西肯定有一点点晕了吧,没关系,我们把这些串起来走一遍就会好了。
- 首先你得安装一下docker的环境,这个我在这里就不说了,针对你的系统看一下docker的官网( http://www.docker.com/products/docker ) 吧。
- 安装好后,我们在terminal中就有了docker的命令了,这个命令就是Docker Client啦。所有的操作都是通过docker命令完成的。比如:
docker version
ruideMacBook-Pro:~ ruihuang$ docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.7.1
Git commit: 6f9534c
Built: Thu Sep 8 10:31:18 2016
OS/Arch: darwin/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 17:52:38 2016
OS/Arch: linux/amd64
- 查看一下我们拥有了哪些images吧,命令:
docker images
ruideMacBook-Pro:~ ruihuang$ docker images
REPOSITORY TAG IMAGE ID CREATED
job1 latest de714ebe3a54 29 hours ago
ubuntu latest f753707788c5 3 weeks ago
busybox latest e02e811dd08f 4 weeks ago
可以看到我们拥有3个images,其中ubuntu大家都知道,busybox是一个linux下的大工具箱,它集成压缩了 Linux 的许多工具和命令,而job1则是我自己基于busybox创建的一个image,可以通过busybox的工具进行一些命令的执行,比如 echo 'hello world'。
- 再查看一下我们有哪些Docker Container吧,命令:
docker ps
ruideMacBook-Pro:~ ruihuang$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
2c08ddb62c77 ubuntu "/bin/bash" 28 hours ago
5aa853bdb033 ubuntu "/bin/bash" 28 hours ago
这里看到的都是正在运行的Container,如果要查看所有的Container就使用 docker ps -a
- 下面我们从Docker hub的Registry下载一个Image,命令:
docker pull image-name
ruideMacBook-Pro:~ ruihuang$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
再看一下现在images,命令: docker images
ruideMacBook-Pro:~ ruihuang$ docker images
REPOSITORY TAG IMAGE ID CREATED
job1 latest de714ebe3a54 30 hours ago
ubuntu latest f753707788c5 3 weeks ago
busybox latest e02e811dd08f 4 weeks ago
hello-world latest c54a2cc56cbb 4 months ago
我们看到刚才我们从docker hub上面下载了一个docker官方已经制作好的叫做hello-world的image,下载完成后,就在本地可以查看到这个image了。
- 我们把hello-world的image,放到一个docker container里面让他跑起来吧。命令
docker run image-name
ruideMacBook-Pro:~ ruihuang$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
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,也就是我们现在看到的这段话。
- 我们最后再看一下是否真的创建了docker container,命令
docker ps -a
ruideMacBook-Pro:~ ruihuang$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
3d9b24449cb3 hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago
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的概念和他可以为我们带来什么吧。
【转载】大白话Docker入门(一)的更多相关文章
- 【转载】大白话Docker入门(二)
原文:https://yq.aliyun.com/articles/63517?spm=a2c4e.11153940.blogcont63035.15.12011c3fddklk0 上篇的大白话Doc ...
- 大白话Docker入门(一)
摘要: #大白话Docker入门(一) 随着docker现在越来越热门,自己也对docker的好奇心也越来越重,终于忍不住利用了一些时间把docker学习一遍.目前的资料不少,但是由于docker的发 ...
- 转载:Docker入门只需看这一篇就够了
最近项目中需要用到 Docker 打包,于是上网查找资料学习了 Docker 的基本命令,记录一下自己遇到的一些错误. 准备开始自己写,结果看到了阮一峰老师的文章,瞬间就没有写下去的动力了,转载大佬的 ...
- Docker入门(转载)
Docker入门 一.Docker 1.什么是容器? 容器就是将软件打包成标准化单元,用于开发.交付和部署.容器是轻量的.可执行的独立软件包 ,包含软件运行所需的所有内容:代码.运行时环境.系统工具. ...
- docker入门实例(转载)
1.Docker 是什么?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 ) ...
- Docker 入门实践
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...
- Docker入门学习
Python爬虫 最近断断续续的写了几篇Python的学习心得,由于有开发经验的同学来说上手还是比较容易,而且Python提供了强大的第三方库,做一个小的示例程序还是比较简单,这不我之前就是针对Pyt ...
- 这可能是最为详细的Docker入门吐血总结
这可能是最为详细的Docker入门吐血总结 https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...
- Docker(一):Docker入门教程
如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...
随机推荐
- 从Java小白到阿里巴巴工程师,回顾我两年来的学习经历
添加描述
- linux-高并发与负载均衡-lvs-DR模型试验
先配置3台虚拟机的网络 3台虚拟机克隆的方法:(....) etho,配置在同一个网段 DIP,RIP在一个网段 node01:作为lvs负载均衡服务器 node02:作为 Real Server n ...
- python科学计算库numpy和绘图库PIL的结合,素描图片(原创)
# 导入绘图库 from PIL import Image #导入科学计算库 import numpy as np #封装一个图像处理工具类 class TestNumpy(object): def ...
- centos 7 修改网卡名字
1.编辑网卡信息 cd /etc/sysconfig/network-scripts/ #进入网卡目录mv ifcfg-en067761 ifcfg-eth0 #重命名网卡 cat ifcfg-eth ...
- Activiti6-IdentityService(学习笔记)
IdentityService并不依赖我们的流程部署文件,所以 直接放使用方法的测试代码了: public class IdentityServiceTest { private static fin ...
- AWS Step Function Serverless Applications
Installing VS Components To follow along with this article, you must have an AWS account and install ...
- BZOJ3032 七夕祭
https://remmina.github.io/BZPRO/JudgeOnline/3032.html 题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是TYVJ 今年举办了一次线 ...
- 【DeepLearning】深入理解dropout正则化
本文为转载,作者:Microstrong0305 来源:CSDN 原文:https://blog.csdn.net/program_developer/article/details/80737724 ...
- Mint-UI组件 MessageBox为prompt 添加判断条件
Mint-UI 的Message Box 是prompt类型时,可以添加正则判断或者function判断条件.具体可以查看Mint-UI源码. 添加正则判断条件: MessageBox({ $type ...
- python并发编程之多进程基础知识点
1.操作系统 位于硬件与应用软件之间,本质也是一种软件,由系统内核和系统接口组成 和进程之间的关系是: 进程只能由操作系统创建 和普通软件区别: 操作系统是真正的控制硬件 应用程序实际在调用操作系统提 ...