从国家层面来说,信息技术已经在国家安全中扮演着越来越重要的角色。通过实现自主可控,可以保护国家的核心技术和关键数据,避免被外部势力窃取或滥用。从我们个人层面来说,自主可控可以保护个人隐私,避免个人信息被滥用或泄露。这对社会稳定和个人权利保护都有重要意义。OpenEuler 是一个开源项目,由华为发起成立于 2019 年。它是一个基于 Linux 操作系统的企业级操作系统,旨在提供高性能、高可靠性、高安全性和易于使用的用户体验。OpenEuler 的出现积极响应了国家自主可控、国产替代等政策需求,同时也是中国开源社区发展进程中具有里程碑式意义的事件。为了响应国家自主可控的号召,我们使用基于OpenEuler操作系统来搭建Go语言开发环境。
最新的Go语言SDK可在https://go.dev/dl/进行下载,下载命令可参考:
curl -L -C - -O https://go.dev/dl/go1.20.4.linux-amd64.tar.gz
本次镜像构建基于OpenEuler 20.03-sp3-lts,开发环境安装了SSH服务、rsync、make、gdb等工具,Dockerfile如下:
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" ]
在容器主进程运行前,完成环境配置。具体内容如下:
#!/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 "$@"
脚本中根据环境变量传入的值完成用户添加、权限配置,确保在容器运行后主机用户与容器内用户权限一致。配合容器启动命令,在主机和容器内均有相同的权限。
镜像构建前需确认构建目录内Dockerfile、docker-entrypoint.sh、go1.20.4.linux-amd64.tar.gz等三个文件已存在,执行构建命令:
docker build -t go:1.20.4 .
构建完成后,在镜像仓库能够看到go:1.20.4的镜像。
在容器启动时,需按要求完成相关的环境变量传入,如不传入相关环境变量,则会默认使用默认值,可能导致容器内部与主机上的权限不一致的情况。默认主机用户不直接使用root权限执行docker命令,启动命令如下:
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
本例中暴露的端口为2024,在登录ssh服务时需将端口指定为2024。
ssh ivan@192.168.1.1 -p 2024
按提示输入密码即可登录,192.168.1.1为本机IP。所有坑我都替大家踩过了,快去试试吧!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有