第一次接触Docker这个东西仍是在两年前,所在的公司主要是提供SAAS服务的,因此很早就开始使用微服务+容器化的方式进行软件交付。对于一个前端仔来讲,是彻底陌生的一个东西。因为开发中须要使用Docker来搭建一些本地的开发环境,以后将本身的应用打包成Docker镜像,因此开始接触了Docker,能感觉到Docker为整个开发生产流程提供了很大的便利。慢慢的Docker也就成了电脑上必备的一个工具。经过Docker也了解到了不少运维相关的技能,技术栈更加全面。前端
任何一个新技术都不是忽然出现,从石头里面蹦出来的,Docker也是站在巨人的肩膀上,优化了容器的体验,让更多的人能够很简单的使用这一技术。巨人就是LXC(linux container)技术,该技术主要包含Namespace实现访问隔离,Cgroup来实现资源控制,Docker在这一技术的基础上提供了更加简便的控制工具,下降了开发这是用容器技术的门槛。linux
最初缔造Docker的是一个作PAAS平台叫作DotCloud的公司,后来因为Docker太受欢迎,DotCloud公司也更名成了Docker.Inc。目前Docker已经加入了Linux基金会,遵循Apache2.0协议,其代码托管于Github。git
一样都是虚拟化技术的容器技术常常被拿来和虚拟机进行对比: 从虚拟化的方式来看,虚拟机是硬件级别的虚拟化,cpu、内存等都是虚拟化出来的,而容器只是基于相同的运行内核在操做系统层进行虚拟化。因此在内存使用上,容器是需宿主机共用相同的内存的。由于容器只虚拟化了操做系统,因此其启动速度大大优于虚拟机,同时很是的轻量。 由于各自的特色容器和虚拟机也有着不一样的应用场景:github
可是容器和虚拟机也不是那种非此即彼的关系,不少的应用场景是把虚拟机做为宿主机,而后在里面运行Docker容器。docker
前端在大多数人的眼中可能就是写写前端页面,Docker可能更多的是运维或者后端开发才须要接触的东西,那么为何一个前端工程师也须要学习使用Docker呢?数据库
本地运行做为一种工具快速搭建开发环境 服务器部署应用,避免生产测试环境不一致致使的问题,更容易作系统迁移 做为工程师,须要有综合的能力,多种方式解决问题后端
Docker大部分的操做都是围绕着三大核心概念仓库、容器、镜像进行的,了解了这三个概念,才能顺利的了解Docker的工做的整个生命周期。 api
镜像仓库顾名思义就是存放镜像的仓库,对于镜像的Ship起着很是重要的做用,在网络互通的状况下,用户能够将镜像经过docker push命令将本地打包好的镜像存储至镜像仓库,而后在目标的服务器经过docker pull命令拉取下来。目前一个最大的镜像仓库就是Docker Hub。固然也能够本身搭建一个镜像仓库的服务,阿里云上就支持建立一个免费的Docker镜像仓库。服务器
Docker镜像就至关于咱们安装操做系统所使用的的iso文件,能够经过Dockerfile文件经过docker build命令建立,Docker在镜像的存储结构上使用的是分层的存储方式,Dockerfile的每一行指令都会生成一层,使用这种分层的存储方式的好处就是,多个镜像能够共用相同的层,从而达到节省空间的做用。markdown
容器是在镜像的基础上运行起来的可读写的一层(docker run),也是真正工做的部分,若是使用过程当中产生了对容器的修改,咱们也可使用docker commit命令将其持久化到镜像中,可是若是镜像用于生产通常都须要从Dockerfile从新去生成这个镜像,由于docker commit会使镜像生成新的一层,同时这种修改是没法被使用者知晓的。
镜像还有另一种存储方式就是使用tar文件的形式,若是服务器环境离线,就只能将镜像的tar包拷贝至目标服务器,而后在解压出来。生成tar包有两种方式:
Docker容器之间资源都是隔离的,因此Docker网络对于容器之间的通讯很是重要,Docker提供以下几种网络模式,针对不一样的用户场景进行使用,固然也可使用开源社区的其余网络插件。
有些容器服务运行的时候会产生一些重要的数据,如数据库、Redis等,若是不保存下来,会就形成核心数据的丢失。固然可使用commit的方式,可是commit会致使镜像的体积变的很大。因此Docker提供了卷管理的功能。
将容器内的特定目录挂在到宿主机上的目录上
// 将容器内的data目录挂载到宿主机/host/data目录
docker run -v /host/data:/data --name test test-image
复制代码
当文件的挂在目录不少的时候极可能会出现误删,或者管理混乱的问题。因此Docker另一种数据卷容器的方式管理数据。
用户提早建立一个数据卷容器,多个容器能够共用一个容器数据卷,数据的管理更加方便
docker volume
命令 | 说明 |
---|---|
create | 建立一个数据卷容器 |
inspect | 查看数据卷详情,目录等 |
ls | 列举全部数据卷容器 |
prune | 清除全部未被使用的数据卷 |
rm | 删除特定数据卷 |
若是每次都是经过手动的方式启动Docker容器,须要指定不少的参数很是麻烦,而且面对多个容器须要启动时就更复杂了这时就须要咱们的Docker三剑客之一的Docker Compose来解决多容器编排的问题。 docker compose让咱们经过一个配置文件的方式,管理对应的容器服务。一个简单的配置文件结果以下:
version: '3'
services:
test-service:
container_name: test-service
image: test-service-image
ports:
- 8080:80
volumes:
- /host/data:/data
networks:
- test-network
restart: always
networks:
test-network:
driver: bridge
复制代码
这个配置文件就至关于咱们执行了:
docker network create -d bridge test_network
docker run -it -d --name test-service -p 8080:80 -v /host/data:/data --network test-network test-service-image
复制代码
好奇的人可能会问 Docker Compose是三剑客之一 那其余两剑客都是谁呢?
软件开发没有银弹,任何技术也都是具备两面性的。Docker做为平常工做中的辅助工具,能够为咱们节省大量的配置环境的时间,但有些时候也会给咱们带来额外的麻烦。
Docker的好处仍是显而易见的,如:
这篇文章主要较为笼统的介绍一下使用Docker中须要了解的概念和工具,后面再针对一些特定的模块详细写一些文章来介绍。