Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自主可控:基于OpenEuler基础镜像的Go语言容器开发环境搭建

自主可控:基于OpenEuler基础镜像的Go语言容器开发环境搭建

作者头像
耕耘实录
发布于 2023-06-10 06:28:22
发布于 2023-06-10 06:28:22
52400
代码可运行
举报
文章被收录于专栏:耕耘实录耕耘实录
运行总次数:0
代码可运行

一 背景

从国家层面来说,信息技术已经在国家安全中扮演着越来越重要的角色。通过实现自主可控,可以保护国家的核心技术和关键数据,避免被外部势力窃取或滥用。从我们个人层面来说,自主可控可以保护个人隐私,避免个人信息被滥用或泄露。这对社会稳定和个人权利保护都有重要意义。OpenEuler 是一个开源项目,由华为发起成立于 2019 年。它是一个基于 Linux 操作系统的企业级操作系统,旨在提供高性能、高可靠性、高安全性和易于使用的用户体验。OpenEuler 的出现积极响应了国家自主可控、国产替代等政策需求,同时也是中国开源社区发展进程中具有里程碑式意义的事件。为了响应国家自主可控的号召,我们使用基于OpenEuler操作系统来搭建Go语言开发环境。

二 操作步骤

2.1 准备基础软件包

最新的Go语言SDK可在https://go.dev/dl/进行下载,下载命令可参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L -C - -O https://go.dev/dl/go1.20.4.linux-amd64.tar.gz

2.2 编写Dockerfile

本次镜像构建基于OpenEuler 20.03-sp3-lts,开发环境安装了SSH服务、rsync、make、gdb等工具,Dockerfile如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM openeuler:20.03-lts-sp3

COPY [ "docker-entrypoint.sh", "/usr/local/bin" ]
ADD ["go1.20.4.linux-amd64.tar.gz", "/usr/local/"]

RUN set -eu; \
    yum -y install openssh-server \
    rsync \
    make \
    gdb; \
    ssh-keygen -A; \
    yum clean all; \ 
    chmod +x /usr/local/bin/*; \
    mkdir /var/run/sshd /root/workspace

FROM scratch

COPY --from=0 / /

# 区时设置
ENV TZ="Asia/Shanghai" \
    LANG="zh_CN.UTF-8"

# SSH默认设置,用户名、组默认均为dev,密码为:dev12345,GID为1000
ENV SSH_USERNAME="dev" \
    SSH_PASSWD="dev12345" \
    SSH_UID="1000" \
    SSH_GROUP="dev" \
    SSH_GID="1000"

# GO语言相关环境变量设置
ENV GOPATH="/workspace" \
    GOROOT="/usr/local/go" \
    GOPROXY="https://goproxy.cn,direct" \
    GO111MODULE="auto" \
    GOBIN="/workspace/bin"

# 设置系统环境变量
ENV PATH="$GOROOT/bin:$GOBIN:$PATH"

WORKDIR /workspace

ENTRYPOINT [ "docker-entrypoint.sh" ]

EXPOSE 22

CMD [ "/usr/sbin/sshd", "-D" ]

2.3 编写docker-entrypoint.sh

容器主进程运行前,完成环境配置。具体内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
go version
gdb -v
make -v
groupadd -g ${SSH_GID} ${SSH_GROUP}
useradd -d /home/${SSH_USERNAME} -m -c "Golang development environment." -u ${SSH_UID} -g ${SSH_GID} -s /bin/bash ${SSH_USERNAME}
echo "${SSH_USERNAME}:${SSH_PASSWD}" | chpasswd
[ ! -d /workspace ] && mkdir /workspace
mkdir "${GOPATH}/src" "${GOPATH}/bin" "${GOPATH}/pkg"
chown -R ${SSH_USERNAME}:${SSH_GROUP} /workspace
exec "$@"

脚本中根据环境变量传入的值完成用户添加、权限配置,确保在容器运行后主机用户与容器内用户权限一致。配合容器启动命令,在主机和容器内均有相同的权限。

2.4 镜像构建

镜像构建前需确认构建目录内Dockerfile、docker-entrypoint.sh、go1.20.4.linux-amd64.tar.gz等三个文件已存在,执行构建命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker build -t go:1.20.4 .

构建完成后,在镜像仓库能够看到go:1.20.4的镜像。

2.5 启动容器

在容器启动时,需按要求完成相关的环境变量传入,如不传入相关环境变量,则会默认使用默认值,可能导致容器内部与主机上的权限不一致的情况。默认主机用户不直接使用root权限执行docker命令,启动命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d --restart always \
    --hostname develop -e SSH_UID=`id -u` \
    -e SSH_GID=`id -g` -e SSH_USERNAME=`whoami` \
    -e SSH_PASSWD="D*r#1a2b" -e SSH_GROUP=`id -g -n` \
    --name golang-development-environment \
    -v ${HOME}/workspace/go:/workspace \
    -p 2024:22 go:1.20.4

2.6 登录环境

本例中暴露的端口为2024,在登录ssh服务时需将端口指定为2024。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ssh ivan@192.168.1.1 -p 2024

按提示输入密码即可登录,192.168.1.1为本机IP。所有坑我都替大家踩过了,快去试试吧!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS8.4.2105 和 OpenEuler 20.03 下 C++ 编译环境容器镜像构建
CentOS7.x 支持的 gcc 和 g++ 版本太低,使用 CentOS 8.x 进行替换,但在实际操作的过程中,使用yum进行依赖更新,出现报错,写此文以记录。
耕耘实录
2022/11/30
6630
在 CLion 远程开发中使用 Docker 快速搭建基于 CentOS 7.4.1708 的 C++ 开发环境
cmake下载地址: https://cmake.org/files/v3.22/cmake-3.22.4-linux-x86_64.tar.gz 构建Dockerfile: FROM centos:7.4.1708 # https://cmake.org/files/v3.22/cmake-3.22.4-linux-x86_64.tar.gz ADD [ "cmake-3.22.4-linux-x86_64.tar.gz", "/usr/local/" ] COPY [ "docker-entrypoi
耕耘实录
2022/05/18
1.6K0
第7节 Go语言环境搭建
当然你也可以登录Golang的国内网站:https://golang.google.cn/
小尘哥
2019/05/28
1.2K0
GO语言开发环境搭建笔记
apm config set https-proxy http://10.16.13.18:8080
老高的技术博客
2022/12/27
3440
Go语言学习(一)| 环境搭建
~/gopath1/src/github.com/xxx~/gopath2/scr/github.com/xxx/usr/local/go/src/github.com/xxx
Mervyn
2020/07/21
6290
Docker 摸门级简易手册
Dockerfile 文件由一系列指令组成。每个指令都描述了构建镜像的某个步骤。Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用来组装映像的所有命令。
双鬼带单
2023/09/11
3340
Docker 摸门级简易手册
GO语言基础之环境搭建
2、安装:下载完成后,Windows版本直接双击安装(记住这个安装地址,后面配置环境变量时需要用到)
墨紫羽墨
2021/12/19
1.9K1
PyCharm采用SSH连接Docker镜像搭建Python开发环境
在Python开发中经常会碰到一些棘手的环境问题,例如:如果开发环境是windows,那么在开发ansible模块的时候,而ansible模块又一般都是安装在linux系统,这时候在windows开发就不好处理了。
Devops海洋的渔夫
2020/06/22
5.8K0
【Java】程序制作Docker镜像 推荐方案
随着我们分布式的观念在各个领域使用,docker容器也逐渐的背大家所认可和使用,那么我们想制作容器就得有镜像如何制作镜像呢?请往下看,Dockerfile就是制作镜像的原始武器: Dockerfile由一行行命令语句组成,并且支持用“#”开头作为注释,一般的,Dockerfile分为四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时执行的指令。
瑞新
2021/12/06
1.9K0
【Java】程序制作Docker镜像 推荐方案
区块链源码学习 : obc-peer 环境搭建 ( 一 )
Star先生
2017/08/07
1.6K2
区块链源码学习 : obc-peer 环境搭建 ( 一 )
Go笔记 1.1 Go开发环境搭建
在 下载页面 页面下载到 Windows 系统下的一键安装包。我目前下载的是“go1.9.windows-amd64.msi”
twowinter
2020/04/17
9970
通过 Docker 实现国产数据库 OpenGauss 开发环境搭建
GS_PASSWORD:必须设置该参数。该参数值不能为空或者不定义。该参数设置了 openGauss 数据库的超级用户 omm 以及测试用户 gaussdb 的密码。openGauss 安装时默认会创建 omm 超级用户,该用户名暂时无法修改。测试用户 gaussdb 是在 entrypoint.sh 中自定义创建的用户。openGauss 镜像配置了本地信任机制,因此在容器内连接数据库无需密码,但是如果要从容器外部(其它主机或者其它容器)连接则必须要输入密码。openGauss 的密码有复杂度要求,需要:密码长度 8 个字符及以上,必须同时包含英文字母大小写,数字,以及特殊符号。
耕耘实录
2024/05/24
5380
Go安装以及开发环境搭建
如果你下载的是msi类型的安装包,那么直接安装即可,会自动帮你设置好环境变量。如果是zip类型的压缩包,那么需要设置两个环境变量,以压缩包解压到F盘根目录为例:
晓晨
2019/08/29
8620
Go安装以及开发环境搭建
Dockerfile 与 Compose 环境搭建学习笔记(二)
上一篇文章对整体结构进行了简单记录,这一篇介绍下关于Dockerfile自定义镜像以及各个服务的配置。
大愚
2018/09/13
1K0
Dockerfile 与 Compose 环境搭建学习笔记(二)
基于docker的生信基础环境镜像构建
这里参考snakemake的写法,每个分析步骤创建一个yaml文件,里面是用到的软件及版本。首次运行检测该步骤环境存在,不存在先安装软件初始化。
SliverWorkspace
2022/08/11
1.4K0
基于docker的生信基础环境镜像构建
统信服务器操作系统V20 1070e 【dockerfile 构建镜像】
dockerFile 是一个文本文件,它包含了一系列的指令,这些指令用于自动化构建 docker 镜像的过程。docker 镜像是只读模板,可以用来创建 docker 容器的实例。dockerfile 使得开发者可以定义一个镜像的构建过程,而这个镜像可以被用来批量部署应用程序和服务。
Kevin song
2024/07/04
5150
统信服务器操作系统V20 1070e 【dockerfile 构建镜像】
开发容器:可重用的开发环境
作者 | Avdi Grimm 译者 | 明知山 策划 | 丁晓昀 拿着 Chromebook 在洗车房做开发 那天,我把车开到了洗车场。这是一个高级洗车场,你把车交给工作人员,然后等着他们把车里里外外清洗干净。 我要做的就是打发时间了。我还有一些代码要写,但当时我只有一台装在包里的小 Chromebook 和 WiFi 连接。 于是,我在 GitHub Codespaces 中打开了这个项目,然后在上次停下的地方继续,在云端运行我的开发环境。 不只是编辑器,而是整个为我的项目定制的虚拟机。
深度学习与Python
2023/04/01
1.3K0
开发容器:可重用的开发环境
Go语言开发环境搭建
2、在其他目录执行 go build 需要在后面加上项目路径,路径从项目src目录后面写
极客运维圈
2020/03/23
9960
Docker下MySQL主从三部曲之二:细说镜像制作
本文是《Docker下MySQL主从三部曲》系列的第二篇,上一篇《Docker下MySQL主从三部曲之一:极速体验》我们轻而易举的搭建了MySQL主从同步环境,凭借的是一个docker-compose.yml脚本,今天我们一起来看看这个脚本相关的技术细节,学习如何制作支持MySQL主从同步镜像;
程序员欣宸
2022/05/06
7340
Docker下MySQL主从三部曲之二:细说镜像制作
第一章 Docker环境搭建
学习Docker,免不了的就是搭建环境了。搭建环境是一个复杂的工程,而且还是相当费时间的,不过话又说回来了,磨刀不误砍柴工嘛,光有理论是不够的,还需要自己动手实践才行。
Librant
2018/11/26
2.8K1
推荐阅读
相关推荐
CentOS8.4.2105 和 OpenEuler 20.03 下 C++ 编译环境容器镜像构建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验