[记事] 初学者尝试操作容器 – (2)获取和操作Docker镜像

首先

你辛苦了,我是yuki_ink。

这是初学者接触容器的系列的第二次。
我仍然有动力。

做过的事情

    • Docker Hubアカウントの作成

 

    • イメージの検索

 

    • Docker Hubからイメージのダウンロード

 

    • イメージの内容の確認

 

    • イメージの削除

 

    • イメージのタグ設定

 

    Docker Hubへのイメージのアップロード

创建一个Docker Hub账户

image.png

图像搜索

image.png

可以使用 `docker search [検索キーワード]` 命令在命令行中进行搜索。

$ docker search nginx
NAME                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                       Official build of Nginx.                        18687     [OK]
unit                        Official build of NGINX Unit: Universal Web …   6         [OK]
nginxproxy/nginx-proxy      Automated Nginx reverse proxy for docker con…   90
nginxproxy/acme-companion   Automated ACME SSL certificate generation fo…   116
~以下略~

画面上での検索結果と一致。

请参考官方文档以了解命令选项和输出的查看方式。

 

Docker Hubからイメージのダウンロード

可以使用docker image pull [镜像名称]命令来下载镜像。

そういえば前回も、PCにDockerをインストールした後、docker image pull nginxでNginxのイメージを取得してコンテナ立てたなぁと、今更ながら思い出す。
あれはDocker Hubからイメージを取得していたんですね。

docker pull のイメージは Docker Hub から取得するのがデフォルトです。 取得するレジストリの場所は、手動で指定可能です。 例えば、ローカルにレジストリをセットアップしておけば、そちらを指定してイメージを取得できます。

 

docker image lsコマンドで取得したイメージの一覧を表示する。
前回やったときにNginxのイメージは取得していたので、docker image ls nignx –digestsで以下のように表示される。
※docker image ls [リポジトリ名]で、指定したリポジトリに出力を限定できる。
※–digestsオプションでイメージのダイジェストを表示。

$ docker image ls nginx --digests
REPOSITORY    TAG       DIGEST                                                                    IMAGE ID       CREATED       SIZE
nginx         latest    sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247   eb4a57159180   11 days ago   187MB

この状態でdocker image pull nginxを実行。

$ docker image pull nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247
Status: Image is up to date for nginx:latest
docker.io/library/nginx:latest

Docker Hub上に更新版があればそれをダウンロードして、ローカルのイメージを更新してくれるようだが、今回はすでにローカルのイメージが最新だった。
1週間前にダウンロードしたばかりだしなあ。。

[映像名称] = [儲存庫名称] + [标签名称]
若省略 [标签名称],则会获取到「最新」的映像
※docker image pull nginx 和 docker image pull nginx:latest 是相同的意义
参考:Docker初学者无法明确区分映像与储存库而感到困惑的情况

リポジトリ/レジストリ/イメージ/タグの概念図は以下が分かりやすかった。

 

确认图像内容

可以使用docker image inspect [镜像名称]命令来查看镜像的详细信息。可以了解镜像ID、创建日期、操作系统、Docker版本、CPU架构等内容。

コマンドの出力結果はかなり長いので折りたたむ。
$ docker image inspect nginx
[
{
“Id”: “sha256:eb4a57159180767450cb8426e6367f11b999653d8f185b5e3b78a9ca30c2c31d”,
“RepoTags”: [
“nginx:latest”
],
“RepoDigests”: [
“nginx@sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247”
],
“Parent”: “”,
“Comment”: “”,
“Created”: “2023-06-14T07:16:35.543292113Z”,
“Container”: “20a63bb857cabbde744d031c670a18470ddff9bc46c712bc3eaecbea49df55f8”,
“ContainerConfig”: {
“Hostname”: “20a63bb857ca”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“80/tcp”: {}
},
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”,
“NGINX_VERSION=1.25.1”,
“NJS_VERSION=0.7.12”,
“PKG_RELEASE=1~bookworm”
],
“Cmd”: [
“/bin/sh”,
“-c”,
“#(nop) “,
“CMD [\”nginx\” \”-g\” \”daemon off;\”]”
],
“Image”: “sha256:88c36fc25777ef22f947c314610b2852daaa20bdc25b10b7b4cad93d20b46ef7”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: [
“/docker-entrypoint.sh”
],
“OnBuild”: null,
“Labels”: {
“maintainer”: “NGINX Docker Maintainers <docker-maint@nginx.com>”
},
“StopSignal”: “SIGQUIT”
},
“DockerVersion”: “20.10.23”,
“Author”: “”,
“Config”: {
“Hostname”: “”,
“Domainname”: “”,
“User”: “”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“80/tcp”: {}
},
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”,
“NGINX_VERSION=1.25.1”,
“NJS_VERSION=0.7.12”,
“PKG_RELEASE=1~bookworm”
],
“Cmd”: [
“nginx”,
“-g”,
“daemon off;”
],
“Image”: “sha256:88c36fc25777ef22f947c314610b2852daaa20bdc25b10b7b4cad93d20b46ef7”,
“Volumes”: null,
“WorkingDir”: “”,
“Entrypoint”: [
“/docker-entrypoint.sh”
],
“OnBuild”: null,
“Labels”: {
“maintainer”: “NGINX Docker Maintainers <docker-maint@nginx.com>”
},
“StopSignal”: “SIGQUIT”
},
“Architecture”: “amd64”,
“Os”: “linux”,
“Size”: 186854870,
“VirtualSize”: 186854870,
“GraphDriver”: {
“Data”: {
“LowerDir”: “/var/lib/docker/overlay2/4461900a2deb70a9539f4738a6bf5a677e5eb6271555498915f6974ceae620fb/diff:/var/lib/docker/overlay2/2a885ecae7789b14fe952080573530f20bdbea86db29fa8208d3ca0fe6896c28/diff:/var/lib/docker/overlay2/167b574dde1fb180c02450a4785b606ece4b4cf695a7bd5a504a63eb82eac405/diff:/var/lib/docker/overlay2/d6f1073591a995357b8c4afd9d9500eb142c5f3d2799eb609eb270cad5b38990/diff:/var/lib/docker/overlay2/a174bca077ed55e6b6fb68e02a3ce086a4111c3adce9fe90d0af44b1a00d4035/diff:/var/lib/docker/overlay2/d0c3cbf125e31a09651a53a717c804b3a468b368db75ca251c6bb04296e28882/diff”,
“MergedDir”: “/var/lib/docker/overlay2/81d7641a81cadbc15e6dbca64fb06e1b7350669fa6fecc3ed29eb4680ce269c0/merged”,
“UpperDir”: “/var/lib/docker/overlay2/81d7641a81cadbc15e6dbca64fb06e1b7350669fa6fecc3ed29eb4680ce269c0/diff”,
“WorkDir”: “/var/lib/docker/overlay2/81d7641a81cadbc15e6dbca64fb06e1b7350669fa6fecc3ed29eb4680ce269c0/work”
},
“Name”: “overlay2”
},
“RootFS”: {
“Type”: “layers”,
“Layers”: [
“sha256:ac4d164fef90ff58466b67e23deb79a47b5abd30af9ebf1735b57da6e4af1323”,
“sha256:a8311013964725a288e00b53cfcf67d9303c4b3bc2ad7475cfc3b25867580ace”,
“sha256:4ca29ffc4a01ee651811c21b457cea0f2f5d5b0270d258208391a17998675a79”,
“sha256:bf8b62fb2f13ed1f2da4fd11f8136180c3284e88af95d7f00d21c8064f99f3b1”,
“sha256:7757099e19d2d8f2e1c09c9076524f912de42e6c76bc8a082ff178d74b5f54a6”,
“sha256:12a568acc014fad0d74cfa5509c6f55e80db2afb199ad5c1bdff05e2b6d1e5c7”,
“sha256:9e96226c58e7d2ab330522f49a51eb25037d4f89bfc53fa2c10b910184fa6b78”
]
},
“Metadata”: {
“LastTagTime”: “0001-01-01T00:00:00Z”
}
}
]

删除图像

可以使用docker image rm [イメージ名]命令在本地删除镜像。
要删除在Docker安装时获取的“hello-world”镜像。

$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
nginx         latest    eb4a57159180   12 days ago   187MB
hello-world   latest    9c7a54a9a43c   7 weeks ago   13.3kB

$ docker image rm hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:c2e23624975516c7e27b1b25be3682a8c6c4c0cea011b791ce98aa423b5040a0
Deleted: sha256:9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d
Deleted: sha256:01bb4fce3eb1b56b05adf99504dafd31907a5aadac736e36b27595c8b92f07f1

不见了!

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    eb4a57159180   12 days ago   187MB

イメージのタグ設定

当我想要将映像上传至Docker Hub并结束这件事时,

首先,需要为上传的Docker镜像添加一个确定的格式的标签。
使用命令 “docker tag 镜像ID DockerHub用户名/任意的镜像名” 来为镜像打上标签。

听说如此。

 

給现有的Nginx镜像添加以下信息。

    • ユーザ名:yukiink ※Docker Hubのユーザ名と一緒にする

 

    • イメージ名:webserver

バージョン:1.0 ⇒タグに入れる

$ docker image tag nginx yukiink/webserver:1.0

使用 `docker image ls` 命令来确认 Docker 镜像的标签设置。

$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
nginx               latest    eb4a57159180   12 days ago   187MB
yukiink/webserver   1.0       eb4a57159180   12 days ago   187MB

标记为(yukiink/webserver:1.0)的图像和原始图像(nginx:latest)的IMAGE ID是相同的!(eb4a57159180)
这意味着它们具有相同的实体。
※仅仅给图像起了另一个名称,并没有复制或重命名图像本身。

将镜像上传至Docker Hub。

将刚刚标记的图像(yukiink/webserver:1.0)上传到Docker Hub。

首先,在命令行中登录到Docker Hub。

$ 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: yukiink  ##ユーザ名を入力する
Password:  ##パスワードを入力する
Login Succeeded

听说可以使用选项 `docker login -u (用户名)-p(密码)` 一次性登录。

通过使用`docker image push [镜像名]`命令,将镜像上传到Docker Hub。

$ docker image push yukiink/webserver:1.0
The push refers to repository [docker.io/yukiink/webserver]
9e96226c58e7: Mounted from library/nginx
12a568acc014: Mounted from library/nginx
7757099e19d2: Mounted from library/nginx
bf8b62fb2f13: Mounted from library/nginx
4ca29ffc4a01: Mounted from library/nginx
a83110139647: Mounted from library/nginx
ac4d164fef90: Mounted from library/nginx
1.0: digest: sha256:d2b2f2980e9ccc570e5726b56b54580f23a018b7b7314c9eaff7e5e479c78657 size: 1778
image.png

从Docker Hub注销并退出!

$ docker logout
Removing login credentials for https://index.docker.io/v1/

结束

這次我試著使用一些指令來操作Docker映像檔。
原來是用這種方式將映像檔上傳到資料庫呢。

下次我打算尝试创建和删除真实的容器,并且探索与生命周期相关的命令。

广告
将在 10 秒后关闭
bannerAds