【openeuler/go容器镜像使用简介】

Quick reference

Go | openEuler

Current Go(Golang) docker images are built on the openEuler. This repository is free to use and exempted from per-user rate limits.

Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction. Go compiles quickly to machine code yet has the convenience of garbage collection and the power of run-time reflection. It's a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language.

Learn more on Go website.

The tag of each Go docker image is consist of the version of Go and the version of basic image. The details are as follows

Tags Currently Architectures
1.17.3-oe2203lts go 1.17.3 on openEuler 22.03-LTS amd64, arm64
1.22.5-oe2203sp4 go 1.22.5 on openEuler 22.03-LTS-SP4 amd64, arm64

Usage

Note: /go is world-writable to allow flexibility in the user which runs the container (for example, in a container started with --user 1000:1000, running go get github.com/example/... into the default $GOPATH will succeed). While the 777 directory would be insecure on a regular host setup, there are not typically other processes or users inside the container, so this is equivalent to 700 for Docker usage, but allowing for --user flexibility.

  • Start a Go instance in your app

    The most straightforward way to use this image is to use a Go container as both the build and runtime environment. In your Dockerfile, writing something along the lines of the following will compile and run your project (assuming it uses go.mod for dependency management):

    复制代码
    # Dockerfile
    FROM openeuler/go:{Tag}
    
    WORKDIR /usr/src/app
    COPY go.mod go.sum ./
    RUN go mod download && go mod verify
    COPY . .
    RUN go build -v -o /usr/local/bin/app ./...
    CMD ["app"]

    You can then build and run the Docker image:

    复制代码
    docker build -t my-golang-app .
    docker run -it --rm --name my-running-app my-golang-app
  • Compile your app inside the Docker container

    There may be occasions where it is not appropriate to run your app inside a container. To compile, but not run your app inside the Docker instance, you can write something like:

    复制代码
    docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.22 go build -v

    This will add your current directory as a volume to the container, set the working directory to the volume, and run the command go build which will tell go to compile the project in the working directory and output the executable to myapp. Alternatively, if you have a Makefile, you can run the make command inside your container.

    复制代码
    docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.22 make
  • Cross-compile your app inside the Docker container

    If you need to compile your application for a platform other than linux/amd64 (such as windows/386):

    复制代码
    docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp -e GOOS=windows -e GOARCH=386 golang:1.22 go build -v

    Alternatively, you can build for multiple platforms at once:

    bash 复制代码
    $ docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.22 bash
    $ for GOOS in darwin linux; do
    >   for GOARCH in 386 amd64; do
    >     export GOOS GOARCH
    >     go build -v -o myapp-$GOOS-$GOARCH
    >   done
    > done
  • View container running logs

    bash 复制代码
    docker logs -f my-go
  • To get an interactive shell

    bash 复制代码
    docker exec -it my-go /bin/bash

Question and answering

If you have any questions or want to use some special features, please submit an issue or a pull request on openeuler-docker-images.

相关推荐
2601_966949656 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨8 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪8 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风8 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_9628857210 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里11 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑12 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl12 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
运维行者_13 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php