使用 Docker 镜像构建 GO 语言环境

1. 安装 Docker

我当前使用的系统环境是 CentOS7 ,安装 Docker 使用的命令是 yum install docker*。至于其它系统,可以到百度查找其对应的安装方式。

2. 配置 Docker 镜像仓库的地址

目前来说,直接访问 Docker 官网的 DockerHub 会比较慢, 不过幸好现在国内出现了一些 DockerHub 的加速网站。 下面使用 ustc 加速器。

修改文件 /etc/docker/daemon.json,将其内容修改为

{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

配置完成后,重启 Docker 服务:systemctl restart docker

这样就可以使用 https://docker.mirrors.ustc.edu.cn 加速器了。

如果 ustc 的加速器速度不够快,还可以尝试一下其它的加速器,具体请参考这里 Docker 镜像加速器

3. 下载 golang 的 Docker 镜像

现在就可以下载 golang 的 Docker 镜像了。

在命令行执行命令 docker search golang 就可以查询 golang 镜像的信息了。

$ docker search golang
INDEX       NAME                              DESCRIPTION         STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/golang                  Go (golang) is...   1649      [OK]
docker.io   docker.io/circleci/golang         Go (golang) is...   8
docker.io   docker.io/resin/artik710-golang   Go (golang) is...   1
docker.io   docker.io/resin/artik10-golang    Go (golang) is...   0

可以看到,在查询结果中排名第一的,STARS 数量最多, 并且 OFFICIAL 选项下面是 OK ,说明是官方的,所以理论上应该是更可信的。 所以我们就选择使用第一个了。

执行命令 docker pull docker.io/golang 来下载 golang 的官方镜像吧。

$ docker pull docker.io/golang

[[email protected] golang]$ docker pull docker.io/golang
Using default tag: latest
Trying to pull repository docker.io/library/golang ...
latest: Pulling from docker.io/library/golang
723254a2c089: Extracting [===============================>     ] 40.83 MB/45.12 MB
abe15a44e12f: Download complete
409a28e3cc3d: Download complete
503166935590: Download complete
abe52c89597f: Download complete
ce145c5cf4da: Downloading [===============>                     ] 31.36 MB/104.3 MB
96e333289084: Download complete
39cd5f38ffb8: Download complete
39cd5f38ffb8: Pulling fs layer 

下载好了之后,查看一下镜像的信息 docker images golang

[[email protected] golang]$ docker images golang
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/golang    latest              138bd936fa29        4 weeks ago         733.3 MB

4. 使用 golang 镜像

执行命令 docker run -it --rm golang bash ,测试一下刚刚下载的 golang 镜像

[[email protected] golang]$ docker run -it --rm golang bash
[email protected]:/go# go version
go version go1.9.2 linux/amd64

可以看到,最新的是 1.9.2 版本的。

查看进到容器后的默认目录

[email protected]:/go# pwd
/go

看来是在 /go 目录下面。

不过因为我们在创建容器的时候加了 --rm 参数,所以当我们执行 exit 命令退出容器的时候,这个临时容器会被删除。

那我们如何使用这个 golang 的镜像来工作呢?

5. golang 的 Docker 镜像的一种使用方式

首先,如果我们把文件直接写在 Docker 容器里面的话,那么数据是无法持久化的。 即使可以使用 docker cp 命令这样的方式把我们的文件复制到容器内部, 或者把文件从容器中复制出来,但是在操作的时候仍会有很多不方便的地方。

而且,在 golang 的镜像中进行 build 操作的时候,程序依赖的第三方包, 会被下载到容器的 /go 目录下面。如果每次容器都删除, 或者每次创建新的容器的时候,都需要从网络上拉取一次第三方包。 如果网速快的话还好,否则时间浪费的有点儿严重。

所以,我们要把主机的目录映射到容器中,这样就可以把文件进行持久化了。

我们可以使用 docker 命令的 -v 参数,把主机的目录映射到容器中。 不过只使用 -v 参数的话,在容器内部操作目录会有权限限制, 所以还需要增加 --privileged 参数给容器放权。

[[email protected] golang]$ pwd        # 查看当前所在的目录
/root/golang
[[email protected] golang]$ ls -l      # 查看当前目录下的子目录和文件等
total 0
drwxrwxrwx. 2 root root 6 Jan 10 01:19 code
drwxrwxrwx. 2 root root 6 Jan 10 01:20 go
[[email protected] golang]$ docker run \    # 执行 docker 命令,创建一个新的容器并运行这个容器
> -it \                               # 使用交互模式
> --rm \                              # 当退出这个容器时,系统自动删除这个容器
> -v /root/golang/go:/go \            # 把主机的目录 ‘/root/golang/go‘ 映射为容器内的目录 ‘/go‘
> -v /root/golang/code:/code \        # 把主机的目录 ‘/root/golang/code‘ 映射为容器内的目录 ‘/code‘
> --privileged \                      # 给这个容器超级权限,否则无法操作上面映射进去的两个目录
> docker.io/golang \                  # 基于镜像 ‘docker.io/golang‘ 创建容器
> bash                                # 在容器内执行命令 ‘bash‘
> [email protected]:/go#              # 已经进入容器了

我们可以在容器的目录 /go 和目录 /code 里面创建一些文件, 然后返回主机查看。

[email protected]:/go# echo "hello" > /go/h.txt     # 在容器内,创建文件 ‘/go/h.txt‘ 并写入数据
[email protected]:/go# echo "world" > /code/w.txt   # 在容器内,创建文件 ‘/code/w.txt‘ 并写入数据
[email protected]:/go# exit                         # 退出容器
exit
[[email protected] golang]# find                          # 已经回到主机了。在主机的 ‘/root/golang‘ 目录下查看文件
.
./code
./code/w.txt                                        # 可以看到文件 ‘w.txt‘
./go
./go/h.txt                                          # 以及文件 ‘h.txt‘
[[email protected] golang]# cat go/h.txt
hello
[[email protected] golang]# cat code/w.txt
world

使用上面的方法,每次创建了容器,都会把主机上指定的目录映射到容器中,修改的数据也会反映到主机上。

6. 方便以后查阅和直接使用,完整命令如下

开启容器

docker run -it --rm -v /root/golang/go:/go -v /root/golang/code:/code --privileged docker.io/golang bash


同步发表:https://www.fengbohello.top/archives/go-env-docker

原文地址:https://www.cnblogs.com/fengbohello/p/8259904.html

时间: 2024-08-03 13:56:39

使用 Docker 镜像构建 GO 语言环境的相关文章

Docker镜像构建

一.docker镜像构建 1.环境准备 环境准备 IP 主机名 操作系统 192.168.56.11 linux-node1 centos7 注意:我这里使用的是centos7,如果是使用centos5或者centos6,需要升级操作系统内核,否则Docker的许多新功能都无法使用 2.构建方式 - 手动构建 - 自动构建,(通过Dockerfile方式) 3.删除原有镜像 为了防止干扰,将以前创建的容器全部删掉. 切记 切记 切记:生产环境慎用.  否则真的会发生  从删除到跑路... 获取容

龙芯GO!龙芯平台上构建Go语言环境指南

龙芯软件生态系列——龙芯GO!龙芯平台上构建Go语言环境指南2016-07-05 龙芯中科1初识Go语言Go语言是Google公司于2009年正式推出的一款开源的编程语言,是由Robert Griesemer.KenThompson和Rob Pike等世界顶尖计算科学家精心打造的系统编程语言.Go语言最显著的特点是编码简洁迅速.支持高效并发和自动内存管理等.此外,Go语言还面向网络服务器.存储系统和数据库等领域的编程进行了优化设计,并且简化了应用系统的安装和部署.因此,Go语言受到了广大程序员的

Docker镜像构建的优化总结

Docker镜像构建的优化总结 随着我们对docker镜像的持续使用,在此过程中如果不加以注意并且优化,镜像的体积会越来越多.很多时候我们在使用docker部署应用时,会发现镜像的体积至少有1G以上.镜像体积的增大,不单单会增加磁盘资源与网络资源的开销,也会影响应用的部署效率,使得应用的部署时间会越来越长.因此我们需要减少部署镜像的体积以加快部署效率,降低资源的开销.而对于镜像的优化,可以通过对dockerfile的优化来实现. 一.镜像最小化 1.选择最精简的基础镜像 选择体积最小的基础镜像可

Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器

我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构建镜像并发布到远程docker服务器会非常方便.相关步骤参考如下: step1.开启docker服务器的tcp管理端口,这里以2375为例进行说明.具体的配置过程请参考另一篇博客:https://www.cnblogs.com/funnyboy0128/p/9983779.html step2.在本

asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加user数据库,添加tbusers表 2.创建asp.net core webapi 应用程序 参考Docker 为 ASP.NET Core WebApi 应用程序生成 Docker 映像,创建容器并运行,地址 http://www.cnblogs.com/heyangyi/p/9323407.htm

docker 镜像构建上下文理解

原文 写得贼好,特别鸣谢,哈哈 如果注意,会看到 docker build 命令最后有一个 . . . 表示当前目录,而 Dockerfile就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的.如果对应上面的命令格式,你可能会发现,这是在指定上下文路径.那么什么是上下文呢? ??首先我们要理解 docker build 的工作原理.Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具.Docker 的引擎提供了一

Docker镜像构建上下文(Context)

镜像构建上下文(Context) Dicker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的.如果对应上面的命令格式,你可能会发现,这是在指定上下文路径.那么什么是上下文呢? 首先我们要理解 docker build 的工作原理.Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具.Doc

sqler sql 转rest api 的docker 镜像构建(续)使用源码编译

sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git clone + go mod 备注: go mod 是新的包管理方案,需要新版本的golang,使用容器就不存在这个问题了,同时对于国内 还有一个墙的问题,同时我push了1.7tag 的镜像,就是使用go mod 构建的. dockerfile FROM golang:alpine as build

Hadoop的Docker镜像构建

1.Dockerfile ###Dockerfile -- beagin FROM ubuntu:trusty #MAINTAINER The Hue Team "https://github.com/cloudera/hue" RUN apt-get update -y RUN apt-get install -y software-properties-common RUN add-apt-repository -y ppa:webupd8team/java RUN apt-get