容器如今应用的愈来愈多了,不懂这个都很差意思说本身是个程序员了。这篇文章就给你们带来一个简单易懂的Docker入门。程序员
你们可能用过虚拟机,Vmware之类的,感受和容器差很少,都是“虚拟化一台机器”。那咱们先解释下,Docker和虚拟机有啥区别,先上图:golang
虚拟机在被建立的时候,宿主机会模拟出一台真实机器所须要的全部资源,包括硬件。一旦开启,预分配给它的资源会被彻底占用。每一台虚拟机都拥有一套完整的独立的用户操做系统。docker
容器就不同了,它不是模拟一个完整的操做系统,而是对进程进行隔离。容器包含了应用和它全部的依赖包,可让资源在受到隔离的进程中运行应用程序。容器和容器之间是共享内核的。bash
其实从上面的说明就能够看出来了,容器比虚拟机须要的资源更少,带来的优点包括更快的启动,一样硬件条件下能运行的实例数量远高于虚拟机等等。而Docker则是对容器技术进行的一种封装,它是目前最流行的容器解决方案。服务器
镜像是Docker容器的模板。它看起来像一个文件系统,提供了容器运行的时候所须要的程序、库、配置、环境变量等。镜像不包含任何动态数据,其内容在构建以后也不会被改变。架构
容器是能够独立运行的一个或一组应用。app
仓库是存放镜像文件的地方,概念相似Git。而仓库注册服务器(Registry)能够理解为代码仓库(Github)。ui
简单的说,咱们把应用还有须要的环境配置等,“打包”成一个镜像,这个镜像就存在于本地的仓库中。须要运行应用的时候,将容器指定到对应的镜像去运行就能够了。 DockerHub上有很多基础镜像,均可以直接拿来用。spa
若是想从0开始构建本身的镜像,咱们就须要本身编写Dockerfile了,下面贴了一个例子。操作系统
FROM golang:latest
WORKDIR $GOPATH/go-app
COPY . $GOPATH/go-app
RUN go build .
EXPOSE 8000
ENTRYPOINT ["./go-app"]
复制代码
下面说说这几行都干了啥:
有了这些命令,接下来咱们就能经过docker build命令构建本身的镜像了。
"-t" 指定了镜像的名称 "." 表示当前构建的目录。如今咱们能够经过docker images命令,查看已经构建完成的镜像。
有了镜像,咱们如今就能够用来运行容器了。
"-p port1:port2" 指定了端口映射,port1是宿主机,port2是容器端口。"go-app"是咱们建立的镜像名称。
这个例子就完了,So easy~
以上只是一个简单的入门,后续会带来更多Docker实战内容。