简单易懂的Docker入门

646 阅读3分钟

    容器现在应用的越来越多了,不懂这个都不好意思说自己是个程序员了。这篇文章就给大家带来一个简单易懂的Docker入门。

容器和虚拟机

    大家可能用过虚拟机,Vmware之类的,感觉和容器差不多,都是“虚拟化一台机器”。那我们先解释下,Docker和虚拟机有啥区别,先上图:

容器与虚拟机

    虚拟机在被创建的时候,宿主机会模拟出一台真实机器所需要的所有资源,包括硬件。一旦开启,预分配给它的资源会被完全占用。每一台虚拟机都拥有一套完整的独立的用户操作系统。

    容器就不一样了,它不是模拟一个完整的操作系统,而是对进程进行隔离。容器包含了应用和它所有的依赖包,可以让资源在受到隔离的进程中运行应用程序。容器和容器之间是共享内核的。

    其实从上面的说明就可以看出来了,容器比虚拟机需要的资源更少,带来的优势包括更快的启动,同样硬件条件下能运行的实例数量远高于虚拟机等等。而Docker则是对容器技术进行的一种封装,它是目前最流行的容器解决方案。

Docker的一些概念

Docker架构

镜像(Image)

镜像是Docker容器的模板。它看起来像一个文件系统,提供了容器运行的时候所需要的程序、库、配置、环境变量等。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器(Container)

容器是可以独立运行的一个或一组应用。

仓库(Repositry)

仓库是存放镜像文件的地方,概念类似Git。而仓库注册服务器(Registry)可以理解为代码仓库(Github)。


简单的说,我们把应用还有需要的环境配置等,“打包”成一个镜像,这个镜像就存在于本地的仓库中。需要运行应用的时候,将容器指定到对应的镜像去运行就可以了。 DockerHub上有不少基础镜像,都可以直接拿来用。

从零开始的Docker部署

Dockerfile

如果想从0开始构建自己的镜像,我们就需要自己编写Dockerfile了,下面贴了一个例子。

FROM golang:latest

WORKDIR $GOPATH/go-app
COPY . $GOPATH/go-app
RUN go build .

EXPOSE 8000
ENTRYPOINT ["./go-app"]

下面说说这几行都干了啥:

  1. FROM 指定了基础镜像,这是必须要有的指令,而且是第一条。
  2. WORKDIR <工作目录> 指定了工作目录。若目录不存在,会自动创建。
  3. COPY <源路径> <目标路径> 将构建上下文目录中的源路径里面的文件,复制到镜像的目标路径的位置。
  4. RUN 执行命令
  5. EXPOSE 声明运行时容器提供的服务端口。(只是一个声明,运行的时候不会开这个端口)
  6. ENTRYPOINT 指定容器启动程序和参数

构建镜像

有了这些命令,接下来我们就能通过docker build命令构建自己的镜像了。

"-t" 指定了镜像的名称 "." 表示当前构建的目录。现在我们可以通过docker images命令,查看已经构建完成的镜像。

运行容器

有了镜像,我们现在就可以用来运行容器了。

"-p port1:port2" 指定了端口映射,port1是宿主机,port2是容器端口。"go-app"是我们创建的镜像名称。

这个例子就完了,So easy~

综上

以上只是一个简单的入门,后续会带来更多Docker实战内容。