Windows下通过DockerToolbox安装Docker
什么是Docker
Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
CI(持续集成)服务器的功能
CI服务器功能是不断地集成所有正在进行的更改并由不同的开发人员提交到存储库,并检查编译错误。它需要每天多次构建代码,最好是在每次提交之后,以便它可以检测在问题发生时是哪个提交Bug了。
为什么使用Docker
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
传统的虚拟机是先虚拟硬件资源,然后在虚拟的硬件资源之上运行操作系统。
而 Docker 容器作为一个进程,直接运行于宿主主机内核,因此 Docker 更加快捷
优势:
节省资源开销。
更快的启动时间(通常可以在1秒内启动)。
便于部署及迁移(镜像包含了应用和相关依赖,可以运行在任何配置了 Docker 的主机上)。
分层存储,提高存储效率。
Docker几个重要概念
- 镜像(Image):
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像
Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。
镜像存储在Docker注册表中,registry.hub.docker.com
- 容器(Container):
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。
- Docker容器可以有四种状态:运行、已暂停、重新启动、已退出
- 仓库(Repository):
仓库可看着一个代码控制中心,用来保存镜像。
Docker 仓库是一个集中存储和分发镜像的服务,你可以建立自己的私有仓库,也可以使用共有仓库,比如 Docker Store。
容器内部机制-- Docker的工作原理
Docker的工作原理:
每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。
发生隔离是因为内核知道分配给进程的命名空间,
并且在API调用期间确保进程只能访问其自己的命名空间中的资源。
Docker使用流程和工作流程
-
Docker使用流程
1)创建Dockerfile后,您可以构建它以创建容器的镜像
2)推送或拉取镜像 -
Docker工作流程
从Dockerfile开始。Dockerfile是镜像的源代码。
创建Dockerfile后,构建它以创建容器的镜像。镜像只是“源代码”的“编译版本”,即Dockerfile。
获得容器的镜像后,应使用注册表重新分发容器。注册表就像一个git存储库 - 你可以推送和拉取镜像。
接下来,使用该镜像来运行容器。在许多方面,正在运行的容器与虚拟机(但没有虚拟机管理程序)非常相似。
+--------+ docker build +-------+ docker run -dt +-------+ docker exec -it +------+
| Dockerfile | ---------> | Image | ---------> | Container | ----------> | Bash |
Dockerfile 文件
FROM:指定基础镜像
LABEL:功能是为镜像指定标签
RUN:运行指定的命令
CMD:容器启动时要运行的命令
比如
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
CMD node demos/01.js
解析:
FROM node:8.4: 该 image 文件继承官方的 node image,
冒号表示标签,这里标签是8.4,即8.4版本的 node。
COPY . /app: 将当前目录下的所有文件(除了.dockerignore排除的路径),
都拷贝进入 image 文件的/app目录。
WORKDIR /app: 指定接下来的工作路径为/app。
RUN npm install: 在/app目录下,运行npm install命令安装依赖。
注意,安装后所有的依赖,都将打包进入 image 文件。
EXPOSE 3000: 将容器 3000 端口暴露出来, 允许外部连接这个端口。
CMD node demos/01.js 容器启动后自动执行node demos/01.js
RUN命令与CMD命令的区别在哪里?
RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;
CMD命令则是在容器启动后执行。
另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
定了CMD命令以后,docker container run命令就不能附加命令了
docker常用命令
docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker image build -t koa-demo:0.0.1 . 创建 image 文件, 当前路径--一个点
docker container run 从 image 文件生成容器。
docker ps 列出所有容器
docker container kill 终止容器运行。向容器里面的主进程发出 SIGKILL 信号
docker container stop 终止容器运行,相当于向容器里面的主进程发出 SIGTERM 信号,
然后过一段时间再发出 SIGKILL 信号。
docker container run 新建容器,每运行一次,就会新建一个容器。
同样的命令运行两次,就会生成两个一模一样的容器文件。
docker container start [containerID] 启动已经生成、已经停止运行的容器文件
Docker Compose
一个应用系统不仅仅只包含一个服务,每个服务一般也有多个容器实例。这种情况下如果每个容器都要手动启停,那么效率之低、维护量之大可想而知。
Docker Compose是Docker官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
使用Docker Compose可以轻松、高效的管理容器,它是一个用户定义和运行多个容器的Docker应用程序。
在Docker Compose中你可以使用YAML文件来配置你的应用服务,
然后只需要一个简单的命令,就可以创建并启动你配置的所有服务。
github地址:https://github.com/docker/compose
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完成业务单元,在docker-compose.yml中定义。
监控生产中的Docker
Docker提供docker stats和docker events等工具来监控生产中的Docker。
用这些命令获取重要统计数据的报告。
-
Docker stats:
当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。 -
Docker events:用于查看Docker守护程序中正在进行的任务。
一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。
我们还可以使用各种选项来限制或过滤我们感兴趣的事件。
虚拟化
虚拟化允许您在同一硬件上运行两个完全不同的操作系统。