Docker是非常的流行的,前段时间发现自己对Docker还是仅仅停留在会用几个命令的地步上,于是我就打算系统的学学。Docker官方文档写的还是挺详细的,推荐大家学习的时候去看下官方文档,我现在学习新技术一般都先去官网转转。
是什么?
Docker是一个开发者用来构建、运行和共享容器应用程序的平台。
先不管容器化,我们该如何理解平台这个词呢?
平台的意义很广泛,不同人从事不同行业甚至在同一行业从事不同的方向对平台的认识和理解可能都会不同。总体来说,平台也是有共性的,通常的理解是指一种基础的可用于衍生其他产品的环境.这种环境可能只用于产生其他的产品,也有可能在产生其他产品的之后还会是这些衍生产品生存的环境。---《平台:自媒体时代用影响力赢取惊人财富》
粗略的讲,平台是一种提供服务的环境,这样讲可能有些抽象了,我们举一些例子来说明平台,比如为人熟知的淘宝、京东可以算电商平台。商户可以在电商平台上卖东西,消费者在上面买东西。比如外卖平台,我们想到的是饿了么、美团,这些平台为消费者使用这些外卖平台找到自己想吃的,商家将自己的商品放上去增加销售方式。
外卖平台上提供的是外卖服务,消费者在平台上找到自己想吃的饭,一般由外卖平台配送,一般的商家也可以加入到外卖平台提供自己的商品。那么Docker平台上也提供类似的服务,对于开发者来说我们平常消费的就是各种基础应用程序,比如说JDK、MySQL。MySQL团队已经将MySQL发布在Docker平台上了,安装起来非常简单,几行命令就搞定了。商家入驻外卖平台,我们可以在外卖平台对应的App上搜到,那开发者团队发布的程序,我们去哪里找呢?
去registry处找,这个registry类似于手机上的应用市场,官方提供的registry是docker hub registry。
在这里你可以像搜手机应用一样搜索
容器与镜像
Docker平台上使用镜像这个概念来描述应用程序,你可以理解为安装包,也就是说你可以将镜像理解为应用程序,用容器来描述进程。进程是正在运行的镜像的实例,使用registry来描述应用市场,也就是说你可以从registry处获得你所需要的的镜像,也可以自己做镜像,默认的registry是 Docker Hub ,从这个获取镜像可能会比较慢,我们就需要切换镜像仓库地址,后文会讲如何切换。
有了容器和镜像这两个概念之后,我们就可以简单的使用Docker了。
优点
- 轻量级 Lightweight
Docker中可以运行应用程序,这很像一个小型的操作系统,但是又不是,还是一个应用程序,相对于虚拟机来说更轻量级,这个也是Docker的优势,轻量级,很容易就引入了,如果你装虚拟机的话,首先虚拟机很庞大,然后还需要配置各种各样的环境,这一点相信装过虚拟机的都懂,除此之外,有的时候,我们并不是完全需要虚拟机提供的所有服务,很多时候我们需要的只是一个应用运行环境而已,虚拟机的开销是很大的,更消耗内存。
容器拥有自己的文件系统,我们可以进入进程的文件系统,修改对应的配置文件。
- 灵活 Flexible 很多程序都可以容器化 ,即使是很复杂的程序。
Docker Hub registry 上主流的服务器程序都有对应的镜像
- 方便 Portable You can build locally, deploy to the cloud, and run anywhere.
本地构建,部署在云端,然后在任何地方运行。
这让我想起来java,java的口号是一次编译,处处运行是因为JVM。
Docker的run anywhere,我个人理解应该是部署到任意一台计算机。这是很吸引开发者的特性,因为开发者常常会碰到,本地好好的,换台机器部署就不行了的这种情况,一般情况下都是环境的问题。那Docker是怎么做到的呢? 就是打包环境。以java为例,你在部署的时候,首次要安装JDK,配置环境变量,然后不熟悉的同学还可能配置错,如果是war包的话还需要安装Tomcat,一般我们称这个是运行环境。
上文我们提到过Docker用镜像来描述应用程序,我们可以认为镜像 = 应用程序 + 运行时环境。所以用了Docker后, 就不需要你在操心运行环境了,几行命令轻松完成部署。
先安装起来再说
Linux版本要求
docker基于Linux(一般建议Centos7),在6.x版本似乎有点不稳定。
内核版本要求大于3.10。
查看系统内核版本: uname -r。如果不满足可以百度搜索如何升级内核版本。
使用指南
- 安装
yum -y install docker
- 启动Docker
systemctl start docker
- 开机自启
systemctl enable docker
- 下载镜像
docker pull 镜像名字:版本号
如何得知镜像名字:版本号
- 方式一 Docker Hub
- 方式二 docker search mysql:5.7
假如你非常熟悉服务器的版本,你下载的时候就可以这样搜素 docker search 应用名:版本
- 下载mysql 5.7版本
docker pull mysql:5.7.31
上文我们提到,走默认的仓库,可能会比较慢,我用的是阿里云的服务器,还是比较快的。如果你装的是虚拟机,可能执行这个命令就比较慢,所以我们就需要使用加速网站加速。
docker加速网站
- registry.docker-cn.com
- daocloud.io/library
使用加速非常简单 docker pull 加速网站地址/ mysql:5.7.31
- 查看下载的镜像
docker ps -a 不加-a只显示正在运行的容器。
- 先安装在启动
安装的命令一般格式是 docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS可选的有很多,具体的参看: docker run
安装 docker run -di --name=mysql -p:3306:3306 -e MYSQL_ROOT_PASSWORD=root123 mysql:5.7.31
- di是后台启动
- MYSQL_ROOT_PASSWORD是设置超级管理员的密码 -e 是设置环境变量
- name 安装之后的名字
- 最后指定的是安装包,也就是docker pull 的镜像名. 使用加速网站下载的记得加上加速网站名。
有显示这个代表安装成功。
安装之后我们启动一下,首先用docker ps 查看正在运行的容器。
容器启动不代表,容器中的镜像启动,所以我们还要启动一下容器中的镜像。
启动镜像命令:
docker start 容器ID
停止容器命令:docker stop 容器ID
移除容器命令: docker em 容器ID
注意事项
注意MySQL默认是走3306端口,安装镜像时,指定3307也没用,因为配置文件中指定了就是3306。容器自己私有一个文件系统,在linux上本机已经有mysql的情况下,Docker中安装MySQL镜像,启动之后,连接会失败,需要进入容器私有的文件系统修改配置文件。
然后停止容器之后,安装在Docker中的MySQL存储的数据就会消失,默认是这样的,也有方法可以做到持久化,怎么做呢?
那是下一个话题了。
参考资料:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。