使用 Docker 映象構建 GO 語言環境

2022-03-13 20:22:49 字數 4652 閱讀 2662

目前來說,直接訪問 docker 官網的 dockerhub 會比較慢, 不過幸好現在國內出現了一些 dockerhub 的加速**。 下面使用 ustc 加速器。

修改檔案 /etc/docker/daemon.json,將其內容修改為

配置完成後,重啟 docker 服務:systemctl restart docker

這樣就可以使用 加速器了。

如果 ustc 的加速器速度不夠快,還可以嘗試一下其它的加速器,具體請參考這裡 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

[root@fengbo 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

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

[root@fengbo golang]$ docker images golang

repository tag image id created size

docker.io/golang latest 138bd936fa29 4 weeks ago 733.3 mb

[root@fengbo golang]$ docker run -it --rm

golang bash

root@9e46b1255f4b:/go# go version

go version go1.

9.2 linux/amd64

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

檢視進到容器後的預設目錄

root@9e46b1255f4b:/go# pwd

/go

看來是在 /go 目錄下面。

不過因為我們在建立容器的時候加了 --rm 引數,所以當我們執行 exit 命令退出容器的時候,這個臨時容器會被刪除。

那我們如何使用這個 golang 的映象來工作呢?

首先,如果我們把檔案直接寫在 docker 容器裡面的話,那麼資料是無法持久化的。 即使可以使用 docker cp 命令這樣的方式把我們的檔案複製到容器內部, 或者把檔案從容器中複製出來,但是在操作的時候仍會有很多不方便的地方。

所以,我們要把主機的目錄對映到容器中,這樣就可以把檔案進行持久化了。

我們可以使用 docker 命令的 -v 引數,把主機的目錄對映到容器中。 不過只使用 -v 引數的話,在容器內部操作目錄會有許可權限制, 所以還需要增加 --privileged 引數給容器放權。

[root@fengbo golang]$ pwd

# 檢視當前所在的目錄

/root/golang

[root@fengbo golang]$

ls -l # 檢視當前目錄下的子目錄和檔案等

total

0drwxrwxrwx.

2 root root 6 jan 10

01:19

code

drwxrwxrwx.

2 root root 6 jan 10

01:20

go[root@fengbo 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

'> root@fe6be9f3b22d:/go# # 已經進入容器了

我們可以在容器的目錄 /go 和目錄 /code 裡面建立一些檔案, 然後返回主機檢視。

root@bb2942f33960:/go# echo

"hello

" > /go/h.txt # 在容器內,建立檔案 '

/go/h.txt

'並寫入資料

root@bb2942f33960:/go# echo

"world

" > /code/w.txt # 在容器內,建立檔案 '

/code/w.txt

'並寫入資料

root@bb2942f33960:/go# exit # 退出容器

exit

[root@fengbo golang]#

find # 已經回到主機了。在主機的 '

/root/golang

'目錄下檢視檔案

../code

./code/w.txt # 可以看到檔案 '

w.txt

'./go

./go/h.txt # 以及檔案 '

h.txt

'[root@fengbo golang]#

cat go/h.txt

hello

[root@fengbo golang]#

cat code/w

.txt

world

使用上面的方法,每次建立了容器,都會把主機上指定的目錄對映到容器中,修改的資料也會反映到主機上。

開啟容器

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

同步發表:

windows 使用docker構建映象

一定要注意 先改下docker desktop的setting。不然生成映象直接 全都放到c盤。開啟cmd,到dockerfile的路徑 請把dockerfile單獨放到乙個目錄 使用docker build t image name 這個 就是當前目錄,然後就是漫長的等待。建立乙個基於某映象的容器...

docker構建映象

做映象就是構建映象!提交容器更改,生成新的映象!docker commit 容器名 新映象的名字 tag 例如 將web2容器提交為乙個新的映象,新映象的名字為nginx 1.1 在docker中映象的儲存方式是分層儲存的!每個映象都會有不同層數!映象的層數只能增加不能減少!映象是唯讀的!裡面的記憶...

docker構建映象

建立docker映象有兩種方法。1。docker commit 這種不推薦,就不介紹了。2。用docker build命令和dockerfile檔案 下面構建乙個nginx小應用。建立資料夾 mkdir static web 進入這個資料夾 cd static web 建立dockerfile檔案 ...