Docker 是十分的风行的,前段时间发现自己对 Docker 还是仅仅停留在会用几个命令的境地上,于是我就打算零碎的学学。Docker 官网文档写的还是挺具体的,举荐大家学习的时候去看下官网文档,我当初学习新技术个别都先去官网转转。
是什么?
Docker is a platform for developers and sysadmins to build, run, and share applications with containers.
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 存储的数据就会隐没,默认是这样的,也有办法能够做到长久化,怎么做呢?
那是下一个话题了。
参考资料:
- docker 批改 mysql 配置
- docker:批改容器默认端口号
- Docker docs