我们的程序首先在开发环境开发,然后需要部署到测试环境交给测试人员测试, 最后需要由运维人员部署到生产环境正式运行,在这个过程中任何一个环境如果和其他环境不一致,则会出现开发阶段能运行的程序在测试阶段或生产阶段不能够正常运行,这就是软件跨环境迁移问题。
JavaEE 程序依赖的基础环境:JDK、tomcat、数据库、中间件、操作系统、配置文件(代码配置、JDK 配置、tomcat 配置、操作系统配置)…
Docker 可以让开发者构建应用程序时,将应用程序与其所依赖的环境一起打包到一个容器中,然后交付整个环境而不仅仅是代码。这样一个带环境的程序包就是一个容器,容器可以解决软件跨环境迁移的问题。
Docker 借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker 将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而 Docker 运输软件。
Docker 是基于 Go 语言实现的开源容器引擎,供开发人员和系统管理员 使用容器构建,运行和共享应用程序的平台。使用容器来部署应用程序称为容器化。容器并不是新事物,但用于轻松部署应用程序的容器却是新事物。简而言之,Docker 就是为了解决开发、运维、测试人员环境不一致、简化环境搭建、迁移、部署而提出的:容器化技术。
怎么理解 Docker 是容器化技术呢?
容器化技术的特点:
标准化:每个容器都是标准化、可移植的,因为他们直接运行在宿主机的内核上隔离:容器互相隔离,互不干扰,独立运行
高性能:容器性能开销极低,可以实现分钟级甚至秒级的部署和启动
版本:CE(Community Edition:社区版)和 EE(Enterprise Edition:企业版)
微服务领域:有助于 Microservices 的落地和部署
隔离应用: 充分利用物理机资源,同时能够整合服务器资源(隔离应用、在同一硬件上运行更多工作负载)
快速、一致地交付您的应用程序:提高开发效率,测试效率,部署效率,有利于
DevOps 的落地,CICD
Docker 理念:Build,Ship and Run Any App,Anywhere,在任何地方构建、发布并运行任何应用程序(一次封装,到处运行)
docker 由三部分组成:Client 客户端、docker 主机、Registry 镜像仓库服务器
Ø docker 主机:
docker daemon:docker 安装后,会以后台运行、守护进程的形式存在
images 镜像: 镜像可以用来创建 docker 容器,一个镜像可以创建很多容器
containers: 镜像和容器的关系类似面向对象设计中的类和对象, 镜像是容器的模板,容器是基于镜像创建出来的。容器可以被创建、启动、停止、删除等等。
注意:Docker 镜像(Image)就是一个只读的模板!即不可以修改镜像。
Ø Registry:镜像注册服务器 https://hub.docker.com
一个 docker Registry(仓库注册服务器) 中可以包含多个 Repository(仓库);每个仓库可以包含多个标签/版本(Tag);每个标签对应一个镜像。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式,公开仓库就是
docker 官方仓库,私有仓库是自己搭建的 docker 私服
Ø Client:docker 终端
安装好 docker 中,同时包含了 docker 客户端,客户端负责执行 docker 命令, 发送给 docker 主机中的 docker 守护进程,例如:从仓库下载镜像,通过镜像创建 容 器 等 等 。
A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
镜像是构建在 Docker 的基石。用户基于镜像来运行自己的容器,也可以将镜像当做容器的”源代码”。镜像是由一系列指令一步一步 构建出来。Docker 镜像
(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
docker pull 在哪拉取的镜像? 默认是在 hub.docker.com
docker pull tomcat 拉取的版本是?默认是最新的版本,可以在后面指定版本
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another.
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
官方文档参考: https://www.docker.com/resources/what-container
Container images become containers at runtime and in the case of Docker containers- images become containers when they run on Docker Engine.
A container is launched by running an image. An image is an executable package that includes everything needed to run an application–the code, a runtime, libraries, environment variables, and configuration files. A container is a runtime instance of an image–what the image becomes in memory when executed (that is, an image with state, or a user process). You can see a list of your running containers with the command, docker ps, just as you would in Linux.
仓库(Repository)是集中存放镜像文件的场所。仓库(Repository)和仓库注册中心(Registry)是有区别的。仓库注册中心服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。标签就是对应软件的各个版本。
仓库注册中心分为公开仓库(Public)注册中心和私有仓库(Private)注册中心 两 种 形 式 。 最 大 的 公 开 仓 库 注 册 中 心 是 Docker
Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库注册中心包括阿里云 、网易云等
官 网 : [http://www.docker.com]
安装手册:https://docs.docker.com/install/linux/docker-ce/centos(CE-社区版)
yum-utils 提 供 了 yum-config-manager 相 关 功能,device-mapper-persistent-data 和 lvm2 是设备映射器驱动程序所需要的。
yum install -y yum-utils device-mapper-persistent-data lvm2
docker 官方下载地址:
yum-config-manager \
--add-repo https://download.docker.com/linux/centos/docker-ce.repo
推荐阿里云下载地址(推荐)
yum-config-manager \
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
我们在更新或配置 yum 源之后,通常都会使用 yum makecache 生成缓存,这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
yum makecache fast
yum install -y docker-ce docker-ce-cli containerd.io
如果报错,重新执行安装一次
systemctl start docker
systemctl enable docker #设置开机自启动
docker version
systemctl stop docker yum remove -y docker-ce rm -rf /var/lib/docker
从 docker 的官方镜像仓库服务器上下载 docker 的镜像速度很慢,因此我们可以配置国内的容器镜像服务,提升 docker 镜像的下载速度。
如:阿里云 腾讯云 网易云
搜索“容器镜像服务”
docker run hello-world: 以镜像为模板创建 docker 容器并运行
本人亲自推荐阅读推荐
Docker 极简入门指南:
https://gitbook.cn/gitchat/column/5a13be9775462408e0da8d9d
深入浅出 Docker 技术栈实践:
https://gitbook.cn/gitchat/column/59e464726958416d85ae9207