什么是Docker?
Docker 是一个开源的应用容器引擎。它支持将软件、软件的依赖、以及软件的运行环境一起打包成一个镜像文件;将镜像发布出去,其他使用者可以直接使用这个镜像。
这就解决了同一份软件在不同机器上,重复进行复杂的环境配置问题。Docker在打包时,把原始环境一模一样地复制过来,使用者直接运行Docker镜像即可。
环境配置如此麻烦,换一台机器,就要重来一次。在Docker容器化技术之前,这个问题也一直存在,也出现了物理虚拟机的技术。
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。
虽然用户可以通过虚拟机还原软件的原始环境。但是,这个方案有几个缺点:资源占用多、冗余步骤多、启动慢。
因此出现了Linux 容器(Linux Containers,缩写为 LXC)另一种虚拟化技术,Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像文件中。运行这个文件,就会生成一个虚拟容器(进程)。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机有很多优势:启动快、资源占用小、体积小。
Docker能做什么?
Docker 是一个容器工具,提供虚拟环境。它改变了我们对软件的认识。
站在 Docker 的角度,软件就是容器的组合:业务逻辑容器、数据库容器、储存容器、队列容器......Docker 使得软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来。
这正是微服务(micro services)的思想:软件把任务外包出去,让各种外部服务完成这些任务,软件本身只是底层服务的调度中心和组装层。
微服务很适合用 Docker 容器实现,每个容器承载一个服务。一台计算机同时运行多个容器,从而就能很轻松地模拟出复杂的微服务架构。
Docker核心概念
- Docker客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker API 和Docker主机进行交互。
- Docker主机(Host):安装了Docker程序的机器。
- Docker仓库(Registry):用来保存镜像,类似于maven中央仓库。
- Docker镜像(Images):是用于创建 Docker 容器的模板,放在Docker仓库当中。
-
Docker容器(Container):独立运行的一个或一组应用。
架构解析:
最左边Client就是客户端,也就是需要使用Docker容器的人;Client在自己机器上安装运行所需要的docker镜像,类似于Maven管理依赖一样,Docker也会是先去本地(DOCKER_HOST)去寻找,如果没有,就去中央仓库Registry拉取。
比如:我要实现一个简单的电商网站,实现完业务代码后用Dockerfile做成Docker镜像,然后从docker中央仓库拉取mysql、redis、mq的官方镜像,和自己的业务镜像一起组装成一个软件整体。
像mysql、redis、nginx这些开源公共的组件,官方都有将其做成Docker镜像,并发布在Docker Registry中,供广大开发者使用。我们自己实现的一些组件,也能按Dockerfile规范做成Docker镜像,发布出去供其他人使用。
Dockerfile,其实就是生成docker镜像的模板文件,包含很多指令。
Docker仓库分为公共的和私人的,公共的Docker仓库可以访问https://hub.docker.com进行查看。
Docker安装
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。
安装请参考官方文档。
安装完成后,运行下面的命令,验证是否安装成功:docker version
Docker(客户端)常用命令
-
镜像操作
容器操作
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、docker ps
查看运行中的容器
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、查看容器的日志
docker logs container-name/container-id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
注意,在Docker中启动一个应用时,一定要做端口映射。不然客户端是无法访问到主机中的Docker容器。
使用Docker的步骤
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;