如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。

本文详细解释介绍Docker入门相关内容,后期重点关注Docker在微服务体系中的使用。在了解Docker之前我们先考虑几个问题:1、Docker是什么?2、为什么要使用Docker,它有什么优势?带着这些问题我们来看看下面的内容。

什么是Docker?

Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。

Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。

为什么要使用Docker

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。

具体说来,Docker 在如下几个方面具有较大的优势。

1、更快速的交付和部署

对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

2、更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3、更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4、更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

Docker vs VM

从下图可以看出,VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。

相关概念

Docker是CS架构,主要有两个概念:

  • Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
  • Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon

了解了Docker的组成,再来了解一下Docker的三个主要概念:

  • Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
  • Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
  • Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry。

镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。

Docker安装

建议在linux环境下安装Docker,window环境搭建比较复杂且容易出错,使用Centos7+yum来安装Docker环境很方便。

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令:

yum install docker
  • 1

安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

service docker start
chkconfig docker on
  • 1
  • 2

LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,如下:

systemctl start docker.service
systemctl enable docker.service
  • 1
  • 2

测试

docker version
  • 1

输入上述命令,返回docker的版本相关信息,证明docker安装成功。

Hello World

下面,我们通过最简单的 image 文件”hello world”,感受一下 Docker。

因为国内连接 Docker 的官方仓库很慢,因此我们在日常使用中会使用Docker 中国加速器。通过 Docker 官方镜像加速,中国区用户能够快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户现在将会享受到更快的下载速度和更强的稳定性,从而能够更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可通过registry.docker-cn.com访问。该镜像库只包含流行的公有镜像,私有镜像仍需要从美国镜像库中拉取。

修改系统中docker对应的配置文件即可,如下:

vi  /etc/docker/daemon.json
#添加后
{"registry-mirrors": ["https://registry.docker-cn.com"],"live-restore": true
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

运行下面的命令,将 image 文件从仓库抓取到本地。

docker pull library/hello-world
  • 1

上面代码中,docker image pull是抓取 image 文件的命令。library/hello-world是 image 文件在仓库里面的位置,其中library是 image 文件所在的组,hello-world是 image 文件的名字。

抓取成功以后,就可以在本机看到这个 image 文件了。

docker images
#显示结果
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world           latest              f2a91732366c        3 months ago        1.848 kB
  • 1
  • 2
  • 3
  • 4

现在,运行这个 image 文件。

docker run hello-world#显示结果
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

输出这段提示以后,hello world就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如Mysql镜像等。

常用命令

除过以上我们使用的Docker命令外,Docker还有一些其它常用的命令

拉取docker镜像

docker pull image_name
  • 1

查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:

docker images
  • 1

删除镜像

docker rmi  docker.io/tomcat:7.0.77-jre7   或者  docker rmi b39c68b7af30
  • 1

查看当前有哪些容器正在运行

docker ps
  • 1

查看所有容器

docker ps -a
  • 1

启动、停止、重启容器命令:

docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
  • 1
  • 2
  • 3

后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:

docker attach container_name/container_id
  • 1

删除容器的命令:

docker rm container_name/container_id
  • 1

查看当前系统Docker信息

docker info
  • 1

从Docker hub上下载某个镜像:

docker pull centos:latest
docker pull centos:latest
  • 1
  • 2

执行docker pull centos会将Centos这个仓库下面的所有镜像下载到本地repository。

Docker(一):Docker入门教程相关推荐

  1. Docker 极简入门教程,傻瓜都能看懂!

    富 Web 时代,应用变得越来越强大,与此同时也越来越复杂.集群部署.隔离环境.灰度发布以及动态扩容缺一不可,而容器化则成为中间的必要桥梁. 本文我们就来探索一下 Docker 的神秘世界,从零到一掌 ...

  2. Docker v19.x入门教程啊

    Docker v19.x logo 引言 非常感谢你能在闲暇之余点开了小编的文章,这篇文章是2020年较为全面的Docker19入门的一个教程,不过他更像一个Docker的手册,所以需要你来花费较长的 ...

  3. 2020年最完整的Docker v19.x入门教程

    Docker v19.x 提示 首先非常感谢你能在闲暇之余点开了我的这篇文章,这篇文章因为是比较全面的Docker入门的一个教程,所以可能需要花费比较长的时间来阅读能比较多,所以如果方便的化你可以点击 ...

  4. Docker最有趣入门教程----来自外国小哥(翻译更新中~)

    完成Docker安装后,运行以下命令测试Docker安装: $ docker run hello-worldHello from Docker. This message shows that you ...

  5. 数据分析及机器学习环境配置(docker极简入门指南)

    做数据科学一般需要用到类似XGBOOST.TensorFlow之类的库,这些库在win下不是那么好安装的,但是很多人又需要它们,那怎么办呢,最简单的就是用docker的方式,不仅具备一个linux虚拟 ...

  6. docker 镜像修改的配置文件自动还原_原创 | 全网最实在的docker入门教程四

    作者:潘吉祥 上一篇我们学习了如何使用Dockerfile制作自己的镜像,不过这种方式更像纯粹的运维方式,作为开发者来说,未免有些小繁琐,一个不小心写错些命令就执行失败,我们还不知道错误在哪,这着实有 ...

  7. docker 入门教程指南

    关于 docker 今天云平台的同事提到, 现在的运维就是恶性循环, 因为大家都在申请机器, 显然的是, 大家申请机器都是按照自己的峰值申请的, 而为了保证突发状况, 如 ddos, 双11 等, 申 ...

  8. centos7 docker安装和使用_入门教程

    centos7 docker安装和使用_入门教程 原文:centos7 docker安装和使用_入门教程 说明:本文也是参考互联网上的文章写的,感谢相关作者的贡献. 操作系统 64位CentOS Li ...

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

    Docker教程(一) Docker入门教程 本文链接:https://blog.csdn.net/yuan_xw/article/details/51935278 Docker教程(一) Docke ...

  10. docker registry push 覆盖_原创 | 全网最实在的docker入门教程四

    原创头条号:码农code之路,作者:潘吉祥,转载请标明出处 上一篇我们学习了如何使用Dockerfile制作自己的镜像,不过这种方式更像纯粹的运维方式,作为开发者来说,未免有些小繁琐,一个不小心写错些 ...

最新文章

  1. 解决javah生成c头文件时找不到android类库的问题
  2. codewars--js--Hamming Numbers
  3. Python 前端的第三方库
  4. 打通两台机器的ssh功能
  5. HEVC概念缩写对照表
  6. 关于js读取rtf域的问题
  7. 使用a标签调用手机系统的一些小技巧(打电话、发短信)
  8. php socketconnect连接失败_PHP设计模式之模板方法模式
  9. android com.squareup,android – 无法导入com.squareup.okhttp.OkHttpClient;
  10. 我清华毕业,在龙泉寺写代码
  11. np.newaxis学习【转载】
  12. 设计模式之——单例模式(Singleton)的常见应用场景(转):
  13. win7下安装usb转串口不成功解决方法
  14. constrain用法java_Java中的@UniqueConstraint注释
  15. js 浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)
  16. 自定义scrollview右侧的滑动条
  17. 易语言linux支持多线程,详解易语言启动多线程
  18. C002-CPP-语法与用法摘录-(ques=0)
  19. c语言怎么移位,C语言中的移位操作
  20. 论文-Knowledge Graph Grounded Goal Planning for Open-Domain Conversation Generation

热门文章

  1. 神经网络入门(最通俗的理解神经网络)
  2. 熟悉Java String的使用,熟悉String的各种函数,Java中各种变量类型
  3. 写给程序员的有效学习方法
  4. 浅谈L0,L1,L2范数及其应用
  5. 深度学习Deep Learning 相关库简介
  6. 【人脸识别】初识人脸识别
  7. Deep Learning论文笔记之(三)单层非监督学习网络分析
  8. Shell教程(五):替代、引用机制、输入输出重定向
  9. jfinal上传图片,生成日期文件夹,图片重命名
  10. WEB服务器、应用程序服务器、HTTP服务器的区别