Docker部署golang微服务项目实践教程

2023-04-1909:42:35服务器及运维Comments1,043 views字数 2380阅读模式
Docker部署golang微服务项目实践教程

Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker可以让开发者打包自己的项目以及项目所需要用到的依赖包到一个轻量级、可移植的容器当中,并且这个容器可以发布到任何流行的linux机器上,也可以实现虚拟化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker的特点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker作为当前主流的开源容器引擎,特点主要如下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

1、更快地交付和部署文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

开发者可以使用一套标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 可以快速创建容器以及快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker容器轻,且启动速度快,可以大量地节约开发、测试和部署的时间。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

2、更高效的虚拟化文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker 容器在运行时,不需要额外的虚拟机程序的支持。由于它是内核级的虚拟化,所以可以实现更高的性能和效率。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

3、更轻松的迁移和扩展文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人计算机和服务器等。这种良好的兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个平台,十分有利于应用的迁移和扩展。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

4、更简单的管理文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker和虚拟机的区别文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

Docker部署项目完整过程文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

我使用Docker部署的是golang的项目,其他语言项目也是一样的步骤,只是Dockerfile文件中需要修改一些命令文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

1、golang项目源码,写了一个很简单的接口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

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、先运行项目,然后测试一下接口是否可用文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

3、此时项目就已经启动起来了,游览器访问一下,先不用管Dockerfile文件是什么,后面会说到文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

4、当项目可以正常运行时就可以进行构建自己的镜像了,当然在构建镜像之前少不了Dockerfile文件,因为构建镜像时会去解析Dockerfile文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

这里的Dockerfile文件就是我这个项目需要配置的Dockerfile文件文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

5、Dockerfile是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker build 命令用于从Dockerfile构建映像。可以在 docker build 命令中使用 -f 标志指向文件系统中任何位置的 Dockerfile。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

所以Dockerfile文件的配置至关重要,我把上面的命令详细解释一下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(1)#Dockerfile:用来标记这是Dockerfile文件,可写可不写,写上的话必须要用#注释、文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(2)From 后面跟母镜像:例如我们这个项目是golang,所以就一定需要golang的依赖环境,对于每个语言都有自己的依赖环境 镜像,golang就可以使用golang:latest这个镜像,当然前提是自己的docker中必须有这个镜像,没有的话可以自己拉取一下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

这个截图就是我的docker中存在的镜像,golang代表镜像名称,latest代表版本号,如果没有golang这个镜像,就需要用到以下命令自动会下载的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker pull golang

(3)WORKDIR /app:想当于创建app这个文件夹,在构建镜像时,指定镜像的工作目录,这个工作目录名字可以自取文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(4)COPY . /app:把当前golang项目拷贝到镜像的工作目录文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(5)EXPOSE:指定容器要暴露的端口,就是golang项目侦听的端口,我这里是8080文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(6)ENV :配置坏境变量,我当前环境变量是随便给的文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

(7)CMD:指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

因为我目前是把golang项目build出来了一个main程序,所以直接使用./main即可执行程序,具体的Dockerfile详解可以自己上网查一下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

6、Dokcerfile配置好以后就可以进行构建镜像了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker build -t myapp:v1.0.0 .

myapp是自己指定镜像名称,v1.0.0是版本号,也可自己指定,最后面的 . 是需要构建项目的路径文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

7、此时镜像已经构建成功了,需要把他运行起来文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

查看镜像命令是文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker images

运行该镜像文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker run -d -p 8080:8080 myapp:v1.0.0

-d是让放到后台去运行文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

-p是指定端口号,左边的是游览器访问时使用的端口号,可任意给,而右边的则是项目侦听的端口号,不可更改文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

myapp:v1.0.0,是镜像名称+版本号,是指定此镜像运行,也可用镜像ID文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

注意:此时端口号显示出来才代表运行成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

查看正在运行的容器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

docker ps
Docker部署golang微服务项目实践教程

8、此时该镜像的容器就已经运行起来了,我们可以测试一下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

Docker部署golang微服务项目实践教程

此时项目已经用docker部署成功文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

具体更多的docker使用命令可以自行去查看文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

————————————————文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

原文作者:钢钢钢很不爽文章源自菜鸟学院-https://www.cainiaoxueyuan.com/yunwei/35732.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/yunwei/35732.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定