首页 > 其他分享 >云原生之旅 - 2)Docker 容器化你的应用

云原生之旅 - 2)Docker 容器化你的应用

时间:2022-09-20 20:26:14浏览次数:100  
标签:原生 hub 之旅 https go Docker com docker

前言

上文中我们用Golang写了一个HTTP server,本篇文章我们讲述如何容器化这个应用,为后续部署到kubernetes 做准备。

 

关键词:Docker, Containerization, Golang, 容器化, Docker Hub login, Container Registry, 容器仓库,云原生

 

Dockerfile

我们采用Docker分阶段构建方式来编写Dockerfile, 这种做法的最大好处就是缩小image的大小。

第一阶段构建如下,目的编译出我们的可执行二进制文件。

# Use the offical golang image to create a binary.
# This is based on Debian and sets the GOPATH to /go.
# https://hub.docker.com/_/golang
FROM golang:1.18-buster as builder

# Create and change to the app directory.
WORKDIR /app

# Retrieve application dependencies.
# This allows the container build to reuse cached dependencies.
# Expecting to copy go.mod and if present go.sum.
COPY go.* ./
RUN go mod download

# Copy local code to the container image.
COPY . ./

# Build the binary.
RUN go build -mod=readonly -v -o server

如果没有VPN,那么需要添加 GOPROXY, 例如

RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod download

 

进入第二阶段构建,真正的构建出生产用的镜像,代码如下:

注意 COPY  --from=builder ,这里的 builder 和第一阶段的 as builder 是一一对应的

# Use the official Debian slim image for a lean production container.
# https://hub.docker.com/_/debian
# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds
FROM debian:buster-slim
RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# Copy the binary to the production image from the builder stage.
COPY --from=builder /app/server /app/server

# Run the web service on container startup.
CMD ["/app/server"]

 

两个阶段的构建代码都复制到 Dockerfile 如下

 

Build Image

需提前安装好docker, tag 也需要根据自己实际情况修改,wadexu007是我Docker hub的account, demo是 repository名, 1.0.0是镜像tag号

docker build -t wadexu007/demo:1.0.0 .

### https://www.cnblogs.com/wade-xu/p/16708050.html ###

 

Push Image

接下来我们得把Image push到一个镜像仓库,例如 Docker hub, 或者 ECR, GCR, ACR 等公有云平台仓库。也可以用开源的 Harbor 自建仓库。

 

下面介绍 Docker hub

首先到 Docker hub 注册一个账号 https://hub.docker.com

如果有账号直接Sign In

 

点击右上角--> Account Settings

Security --> New Access Tokens

Generate a new one. Then docker login, replace `wadexu007` with your account name.

docker login -u wadexu007

after paste access token

Login Succeeded

 

也可以查看docker config.json 或者直接编辑。

第二个就是我刚刚docker login 之后的配置。第一个是我本机 GCR - Google Cloud Registry,第三个是JCR - 京东云的Registry

% cat ~/.docker/config.json
{
    "auths": {
        "asia.gcr.io": {
            "auth": "xxx"
        },
        "https://index.docker.io/v1/": {
            "auth": "xxx"
        },
        "xxx-cn-north-1.jcr.service.jdcloud.com": {
            "auth": "xxx"
        }
    }
}% 

 

回到 Docker hub控制台, Create repository  创建一个 `demo` repository

 

最后执行 push 命令

把本地image push到远端

docker push wadexu007/demo:1.0.0

 

查看结果

### https://www.cnblogs.com/wade-xu/p/16708050.html ###

Source code

 

感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以打赏和推荐,您的鼓励是我创作的动力。

 

标签:原生,hub,之旅,https,go,Docker,com,docker
From: https://www.cnblogs.com/wade-xu/p/16708050.html

相关文章

  • Docker 基本概念
    Docker包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,就理解了Docker......
  • 降低docker版本
    在安装openstack,执行自己写的自动化安装脚本后,在docker.service里配置了etcd后,发现docker起不来[root@os19docker]#yumlistinstalled|grepdockerRepositoryepel......
  • 将SpringBoot项目发布到Docker
    1.创建springboot项目packagecom.test.demo.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.GetMap......
  • 只需 6 步,你就可以搭建一个云原生操作系统原型
    简介: 当云原生和操作系统这两个热点话题相遇的时候,会发生什么故事?编者按:过去的三年对基础软件领域来说是不平凡的三年,是波涛汹涌的三年。随着国际形势和行业格......
  • 云原生底座之上,顺丰智慧供应链领跑的秘密
    摘要:云原生技术与大数据的结合,带来了物流行业的诸多的变化。本文分享自华为云社区《云原生底座之上,顺丰智慧供应链领跑的秘密》,作者:闫跃龙。假设你是一个大闸蟹的商家,在......
  • Docker基础知识 (12) - 使用 Docker-compose 部署 Nginx + Php/Laravel + MariaDB 项
    Laravel是一套简洁、优雅的PHPWeb开发框架(PHPWebFramework)。Laravel:https://laravel.com/LaravelGitHub:https://github.com/laravel1.部署环境   IP......
  • docker离线安装
    //下载静态包//https://download.docker.com/linux/static/stable///解压tgz包到docker文件夹tar-xzvfdocker.tgz//将docker文件复制到/usr/bin下sudocpdocker/*/us......
  • Docker安装部署Mysql8(以作数据持久化)
    1.创建容器并进行持久化处理#拉取镜像dockerpullmysql:8.0.20#启动镜像,用于拷贝配置文件到宿主机dockerrun-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD=12......
  • 安装配置docker&maven环境
     原文视频:(https://blog.sechelper.com/20220919/code-review/docker-maven-install-guid/)Docker是什么Docker是一个开源的应用容器引擎。Docker可以让开发者打包他们......
  • DockerFile
    Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。具体解释:镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以......