- Docker 简介
- Docker 基本概念(镜像,容器,仓库)
- Docker 引擎
- 基于Dockerfile 镜像的构建
- Demo(Docker创建Mysql 服务)
Docker 简介
- Docker 是一个用于开发、部署和运行应用的开源平台。它意在使你能更快地进行应用分发。
- 使用 Docker 可以将应用系统和基础设施分离,并且可以用管理应用系统类似的方式对基础设施进行管理。
- Docker 使用了内核的容器功能 + 工作流程 + 工具来助我们管理和部署应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
为什么要用Docker
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
具体说来,Docker 在如下几个方面具有较大的优势。
- 更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
- 更高效的虚拟化
Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
- 更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
- 更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
- 对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
Docker 基本概念(镜像,容器,仓库)
镜像
Docker 镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。
镜像可以用来创建 Docker 容器。
Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
容器
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
*注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
Docker 仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
注:Docker 仓库的概念跟 [Git](http://git-scm.com/) 类似,注册服务器可以理解为 GitHub 这样的托管服务。
Docker Engine(Docker 引擎)
Docker 引擎是一个 CS 框架的应用程序,有下面几个主要组件:
- 服务端 server 是一个一直在后台运行的守护进程。
- REST API 是客户端及其它程序与服务端交互的接口。
- 命令行界面(CLI)
CLI 以脚本或直接命令的形式,利用 Docker REST API 和 Docker 后台进程交互。而其它的 Docker 应用也会使用 REST API 和 CLI。
后台对 Docker 对象进行创建和管理。Docker 对象包括 images, containers, networks, data volumnes 等。(The daemon creates and manages Docker objects, such as images, containers, networks, and volumes.)
基于Dockerfile 镜像的构建
新建一个目录:
mkdir ubuntu-vim
然后在该目录下编辑Dockerfile
cd ubuntu-vim
vim Dockerfile
Dockerfile内容如下所示:
FROM ubuntu
RUN apt-get update
RUN apt-get install
RUN apt-get install -y vim
意思是在ubuntu这个镜像基础上,分别运行apt-get update,apt-get install和apt-get install -y vim(-y指的是在命令行交互提示中,直接输入 yes)。
创建好这个Dockerfile后,运行下面这条命令来构建镜像:
docker build -t lconcise/ubuntu-vim-dk .
构建成功输出:
[root@10-9-106-123 ubuntu-vim]# docker build -t lconcise/ubuntu-vim-dk .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM ubuntu
---> 2ca708c1c9cc
Step 2/4 : RUN apt-get update
---> Using cache
---> feece65d2357
Step 3/4 : RUN apt-get install
---> Using cache
---> 8a91309fdb1b
Step 4/4 : RUN apt-get install -y vim
---> Using cache
---> 65eb4fec91ac
Successfully built 65eb4fec91ac
Demo(Docker创建Mysql 服务)
我们拉取MySQL镜像:
docker pull mysql:5.7.25
创建mysql 容器
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7.25
测试连接mysql:
image.png
参考博文:
https://doc.yonyoucloud.com/doc/docker_practice/index.html
https://www.kancloud.cn/hfpp2012/docker/467096
https://www.atjiang.com/understanding-docker/
https://www.ibm.com/developerworks/community/blogs/132cfa78-44b0-4376-85d0-d3096cd30d3f/entry/Docker_%E6%9E%B6%E6%9E%84%E8%AF%A6%E8%A7%A3_%E6%AF%8F%E5%A4%A95%E5%88%86%E9%92%9F%E7%8E%A9%E8%BD%AC%E5%AE%B9%E5%99%A8%E6%8A%80%E6%9C%AF_7?lang=en
网友评论