由于实训营的伙伴都在问曹大对 Golang
的版本要求问题,所以曹大直接给了一个基于 CentOS
做基础镜像的 Docker
镜像出来。但是编译完之后我发现有些太大了,让我本就贫瘠的磁盘空间不得不删了一部电影才装下它。
DockerHub
上 Golang
的官方镜像目前只有 1.15.X
的版本,而且没有预装 gdb
、dlv
这些上课必须要必备的东西。所以我自己重写了一个基于 Alpine
的上课需要的 Dockerfile
文件
1、Dockerfile 文件如下
# 曹大提供的 Dockerfile
FROM centos
RUN yum install dlv -y \
&& yum install binutils -y \
&& yum install vim -y \
&& yum install gdb -y \
&& yum install git -y \
&& yum install wget -y
RUN wget https://dl.google.com/go/go1.14.12.linux-amd64.tar.gz \
&& tar -C /usr/local -zxvf go1.14.12.linux-amd64.tar.gz \
&& rm /go1.14.12.linux-amd64.tar.gz
ENV PATH /usr/local/go/bin:$PATH
ENV GOPATH /home
ENV GOROOT /usr/local/go
ENV GOPROXY goproxy.cn
基于 Alpine
且安装了 gdb
、dlv
的 Docker
镜像构建文件
# Dockerfile 文件
# 基于 alpine 最新版本作基础镜像
FROM alpine:latest
# 作者名称
MAINTAINER limingshuang lms.minsonlee@gmail.com
# 环境变量
env GOPATH /home
env GOROOT /usr/local/go
env GOPROXY goproxy.cn
env PATH $GOROOT/bin:$GOPATH/bin:$PATH
# 构建镜像
# 1. 修改 alpine 镜像源为阿里云镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
# 2. 安装基础软件和依赖
&& apk add --no-cache --virtual .build-deps wget git tar \
&& apk add --no-cache gdb binutils libc6-compat \
# 3. 下载 golang 1.14.12 && 解压
&& wget -O /tmp/go.tar.gz https://dl.google.com/go/go1.14.12.linux-amd64.tar.gz \
&& tar -C /usr/local -zxvf /tmp/go.tar.gz \
# 4. 安装 dlv
&& echo "140.82.112.4 github.com" >> /etc/hosts \
&& echo "185.199.108.154 github.githubassets.com" >> /etc/hosts \
&& echo "199.232.69.194 github.global.ssl.fastly.net" >> /etc/hosts \
&& git clone https://github.com/go-delve/delve /tmp/delve \
&& cd /tmp/delve/cmd/dlv \
&& go build && go install \
# 4. 清理无用安装文件和缓存文件
&& rm -rf /tmp/* \
&& rm -rf $GOPATH/pkg/* \
&& rm -rf /var/cache/apk/* \
&& rm -rf /var/src/* \
&& apk del .build-deps
# 设置工作目录
WORKDIR $GOPATH
STOPSIGNAL SIGQUIT
2、使用 Dockerfile 构建镜像
docker build -t golearn .


从构建结果可以看出,通过将基础镜像修改为 alpine 并做了一定的优化,成功将镜像大小缩小了近 500M。
3、启动容器
docker run -d -it -v /data/golearn:/home/src --name golearn golearn-alpine
4、进入容器
docker exec -it golearn sh
5、启动一个已经停止的容器
docker start <containerId or containerName>
5、停止的容器
docker stop <containerId or containerName>
-END -
如果你也喜欢这篇文章,请给我留个关注、在看、转发吧。欢迎你在评论区或给我公众号后台留言与我交流~
文章转载自李明双的身边,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




