Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker可以让开发者打包自己的项目以及项目所需要用到的依赖包到一个轻量级、可移植的容器当中,并且这个容器可以发布到任何流行的linux机器上,也可以实现虚拟化
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
Docker的特点
Docker作为当前主流的开源容器引擎,特点主要如下
1、更快地交付和部署
开发者可以使用一套标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器以及快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器轻,且启动速度快,可以大量地节约开发、测试和部署的时间。
2、更高效的虚拟化
Docker 容器在运行时,不需要额外的虚拟机程序的支持。由于它是内核级的虚拟化,所以可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机和服务器等。这种良好的兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个平台,十分有利于应用的迁移和扩展。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker和虚拟机的区别
Docker部署项目完整过程
我使用Docker部署的是golang的项目,其他语言项目也是一样的步骤,只是Dockerfile文件中需要修改一些命令
1、golang项目源码,写了一个很简单的接口
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main(){
router := gin.Default()
router.GET("/app",func(ctx *gin.Context){
ctx.JSON(http.StatusOK,gin.H{
"code" : 0,
"message" : "success",
})
})
router.Run(":8080")
return
}
2、先运行项目,然后测试一下接口是否可用
3、此时项目就已经启动起来了,游览器访问一下,先不用管Dockerfile文件是什么,后面会说到
4、当项目可以正常运行时就可以进行构建自己的镜像了,当然在构建镜像之前少不了Dockerfile文件,因为构建镜像时会去解析Dockerfile文件
这里的Dockerfile文件就是我这个项目需要配置的Dockerfile文件
5、Dockerfile是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像
docker build 命令用于从Dockerfile构建映像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的 Dockerfile。
所以Dockerfile文件的配置至关重要,我把上面的命令详细解释一下
(1)#Dockerfile:用来标记这是Dockerfile文件,可写可不写,写上的话必须要用#注释、
(2)From 后面跟母镜像:例如我们这个项目是golang,所以就一定需要golang的依赖环境,对于每个语言都有自己的依赖环境 镜像,golang就可以使用golang:latest这个镜像,当然前提是自己的docker中必须有这个镜像,没有的话可以自己拉取一下
这个截图就是我的docker中存在的镜像,golang代表镜像名称,latest代表版本号,如果没有golang这个镜像,就需要用到以下命令自动会下载的
docker pull golang
(3)WORKDIR /app:想当于创建app这个文件夹,在构建镜像时,指定镜像的工作目录,这个工作目录名字可以自取
(4)COPY . /app:把当前golang项目拷贝到镜像的工作目录
(5)EXPOSE:指定容器要暴露的端口,就是golang项目侦听的端口,我这里是8080
(6)ENV :配置坏境变量,我当前环境变量是随便给的
(7)CMD:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
因为我目前是把golang项目build出来了一个main程序,所以直接使用./main即可执行程序,具体的Dockerfile详解可以自己上网查一下
6、Dokcerfile配置好以后就可以进行构建镜像了
docker build -t myapp:v1.0.0 .
myapp是自己指定镜像名称,v1.0.0是版本号,也可自己指定,最后面的 . 是需要构建项目的路径
7、此时镜像已经构建成功了,需要把他运行起来
查看镜像命令是
docker images
运行该镜像
docker run -d -p 8080:8080 myapp:v1.0.0
-d是让放到后台去运行
-p是指定端口号,左边的是游览器访问时使用的端口号,可任意给,而右边的则是项目侦听的端口号,不可更改
myapp:v1.0.0,是镜像名称+版本号,是指定此镜像运行,也可用镜像ID
注意:此时端口号显示出来才代表运行成功
查看正在运行的容器
docker ps
8、此时该镜像的容器就已经运行起来了,我们可以测试一下
此时项目已经用docker部署成功
具体更多的docker使用命令可以自行去查看
————————————————
原文作者:钢钢钢很不爽