前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自主可控:基于OpenEuler基础镜像的Go语言容器开发环境搭建

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

作者头像
耕耘实录
发布2023-06-10 14:28:22
3580
发布2023-06-10 14:28:22
举报
文章被收录于专栏:耕耘实录耕耘实录

一 背景

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

二 操作步骤

2.1 准备基础软件包

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

代码语言:javascript
复制
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
复制
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
复制
#!/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
复制
docker build -t go:1.20.4 .

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

2.5 启动容器

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

代码语言:javascript
复制
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
复制
ssh ivan@192.168.1.1 -p 2024

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 背景
  • 二 操作步骤
  • 2.1 准备基础软件包
    • 2.2 编写Dockerfile
    • 2.3 编写docker-entrypoint.sh
    • 2.4 镜像构建
    • 2.5 启动容器
    • 2.6 登录环境
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档