本章將圍繞鏡像這一核心概念介紹具體操作, 包括:
2.1 docker image 獲取如何使用pull命令從 Docker Hub 倉庫中下載鏡像到本地;
如何查看本地已有的鏡像信息和管理鏡像標簽;
如何在遠端倉庫使 用 search 命令進行搜索和過濾;
如何刪除鏡像標簽和鏡像文件;
如何創建用戶定制的鏡像并且保存為外部文件。
最后,還將介紹如何往DockerHub倉庫中推送自己的鏡像。
鏡像是運行容器的前提, 官方的 Docker Hub 網站已經提供了數十萬個鏡像供大家開放下載。 可以使用docker [image] pull
命令直接從 Docker Hub 鏡像源來下載鏡像。
該命令的格式:
docker [image] pull NAME [ :TAG]
參數:
- NAME是鏡像倉庫名稱(用來區分鏡像),
- TAG是鏡像的標簽(往往用來表示版本 信息)。
通常情況下, 描述一個鏡像需要包括 “名稱+標簽“ 信息。
例如, 獲取一個Ubuntu 18.04系統精簡的基礎鏡像可以使用如下的命令:
[root@dbc-server-554 ansible]# docker image pull ubuntu:18.04
18.04: Pulling from library/ubuntu
a055bf07b5b0: Pull complete
Digest: sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
對于Docker鏡像來說, 如果不顯式指定TAG, 則默認會選擇latest
標簽,這會下載倉庫中最新版本的鏡像,例如
docker pull ubuntu
等價于
docker pull ubuntu:latest
一般來說, 鏡像的latest 標簽意味著該鏡像的內容會跟蹤最新版本的變更而變化,內容是不穩定的。因此,從穩定性上考慮,不要在生產環境中忽略鏡像的標簽信息或使用默認的latest標記的鏡像
2.1.2 層(layer)下載過程中可以看出 ,鏡像文件一般由若干層(layer
)組成 ,a055bf07b5b0這樣的字符串是層的唯一id(實際上完整的id包括256比特,64個十六進制字符組成)。使用docker pull命令下載中會獲取并輸出鏡像的各層信息。當不同的鏡像包括相同的層時,本地僅存儲了層的 一份內容,減小了存儲空間。
讀者可能會想到, 在不同的鏡像倉庫服務器的情況下,可能會出現鏡像重名的情況。 嚴格地講,鏡像的倉庫名稱中還應該添加倉庫地址(即registry, 注冊服務器)作為前綴,只是默認使用的是官方DockerHub服務 ,該前綴可以忽略。 例如,docker pull ubuntu:18.04相當于docker pull registory.hub. docker.com/ubuntu:18.04
即從默認的注冊服務器DcoekrHub Registry中的 ubuntu 倉庫來下載標記為18.04的鏡像。
如果從非官方的倉庫下載,則 需要在倉庫 名稱前指定完整的倉庫地址。例如從網易蜂巢的鏡像源來下載ubuntu:18.04鏡像,可以使用如下命令,此時下載的鏡像名稱為hub. c.163.com/public/ubuntu:18.04
$ docker pull hub.c.163.com/public/ubuntu:18.04 pull
子命令支持的選項主要包括:
- -a, --all-tags=true/false:是否獲取倉庫中的所有鏡像,默認為否;
- –disable-content-trust:取消鏡像的內容校驗,默認為真。
- –regisotry-mirror=proxy_URL 使用鏡像代理服務來加速Docker鏡像獲取過程,來指定鏡像代理服務地址(如https:// registry.docker-en.com)
嘗試運行鏡像
[root@dbc-server-554 ansible]# docker run -it ubuntu:18.04 bash
root@69c9479cfafd:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
2.2 查看鏡像信息(ls,tag,inspect,history)
2.2.1 使用images命令列出鏡像(ls)使用docker images或docker image ls 命令可以列出本地主機上已有鏡像的基本信息。格式:
docker images [ls]
例如, 下面的命令列出了上一小節中下載的鏡像信息:
[root@dbc-server-554 ansible]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
在列出信息中, 可以看到幾個字段信息:
- REPOSITORY 來自于哪個倉庫, 比如ubuntu表示ubuntu系列的基礎鏡像;
- TAG 鏡像的標記信息, 比如 18.04、 latest表示不同的版本信息。 標簽只是標記, 并不能標識鏡像內容;
- IMAGE ID 鏡像的ID(唯一標識鏡像),如果兩個鏡像的ID相同,說明它們實際上指向了同一 個鏡像, 只是具有不同標簽名稱而已;
- CREATED 創建時間, 說明鏡像最后的更新時間;
- SIZE 鏡像大小, 優秀的鏡像往往體積都較小。
其中鏡像的ID信息十分重要, 它唯一標識了鏡像。在使用鏡像ID的時候, 一般可以使 用該ID的前若干個字符組成的可區分串來替代完整的ID。
TAG 信息用于標記來自同一個倉庫的不同鏡像。 例如ubuntu 倉庫中有多個鏡像, 通過 TAG 信息來區分發行版本, 如18.04、 18.10 等。
鏡像大小信息只是表示了該鏡像的邏輯體積大小, 實際上由于相同的鏡像層本地只會存儲一份, 物理上占用的存儲空間會小于各鏡像邏輯體積之和。
images子命令主要支持如下選項, 用戶可以自行進行嘗試:
- -a, --all=true/false: 列出所有(包括臨時文件)鏡像文件,默認為否;
- –digests=true/false: 列出鏡像的數字摘要值,默認為否;
- -f, --filter=[] : 過濾列出的鏡像,如dangling =true 只顯示沒有被使用的鏡像;也可指定帶有特定標注的鏡像等;
- –format=“TEMPLATE” : 控制輸出格式,如. ID代表ID信息,.Repository 代表倉庫信息等;
- –no-trunc=true/false: 對輸出結果中太長的部分是否進行截斷,如鏡像的ID 信息,默認為是否;
- -q, --quiet=true/false: 僅輸出ID信息, 默認為否。
[root@dbc-server-554 ansible]# docker images --digests=true
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
ubuntu 18.04 sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45 e28a50f651f9 7 days ago 63.1MB
[root@dbc-server-554 ansible]# docker images --no-trunc=true
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98 7 days ago 63.1MB
[root@dbc-server-554 ansible]# docker images -f dangling=true
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@dbc-server-554 ansible]# docker images -q
e28a50f651f9
更多子命令選項還可以通過man docker-images
來查看。
為了方便在后續工作中使用特定鏡像,還可以使用docker tag命令來為本地鏡像任意添加新的標簽。
格式:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
例如,添加一個新的myubuntu: latest鏡像標簽:
[root@dbc-server-554 ansible]# docker tag ubuntu:18.04 myubuntu:latest
[root@dbc-server-554 ansible]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myubuntu latest e28a50f651f9 7 days ago 63.1MB
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
再次使用docker images列出本地主機上鏡像信息, 可以看到多了一個myubuntu:latest
標簽的鏡像,之后,用戶就可以直接使用myubuntu:latest來表示這個鏡像了。
細心的讀者可能注意到, 這些myubuntu:latest鏡像的ID跟ubuntu:latest是完全一致的,它們實際上指向了同一個鏡像文件,只是別名不同而已。docker tag命令添加的標簽實際上起到了類似鏈接的作用。
2.2.3 使用inspect命令查看詳細信息(inspect)使用docker [image] inspect
命令可以獲取該鏡像的詳細信息,包括制作者、適應架構、各層的數字摘要等,格式
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
-f, --format="" Format the output using the given Go template
-h, --help[=false] help for inspect
-s, --size[=false] Display total file sizes if the type is container
[root@dbc-server-554 ansible]# docker inspect e28
[
{"Id": "sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98",
"RepoTags": [
"myubuntu:latest",
"ubuntu:18.04"
],
"RepoDigests": [
"ubuntu@sha256:c1d0baf2425ecef88a2f0c3543ec43690dc16cc80d3c4e593bb95e4f45390e45"
],
"Parent": "",
"Comment": "",
"Created": "2023-01-02T18:48:56.081327405Z",
...
此處以及后續使用IMAGE ID參數,只要能確定ID,只寫前幾位即可
上面代碼返回的是一個 JSON 格式的消息, 如果我們只要其中一項內容時, 可以使 用-f
來指定, 例如, 獲取鏡像的Architecture:
[root@dbc-server-554 ansible]# docker image inspect -f {{.Architecture}} e28
amd64
[root@dbc-server-554 ansible]# docker image inspect -f {{.Os}} e28
linux
2.2.4 使用history命令查看鏡像歷史(history)既然鏡像文件由多個層組成,那么怎么知道各個層的內容具體是什么呢?這時候可以使用history子命令,該命令將列出各層的創建信息。
格式:
docker history [OPTIONS] IMAGE
--format="" Pretty-print images using a Go template
-h, --help[=false] help for history
-H, --human[=true] Print sizes and dates in human readable format
--no-trunc[=false] Don't truncate output
-q, --quiet[=false] Only show image IDs
例如,查看ubuntu:18.04鏡像的創建過程,可以使用如下命令:
[root@dbc-server-554 ansible]# docker image history e28
IMAGE CREATED CREATED BY SIZE COMMENT
e28a50f651f9 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B 7 days ago /bin/sh -c #(nop) ADD file:132da97f77ddc534d… 63.1MB
使用--no-trunc=true
顯示長信息
[root@dbc-server-554 ansible]# docker image history --no-trunc=true e28
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B 7 days ago /bin/sh -c #(nop) ADD file:132da97f77ddc534ddb931a461d83ac2aa601dd4481360c874eac33b6c3470d9 in / 63.1MB
2.3 搜索鏡像(search)使用docker search命令可以搜索Docker Hub官方倉庫中的鏡像。格式:
docker search [OPTIONS] TERM
OPTIONS
-f, --filter= Filter output based on conditions provided
--format="" Pretty-print search using a Go template
-h, --help[=false] help for search
--limit=25 Max number of search results
--no-trunc[=false] Don't truncate output
例如, 搜索官方提供的帶 nginx關鍵字的鏡像
[root@dbc-server-554 ansible]# docker search -f=is-official=true nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 17920 [OK]
再比如, 搜索所有收藏數超過 4 的關鍵詞包括httpd的鏡像:
[root@dbc-server-554 ansible]# docker search --filter=stars=4 httpd
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 4291 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 45
centos/httpd 36 [OK]
可以看到返回了很多包含關鍵字的鏡像, 其中包括鏡像名字、 描述、 收藏數(表示該鏡像 的受歡迎程度)、 是否官方創建、 是否自動創建等。默認的輸出結果將按照星級評價進行排序。
2.4 刪除和清理鏡像(rmi,prune) 2.4.1 使用標簽刪除鏡像(rmi/rm)使用docker rmi
或docker image rm
命令可以刪除鏡像, 命令格式為
docker rmi [OPTIONS] IMAGE [IMAGE...]
其中 IMAGE可以為標簽或 ID。 支持選項包括:
- -f, -force: 強制刪除鏡像, 即使有容器依賴它;
- -no-prune: 不要清理未帶標簽的父鏡像。
[root@dbc-server-554 ansible]# docker rmi myubuntu
Untagged: myubuntu:latest
[root@dbc-server-554 ansible]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
讀者可能會想到, 本地的ubuntu:latest 鏡像是否會受到此命令的影響。 無須擔心, 當同一個鏡像擁有多個標簽的時候, docker rmi 命令只是刪除了該鏡像多個標簽中的指定 標簽而巳, 并不影響鏡像文件。 因此上述操作相當于只是刪除了鏡像 0458a4468cbc的一 個標簽副本而已。如果按指定ID刪除,則會刪除鏡像本身。
2.4.2 使用鏡像ID來刪除鏡像當使用 docker rmi 命令, 并且后面跟上鏡像的 ID(也可以是能進行區分的部分 ID 串前綴)時, 會先嘗試刪除所有指向該鏡像的標簽, 然后刪除該鏡像文件本身。
注意,當有該鏡像創建的容器存在時,鏡像文件默認是無法被刪除的,例如: 先利用 ubuntu:18.04鏡像創建一個簡單的容器來輸出一段話:
[root@dbc-server-554 ansible]# docker run -it e28 echo "hello world"
hello world
使用docker ps -a命令可以看到本機上存在的所有容器:
[root@dbc-server-554 ansible]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe01b86f100c e28 "echo 'hello world'" 14 seconds ago Exited (0) 13 seconds ago interesting_lumiere
69c9479cfafd ubuntu:18.04 "bash" 3 hours ago Exited (0) 3 hours ago angry_hofstadter
可以看到,后臺存在一個退出狀態的容器,是剛基于ubuntu:18.04鏡像創建的。試圖刪除該鏡像,Docker會提示有容器正在運行,無法刪除:
[root@dbc-server-554 ansible]# docker rmi ubuntu:18.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container fe01b86f100c is using its referenced image e28a50f651f9
如果要想強行刪除鏡像, 可以使用-f
參數:
$ docker rmi -f ubuntu:18.04
注意, 通常并不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像。 正確的做法是, 先刪除依賴該鏡像的所有容器, 再來刪除鏡像。
首先刪除容器e28a50f651f9:
$ docker rm e28a50f651f9
然后使用ID來刪除鏡像, 此時會正常打印出刪除的各層信息
2.4.3 清理鏡像(prune)使用Docker一段時間后, 系統中可能會遺留一些臨時的鏡像文件, 以及一些沒有被使用的鏡像, 可以通過docker image prune
命令來進行清理(prune:消減 )。格式:
docker image prune [OPTIONS]
支待選項包括:
-a, -all: 刪除所有無用鏡像, 不光是臨時鏡像;
-filter FILTER: 只清理符合給定過濾器的鏡像;
-f, -force: 強制刪除鏡像, 而不進行提示確認。
例如, 如下命令會自動清理臨時的遺留鏡像文件層, 最后會提示釋放的存儲空間:
$ docker image prune -f
...
Total reclaimed space: 1.4 GB
2.5 *創建鏡像 (commit,import,build)創建鏡像的方法主要有三種: 基于已有鏡像的容器創建、 基于本地模板導入、 基于Dockerfile創建。
2.5.1 基于已有容器創建(commit)該方法主要是使用docker [container] commit
命令。格式:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS
-a, --author="" Author (e.g., "John Hannibal Smith hannibal@a-team.com ?mailto:hannibal@a-
team.com?")
-c, --change= 提交的時候執行Dockerfile指令, 包括CMD,ENTRYPOINT,ENV,EXPOSE,LABEL,ONBUILD,USER,VOLUME,WORKDIR等;
-m, --message="" Commit message
-p, --pause[=true] Pause container during commit
下面將演示如何使用該命令創建一個新鏡像:
[root@dbc-server-554 ansible]# docker run -it e28 bash
root@944742a90200:/# touch hello
root@944742a90200:/# ls
bin boot dev etc hello home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
docker [container] commit
命令來提交為一個新的鏡像。提交時可以使用 ID 或名稱來指定容器:[root@dbc-server-554 ansible]# docker commit -m "add a new file [hello]" -a "yurq" 944742a90200 hello:0.1
sha256:faae2335ff33a81fe1c3c305a0296002556af1506db9a986bc9c69426e059955
[root@dbc-server-554 ansible]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello 0.1 faae2335ff33 7 seconds ago 63.1MB
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
2.5.2 基于本地模板導入(import)用戶也可以直接從一個操作系統模板文件導人一個鏡像,主要使用 docker [container] import 命令。 命令格式為
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
要直接導人一個鏡像,可以使用 OpenVZ 提供的模板來創建,或者用其他已導出的鏡像 模板來創建。
OPENVZ 模板的下載地址為http://openvz.org/Download/templates/precreated
。
[root@dbc-server-554 docker]# cat centos-7-x86_64-minimal.tar.gz |docker import - centos:7
sha256:2d8840b29c99c35ff00ef66b2e4707ea22d61b513736df406f4987a46d0aa57f
[root@dbc-server-554 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 2d8840b29c99 3 seconds ago 435MB
hello 0.1 faae2335ff33 38 minutes ago 63.1MB
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
2.5.3 基于 Dockerfile 創建(build)基于 Dockerfile 創建是最常見的方式。 Dockerfile 是一個文本文件,利用給定的指令描述基于某個父鏡像創建新鏡像的過程。
下面給出 Dockerfile 的一個簡單示例,基于centos7鏡像構建一個新的centos鏡像:
[root@dbc-server-554 docker]# cat dockerfile
FROM centos:7
LABEL version="1.0" maintainer="newbee"
[root@dbc-server-554 docker]# docker build -t centos:test .
Sending build context to Docker daemon 145.6MB
Step 1/2 : FROM centos:7
--->2d8840b29c99
Step 2/2 : LABEL version="1.0" maintainer="newbee"
--->Running in b61ec2c18c24
Removing intermediate container b61ec2c18c24
--->286c9503509f
Successfully built 286c9503509f
Successfully tagged centos:test
Dockerfile強大的構建功能遠遠不止于此,而且非常關鍵。更多使用 Dockerfile 的技巧將將在后面進行介紹。
2.6 存出和載入鏡像(save,load)本節主要介紹 Docker 鏡像的 save 和 load 子命令。 用戶可以使用docker [image] save
和docker [image] load
命令來存出和載入鏡像。
要導出鏡像到本地文件,可以使用docker [image] save
命令。該命令支持-o、--output string
參數,導出鏡像到指定的文件中。 格式:
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS
-h, --help[=false] help for save
-o, --output="" Write to a file, instead of STDOUT
示例:
[root@dbc-server-554 docker]# docker save -o centos7.tar centos:test
[root@dbc-server-554 docker]# ls
centos7.tar centos-7-x86_64-minimal.tar.gz dockerfile
存出的tar文件可以分享給其他人,通過下面load命令載入使用
2.6.2 載入鏡像(load)可以使用docker [image] load
將導出的 tar 文件再導人到本地鏡像庫。支持-i、--input string
選項,從指定文件中讀入鏡像內容。 格式:
docker load [OPTIONS] IMAGE.tar
OPTIONS
-h, --help[=false] help for load
-i, --input="" Read from tar archive file, instead of STDIN
-q, --quiet[=false] Suppress(刪除) the load output
示例:
Loaded image: centos:test
[root@dbc-server-554 docker]# docker rmi 286
Untagged: centos:test
Deleted: sha256:286c9503509fe18eb2d48c9eef585ee6bb8571c116781bad6f7956a33e05520d
[root@dbc-server-554 docker]# docker load -i centos7.tar
Loaded image: centos:test
[root@dbc-server-554 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos test 286c9503509f 13 minutes ago 435MB
centos 7 2d8840b29c99 23 minutes ago 435MB
hello 0.1 faae2335ff33 About an hour ago 63.1MB
ubuntu 18.04 e28a50f651f9 7 days ago 63.1MB
不使用-i
,也可以使用重定向<
,結果相同,例如:
docker load< centos7.tar
2.7 上傳鏡像(push)本節主要介紹 Docker 鏡像的 push 子命令。 可以使用docker [image] push
命令上 傳鏡像到倉庫,默認上傳到 Docker Hub 官方倉庫(需要登錄)。 命令格式為
docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]
OPTIONS
-a, --all-tags[=false] Push all tagged images in the repository
--disable-content-trust[=true] Skip image signing
-h, --help[=false] help for push
-q, --quiet[=false] Suppress verbose output
用戶在 Docker Hub 網站注冊后可以上傳自制的鏡像。
[root@dbc-server-554 docker]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yurq
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@dbc-server-554 docker]# docker tag hello:0.1 yurq/hello:0.1
[root@dbc-server-554 docker]# docker push yurq/hello:0.1
The push refers to repository [docker.io/yurq/hello]
2f8d78308466: Pushed
101b05ef38e1: Mounted from library/ubuntu
0.1: digest: sha256:6aa6a023469f4e2710f516aed3a9950902d8f03c21360a4b50f930202d58d2f0 size: 736
第一次上傳時,會提示輸入登錄信息或進行注冊,之后登錄信息會記錄到本地~/ . docker 目錄下。
以后可以通過docker pull yurq/hello:0.1
下載鏡像進行使用
命令 | 說明 |
---|---|
docker [image] pull NAME [ :TAG] | 獲取鏡像 |
docker images [ls] | 列出鏡像 |
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] | 添加標簽 |
docker inspect [OPTIONS] NAME | ID [NAME |
docker history [OPTIONS] IMAGE | 鏡像構建歷史 |
docker search [OPTIONS] TERM | 查找鏡像 |
docker rmi [OPTIONS] IMAGE [IMAGE…] | 刪除鏡像 |
docker image prune [OPTIONS] | 清理鏡像 |
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] | 創建鏡像(基于已有容器創建) |
docker import [OPTIONS] file | URL |
docker build -t centos:test. | 創建鏡像(基于 Dockerfile 創建). 指當前路徑 |
docker save [OPTIONS] IMAGE [IMAGE…] | 存出鏡像 |
docker load [OPTIONS] IMAGE.tar | 載入鏡像 |
docker [image] push NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG] |
docker login | 登錄https://hub.docker.com |
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章標題:CHAPTER2Docker鏡像-創新互聯
網站路徑:http://vcdvsql.cn/article4/ddgsie.html
成都網站建設公司_創新互聯,為您提供網站營銷、營銷型網站建設、搜索引擎優化、軟件開發、動態網站、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯