基于 Docker 构建自定义 Golang 开发环境

基于 Docker 构建自定义 Golang 开发环境

前言

随着业务发展,软件架构也将逐渐复杂,为进一步提高系统性能,部分业务模块将使用其他语言进行开发。

对开发者而言,使用一台机器完成不同语言、不同版本的开发工作成为一个必须考虑的问题。

为此,许多开发语言可通过配置环境变量进行切换,如 Java、Python、Golang 等。部分开发者使用 Linux(如 Ubuntu、CentOS等)或 MacOS 作为开发环境,更多开发者仍习惯使用(或必须使用)Windows 环境与虚拟机进行远程开发等,都是尽可能将开发环境与生产环境相关联,尽可能减少平台影响。

本文将以 Windows+Docker 进行自定义开发环境配置。

安装 Docker

安装Docker后,可能发生其他不可预测的异常,这些问题是由操作者的机器环境差异导致的,这类问题需要自行解决。

Windows

要在Windows上安装最新版的Docker,请按照以下步骤操作:

  1. 首先,确保你的Windows操作系统版本符合要求。Docker要求Windows 10或更高版本,并且必须启用Hyper-V功能。
  2. 打开Docker官网(https://www.docker.com/products/docker-desktop),点击“下载适用于Windows的Docker Desktop”按钮。
  3. 下载完成后,双击安装文件开始安装。在安装过程中,会要求你允许程序对Windows防火墙进行更改,并安装所需的组件。
  4. 安装完成后,Docker会自动启动。你可以在任务栏的Docker图标上右键单击,选择“Settings”(设置)来配置Docker。
  5. 在“Settings”(设置)窗口中,你可以配置Docker的各种选项,例如启用或禁用实验性功能、配置代理等。
  6. 完成后,你可以打开命令提示符或PowerShell,运行“docker version”命令来验证Docker是否安装成功。

注意:在安装Docker之前,确保已经启用Hyper-V功能。你可以通过打开“控制面板”->“程序和功能”->“启用或关闭Windows功能”来启用Hyper-V功能。

Linux

# 1 查看系统中是否已经安装了 Docker
systemctl status docker
rpm -qa | grep -E "docker"
## 1.1 如果重新安装可以先卸载旧版本 Docker
yum remove docker-ce
rm -rf /var/lib/docker
## 1.2 更新系统包 
yum -y update

# 2 访问如下网站,下载 Docker RPM 包
# https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
# 例如下
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.06.3.ce-3.el7.x86_64.rpm

# 3 安装
yum install docker-ce-18.06.3.ce-3.el7.x86_64.rpm

# 4 启动
systemctl start docker
## 查看信息
docker info

配置国内镜像源

vim /etc/docker/daemon.json

# 添加自己的镜像地址,保存退出
{
  "registry-mirrors": ["https://xxx.mirror.xxx.com"]
}

构建自定义环境

以下构建以 CentOS 为例,其他系统可按实际修改。

CentOS历史版本:

  • 8.5.2111 Kernel 4.18.0-348 Release 2021-11-16
  • 8.4.2105 Kernel 4.18.0-305 Release 2021-06-03
  • 8.3.2011 Kernel 4.18.0-240 Release 2020-12-07
  • 8.2.2004 Kernel 4.18.0-193 Release 2020-06-15
  • 8.1.1911 Kernel 4.18.0-147 Release 2020-01-15
  • 8.0.1905 Kernel 4.18.0-80 Release 2019-09-24
  • 7.9.2009 Kernel 3.10.0-1160 Release 2020-11-12
  • 7.8.2003 Kernel 3.10.0-1127 Release 2020-04-27
  • 7.7.1810 Kernel 3.10.0-1062 Release 2019-09-17
  • 7.6.1810 Kernel 3.10.0-957 Release 2018-12-03
  • 7.5.1804 Kernel 3.10.0-862 Release 2018-05-10
  • 7.4.1708 Kernel 3.10.0-693 Release 2017-09-13
  • 7.3.1611 Kernel 3.10.0-514 Release 2016-12-12
  • 7.2.1511 Kernel 3.10.0-327 Release 2015-12-14
  • 7.1.1503 Kernel 3.10.0-229 Release 2015-03-31
  • 7.0.1406 Kernel 3.10.0-123 Release 2014-07-07

旧环境中,CentOS7.5.1804 使用较多,此处使用其作为示例。

构建基础环境

  1. 创建 Dockerfile
FROM centos:7.5.1804

RUN yum update -y && \
	yum reinstall -y glibc-common && \
	yum install -y net-tools && \
	yum clean all && \
	rm -rf /tmp/* && \
	rm -rf /var/cache/yum/* && \
	ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

CMD ["bash"]
  1. 构建镜像

进行 Dockerfile 同级目录,执行命令获得基础镜像。
可指定该镜像名,如:base/centos:7.5.1804。

docker build -t base/centos:7.5.1804 .
  1. 查看镜像
docker images

构建Golang环境

基于 Golang1.19.3 构建环境

  1. 启动容器
docker run -it -d --privileged=true --cap-add SYS_ADMIN -e container=docker -p 30022:22 -p 30080:80 --name="centos751804-go" base/centos:7.5.1804 /usr/sbin/init
  1. 容器内配置
yum install -y vim
yum install -y lsof wget tree
yum install -y gcc zlib zlib-devel
  1. 配置容器内Golang环境
cd /opt
wget https://studygolang.com/dl/golang/go1.20.11.linux-amd64.tar.gz
tar -xvf go1.20.11.linux-amd64.tar.gz

# 配置环境变量
vi /etc/profile
## export GOROOT=/opt/go
## export PATH=$PATH:$GOROOT/bin
# 可根据实际配置代理
## export GOPROXY=https://goproxy.cn,direct
  1. 停止容器和创建目标镜像

如指定目标镜像名为 base/centos751804:dev-go1.19.3

docker stop centos751804-go
docker commit centos751804-go base/centos751804:dev-go1.20.11
  1. 启动目标容器

如有本地Golang项目,其windows路径为“c:\project\golangProject”,或Linux路径为“/home/user/golangProject”,通过目录挂载到容器指定目录“/app”,可减少文件传输操作。同时,可配置更多端口映射。

docker run -it -d --privileged=true --cap-add SYS_ADMIN -e container=docker -p 30122:22 -p 30180:80 -p 30888:38888 -h "c75-golangProject" -v /c/project/golangProject:/app --name="centos75-go20-project" base/centos751804:dev-go1.20.11 /usr/sbin/init

容器启动后,进入容器执行 go version,若未找到 go 则需手动加载一次环境变量 source /etc/profile

解决 Glibc 版本不匹配问题

开发人员的开发机器 glibc 版本通常较高,而部分稳定版服务器的系统已落后,为兼容旧服务器版本,通常需要针对其进行低版本编译。

如,在 Ubuntu22 中编译 glibc2.17 的低版本 golang 程序等,该操作可使用如上容器内运行的低版本环境进行。

参考

基于 Docker 的几种常用 CentOS7 镜像

centos 各版本发行时间和内核对应列表

Linux 下安装 Golang(适用于1.18及以上版本)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点GDP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值