使用 Docker 鏡像構建 GO 語言環境

來源:互聯網
上載者:User

標籤:ash   lib   images   tag   ola   服務   install   開啟   complete   

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 golangINDEX       NAME                              DESCRIPTION         STARS     OFFICIAL   AUTOMATEDdocker.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/golangUsing default tag: latestTrying to pull repository docker.io/library/golang ... latest: Pulling from docker.io/library/golang723254a2c089: Extracting [===============================>     ] 40.83 MB/45.12 MBabe15a44e12f: Download complete 409a28e3cc3d: Download complete 503166935590: Download complete abe52c89597f: Download complete ce145c5cf4da: Downloading [===============>                     ] 31.36 MB/104.3 MB96e333289084: Download complete 39cd5f38ffb8: Download complete 39cd5f38ffb8: Pulling fs layer 

下載好了之後,查看一下鏡像的資訊 docker images golang

[[email protected] golang]$ docker images golangREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.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 versiongo 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 0drwxrwxrwx. 2 root root 6 Jan 10 01:19 codedrwxrwxrwx. 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

使用 Docker 鏡像構建 GO 語言環境

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.