名词概念:镜像、容器、仓库
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
关于docker的一些优点和使用场景可以去docker官网查看,这里不一一列出,上述简单介绍一下几个关键名词,下面开始学习怎么使用docker。
一、编写第一个Dockerfile
举一个栗子:假如现在有一个web项目,我们需要部署到服务器上面去,并且启动可以访问。我们的思路肯定是把这个项目的war包拷贝到服务器的tomcat的webapps下面,然后将这个tomcat启动。这是没学docker之前的思路,那么现在怎么用docker容器来把这个项目跑起来呢?
我们知道学了docker以后,我们的思维发生了变化,各个应用都可以尝试用容器部署,例如tomcat、mysql、Redis等都可以用容器启动,所以我们自己的项目也是这样。容器可以理解为是镜像的一个实例化对象,所以首先需要有镜像文件,才能启动容器,那么这个镜像文件就是通过Dockfile来定制的,Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明, 简单来说就是用来定制镜像的一个规则文件。
首先用idea建了一个web项目,且打成war包后上传到服务器的某个文件夹下面,这里是放在了docker-registry-demo文件夹下面, 同时在同级目录建了一个Dockerfile文件
Dockerfile内容如下:
from tomcat:latest
copy ./docker-registry-demo.war /usr/local/tomcat/webapps/
本次dockerfile的内容特别简单,就两句话,第一句是依赖基础镜像tomcat,因为我们的项目是要在tomcat中运行的,第二句是将当前路径的war拷贝到tomcat容器的webapps下面。之后我们使用构建镜像的,命令直接构建就行了。
使用命令:docker build -t docker-registry-demo .
注意这里的.指的是上下文路径,上下文路径是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。我们看到构建步骤一就是在发送这个上下文环境到镜像文件中,第三步的copy也是在上下文环境中找到这个war。
我们的项目已经构建成一个镜像文件了,通过docker images命令可以查看所有的镜像文件,接下来就是运行这个文件,即容器启动。