基于 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及以上版本)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker提供了几种方式来自定义镜像。其中一种方式是使用docker commit命令,通过已有的容器生成一个新的镜像。例如,可以使用以下命令创建一个新的镜像:docker commit [容器ID] [镜像名称]。另一种方式是使用Dockerfile文件来定义镜像的构建过程,然后使用docker build命令来构建镜像。你可以在Dockerfile中定义诸如安装软件、复制文件等操作,通过运行docker build命令来构建镜像。还可以从本地文件系统导入镜像,例如OpenVZ的模板。除此之外,还可以使用其他方式来自定义镜像,比如使用Docker的API进行编程操作。 举个例子,如果你想构建一个自定义的CentOS镜像,你可以创建一个Dockerfile,然后在其中定义你的构建步骤。比如,你可以使用FROM指令指定基础镜像为CentOS:7,然后使用RUN指令来执行一些命令,比如安装软件、创建文件夹等。最后,使用docker build命令来构建镜像。 另外,还可以使用copy指令将相应的文件复制到自定义镜像中。需要注意的是,copy指令的路径是相对路径,所以被复制的文件需要与Dockerfile在同一目录下。 总结起来,自定义Docker镜像有多种方式,包括使用docker commit命令、编写Dockerfile文件、从本地文件系统导入镜像等。你可以根据具体的需求选择合适的方式来创建你的自定义镜像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Docker自定义镜像](https://blog.csdn.net/m0_47010003/article/details/127834997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【Docker构建自定义镜像](https://blog.csdn.net/weixin_52665939/article/details/128511001)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏洛克·汗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值