• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Docker使用 | 青训营

武飞扬头像
Lird
帮助4

Docker使用 | 青训营

什么是Docker ---- Docker类似一种虚拟机

学新通

通过架构图我们可以看到docker是在操作系统(OS)上面的一层,他不会像虚拟机一样模拟整个OS,所以在可以保证虚拟化的功能的前提下,他比虚拟机更加轻量。同时能保证在任意的环境都能运行,即与OS隔离

基本概念

docker种存在几个比较重要的概念

此处不讲解具体内部细节

只讲怎么简单方便的理解和使用

  • 容器(Container)
  • 镜像(Image)
  • 数据卷(Volume)

容器

容器就可以看作一个个小的虚拟机,上面模拟这一个系统,运行着程序,对外提供服务

镜像

容器的一个备份,方便让别人使用

数据卷

容器和宿主主机的共享文件夹

下载安装

Windows

Docker: Accelerated, Containerized Application Development

去官网,然后下载Docker Desktop安装即可

Linux

Install Docker Engine | Docker Documentation

按照这个文档来按照

以Ubuntu举例子

Ubuntu
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt-get update
  sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
验证
sudo docker run hello-world

用docker部署go

一个简单的go项目

// main.go
package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()
	r.GET("/ping", func(ctx *gin.Context) {
		ctx.JSON(http.StatusOK, gin.H{
			"message": "pong",
		})
	})
	r.Run()
}

// go.mod
module docker-example

go 1.20

这样我们的一个简单的http应用就做好了,通过GET请求,请求http://localhost:8080/ping

就会返回一个json

测试一下

运行

go run .

在浏览器打开http://localhost:8080/ping

学新通

成功

然后关闭

但是如果我需要这个服务一直运行,而不是关闭bash就停止,那么就需要用docker了

Dockerfile

通过编写Dockerfile我们可以构建自己的镜像,然后运行(搞个虚拟机一直运行我们的go程序)

我们在go.mod的同级目录下创建一个Dockerfile

├── Dockerfile
├── go.mod
└── main.go

然后我们在Dockerfile中写入一下内容

FROM golang:1.20
ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct" \
    GO_MODE=release
WORKDIR /app
ADD . /app
RUN go build .
ENTRYPOINT ["./docker-example"]

我们来一行行解释

FROM  golang:1.20

我们需要编译运行go程序,所以我们需要基于golang这个docker image来构建我们的程序

ENV GO111MODULE=on \
    GOPROXY="https://goproxy.cn,direct" \
    GO_MODE=release

我们需要设定一些环境变量让go顺利编译,同时因为是生产环境,所以GO_MODE=release

WORKDIR /app

WORKDIR表示在Container中我们程序的工作目录

ADD . /app

.目录下的所有文件添加到Container中的/app目录下

RUN go build .

RUN就是在WORKDIR目录下执行命令,即在/app目录下执行go build .

构建镜像

sudo docker build -t docker-example .

-t 表示构建的镜像的标签(tag)也就是名字

.表示Dockerfile的位置

运行镜像

sudo docker run -d -p 9999:8080 docker-example

-d 表示后台运行 即退出bash以后也不会停止运行

-p 指定端口将container内部的8080端口放到宿主机的9999端口

这个时候我们再去访问http://localhost:9999/ping

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhaggc
系列文章
更多 icon
同类精品
更多 icon
继续加载