当前位置:   article > 正文

Docker中仓库、镜像和容器用法详解_docker仓库

docker仓库

1、仓库、镜像和容器之间的关系

2、Docker镜像

        当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载,如果不指定版本,默认下载最新的版本。也可以通过配置,使用自定义的镜像仓库。

2.1 查看镜像信息

2.1.1 使用images命令列出镜像

使用 docker images 或者 docker image ls来列出本地主机上的镜像:

  1. docker images
  2. docker image ls

选项说明:

  1. REPOSITORY:表示镜像的仓库源
  2. TAG:镜像的标签, 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
  3. IMAGE ID:镜像ID,它唯一的标识了镜像。在使用id时,可以使用该id的前若干个字符组成的可区分串来代替完整的ID。
  4. CREATED:镜像创建时间,说明镜像的最后更新时间。
  5. SIZE:镜像大小  

2.1.2 使用tag命令添加镜像标签

        使用docker tag命令为本地镜像任意添加新的标签。当TAG为<none>时,直接为该镜像打上标签,若TAG不为<none>时,此时操作相当于复制链接一份。

如:添加一个新的myubuntu:latest镜像:

docker tag ubuntu:18.04 myubuntu:latest

注意:可以注意到ID的相同的,docker tag命令添加的标签实际上起到了类似链接的作用。

如TAG为<none>时:

docker tag d1165f221234 hello-world:old_image

注意:此时直接为该镜像打上了标签。

2.1.3 使用inspect命令查看详细信息

docker inspect ubuntu:18.04

执行结果:

  1. [root@dgw-machine ~]# docker inspect ubuntu:18.04
  2. [
  3. {
  4. "Id": "sha256:3941d3b032a8168d53508410a67baad120a563df67a7959565a30a1cb2114731",
  5. "RepoTags": [
  6. "myubuntu:latest",
  7. "ubuntu:18.04"
  8. ],
  9. "RepoDigests": [
  10. "ubuntu@sha256:8aa9c2798215f99544d1ce7439ea9c3a6dfd82de607da1cec3a8a2fae005931b"
  11. ],
  12. "Parent": "",
  13. "Comment": "",
  14. "Created": "2023-03-08T03:22:44.73196058Z",
  15. "Container": "ee3fcc8c88d3f3129f1236850de28a7eba0da7c548a7b23a6495905ebcf255ea",
  16. "ContainerConfig": {
  17. "Hostname": "ee3fcc8c88d3",
  18. "Domainname": "",
  19. "User": "",
  20. "AttachStdin": false,
  21. "AttachStdout": false,
  22. "AttachStderr": false,
  23. "Tty": false,
  24. "OpenStdin": false,
  25. "StdinOnce": false,
  26. "Env": [
  27. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  28. ],
  29. "Cmd": [
  30. "/bin/sh",
  31. "-c",
  32. "#(nop) ",
  33. "CMD [\"/bin/bash\"]"
  34. ],
  35. "Image": "sha256:b64649bc9d1a48300ec5a929146aa3c5ca80046f74c33aa5de65a7046f5177a6",
  36. "Volumes": null,
  37. "WorkingDir": "",
  38. "Entrypoint": null,
  39. "OnBuild": null,
  40. "Labels": {
  41. "org.opencontainers.image.ref.name": "ubuntu",
  42. "org.opencontainers.image.version": "18.04"
  43. }
  44. },
  45. "DockerVersion": "20.10.12",
  46. "Author": "",
  47. "Config": {
  48. "Hostname": "",
  49. "Domainname": "",
  50. "User": "",
  51. "AttachStdin": false,
  52. "AttachStdout": false,
  53. "AttachStderr": false,
  54. "Tty": false,
  55. "OpenStdin": false,
  56. "StdinOnce": false,
  57. "Env": [
  58. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  59. ],
  60. "Cmd": [
  61. "/bin/bash"
  62. ],
  63. "Image": "sha256:b64649bc9d1a48300ec5a929146aa3c5ca80046f74c33aa5de65a7046f5177a6",
  64. "Volumes": null,
  65. "WorkingDir": "",
  66. "Entrypoint": null,
  67. "OnBuild": null,
  68. "Labels": {
  69. "org.opencontainers.image.ref.name": "ubuntu",
  70. "org.opencontainers.image.version": "18.04"
  71. }
  72. },
  73. "Architecture": "amd64",
  74. "Os": "linux",
  75. "Size": 63146040,
  76. "VirtualSize": 63146040,
  77. "GraphDriver": {
  78. "Data": {
  79. "MergedDir": "/var/lib/docker/overlay2/16361f3b03baee1bac13d5476160ddb296b800caec61cebd427b24a32b758e42/merged",
  80. "UpperDir": "/var/lib/docker/overlay2/16361f3b03baee1bac13d5476160ddb296b800caec61cebd427b24a32b758e42/diff",
  81. "WorkDir": "/var/lib/docker/overlay2/16361f3b03baee1bac13d5476160ddb296b800caec61cebd427b24a32b758e42/work"
  82. },
  83. "Name": "overlay2"
  84. },
  85. "RootFS": {
  86. "Type": "layers",
  87. "Layers": [
  88. "sha256:b7e0fa7bfe7f9796f1268cca2e65a8bfb1e010277652cee9a9c9d077a83db3c4"
  89. ]
  90. },
  91. "Metadata": {
  92. "LastTagTime": "2023-05-14T11:50:51.28460608+08:00"
  93. }
  94. }
  95. ]

上述命令返回的是一个json格式的信息,如果只需要其中某条信息时,可以使用-f指定。

如获取镜像的RootFS:

  1. docker inspect -f {{".RootFS"}} ubuntu:18.04
  2. docker inspect -f {{".RootFS.Type"}} ubuntu:18.04

2.1.4 使用history命令查看镜像历史

docker history ubuntu:18.04

 过长的命令被自动截断了,可以添加--no-trunc命令:

2.2 查找镜像

以查找mysql为例:

2.2.1 通过Docker Hub 进行查找, 比如Docker Hub

2.2.2 使用 docker search 命令来搜索镜像

docker search mysql

参数介绍:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • STARS: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建

支持的命令主要包括:

  1. -f,--filter  filter:过滤输出的内容
  2. --format string:格式化输出内容
  3. --limit int:限制输出的结果个数,默认为25个
  4. --no-trunc:不截断输出结果

示例如下:

  1. # 搜索官方提供的
  2. docker search --filter=is-official=true mysql
  3. docker search -f=is-official=true mysql
  4. docker search -f is-official=true mysql

  1. #搜索收藏数超过4的
  2. docker search -f stars=100 mysql

2.3 拉取/获取镜像

使用如下命令:

docker [image] pull NAME[:TAG]

其中:NAME是镜像仓库名称,TAG是镜像的标签。

        对于docker镜像来说,如果不显示指定 TAG,则默认会选择latest标签,这样会下载仓库中最新版本的镜像。

2.3.1 获取mysql镜像

docker pull mysql

2.3.2 获取Ubuntu镜像

docker pull ubuntu:18.04

2.4 删除镜像

  1. sudo docker image rm 镜像名或镜像ID
  2. sudo docker image rm hello-world
  3. sudo docker image rm fce289e99eb9

注意:删除的前提是:这个对象没有创建容器。镜像正在运行时是不能删除的。需要先把容器给stop、删除,然后再删除镜像。

2.4.1 使用标签删除镜像

        使用docker rmi或者docker image rm命令可以删除镜像。

支持的选项:

  1. -f,-force:强制删除镜像,即使有容器依赖它
  2. -no-prune:不要请理未带标签的父镜像
docker rmi myubuntu:latest

注意:当镜像只剩下一个标签的时候,docker rmi会彻底的删除镜像。

2.4.2 使用ID删除镜像

docker image rm fce289e99eb9

当使用docker rmi ID命令时,会先尝试删除该ID所有指向的镜像标签,然后再删除该镜像本身。

注意:通常不推荐使用-f参数来强制删除一个存在的容器依赖的镜像。正确的做法是先删除依赖该镜像的所有容器,再删除该镜像。

2.4.3 清理镜像

        使用docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有使用的镜像,可以通过docker image prune命令来进行清理。

支持的选项包括:

  • -a,-all:删除所有无用的镜像,不光是临时镜像
  • -filter filter:只清理符合给定过滤器的镜像
  • -f,-force:强制删除镜像,而不进行提示确认

如下命令-f会自动清理临时的遗留镜像文件层,最后提示释放的存储空间。

docker image prune -f

docker image prune -a

2.5 更新镜像

        针对ubantu镜像,是否可以在里面安装一些软件,然后再生成一个新的镜像呢?这就需要重新commit出一个新的镜像。

以ubantu镜像为例:

首先run一个ubantu容器,同时在里面进行apt-get update更新操作:

  1. docker run -it ubuntu:latest
  2. apt-get update

2.6 创建镜像

创建镜像主要有三种方法:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

2.6.1 基于已有容器创建

命令格式:

docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要选项包括:

  • -a,--author="":作者信息
  • -c,--change=[]:提交的时候执行Dockerfile指令,包括CMD | ENTRYPOINT|ENV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR等
  • -m,--message="":提交信息
  • -p,--pause=true:提交时暂停容器运行

实例操作:

首先下载一个镜像,以Ubuntu最新镜像为例:

然后启动镜像,并在其中进行修改操作:

docker run -it ubuntu:latest /bin/bash

记住容器的id:18db64bd342f,也可以通过下面命令查看:

使用docker commit命令提交一个镜像:

docker commit -m "Added a new file" -a "dgw" 18db64bd342f test:1.0

2.6.2 基于本地模板导入

        可以直接从一个操作系统模板文件中导入一个镜像。

 

注意:

2.6.3 基于Dockerfile创建

2.7 镜像的导出

        可以使用docker save命令将镜像导出到本地文件。

命令参数:

  • -o,-output string:导出镜像到指定的文件中。
  • >:同 -o 方法。

使用tag导出:

  1. docker save -o ubuntu_18.04.tar ubuntu:latest
  2. docker save > ubuntu_18.04_2.tar ubuntu:latest

使用id导出:

docker save > ubuntu_18.04_3.tar 6b7dfa7e8fdb

之后用户就可以复制.tar文件将镜像分享给别人。

2.8 镜像的导入

使用docker load命令将导出的tar文件再导入到本地镜像库。

支持的参数:

  • -i,-input string:从指定文件中读入镜像内容。
  • <:同 -i
docker load -i ubuntu_18.04.tar

        这将导入镜像和相关的元数据信息(包括标签等)。导入成功后,可以使用docker images命令进行查看,与原镜像一致。

2.9 上传镜像

        可以使用docker push 命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。

3、Docker容器

        在生产环境中,为了提高容器的高可用性和安全性,一方面要合理利用资源限制参数来管理容器的资源消耗;另一方面要指定合适的容器重启策略,来自动重启退出的容器。此外,还可以使用HAProxy等辅助工具来处理负载均衡,自动切换故障的应用容器。

3.1 创建容器

3.1.1 新建容器

        可以使用docker create命令新建一个容器。

docker create -it ubuntu:18.04

注意:使用docker create命令创建的容器处于停止状态,可以使用docker start命令来启动它。

3.1.2 启动容器

        可以使用docker start命令来启动一个已经创建的容器。

docker start id

3.1.3 新建并启动容器

可以使用docker run命令直接新建并启动容器。

docker run等价于先执行docker create命令,再执行docker start命令。

示例:(输出一个hello world,然后容器自动停止)

docker run ubuntu:18.04 /bin/echo "Hello world"

注意:如果镜像不指定版本号,默认是latest,若不存在的话会自动下载。

当利用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:

启动一个bash终端,允许用户进行交互:

docker run -it ubuntu:18.04 /bin/bash

其中:

  • -it 可以连写的,表示 -i -t
  • -t  选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
  • -i  测让容器的标准输入保持打开。

在交互式模式下,用户可以通过创建的终端来输入命令:

可以使用Ctrl+d或输入exit命令来退出容器。 

        对于所创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了。

        可以使用docker  container  wait CONTAINER[CONTAINER....]子命令来等待容器退出,并打印退出返回结果。

        某些时候,执行docker  [container]  run时候因为命令无法正常执行容器会出错直接退出,此时可以查看退出的错误代码。

默认情况下,常见错误代码包括:

  • 125: Docker daemon执行出错,例如指定了不支持的Docker命令参数;
  • 126:所指定命令无法执行,例如权限出错;
  • 127:容器内命令无法找到。

3.1.4 容器重启

使用docker restart命令重启容器。

3.1.5 守护态运行

        大部分时候需要Docker容器以守护态在后台运行,可以添加 -d 来实现。

docker run -d ubuntu:18.04 /bin/bash -c "while true; do echo hello world; sleep 1; done"

3.1.6 查看容器输出

         要获取容器的输出信息,可以使用docker logs命令。

docker logs --help

docker logs -t dbef38912874

3.2 停止容器

3.2.1 暂停容器

        可以使用docker pause 命令来暂停一个运行中的容器。

示例:启动一个容器,然后将其暂停

  1. docker run -d --name test_pause ubuntu:18.04 /bin/bash -c "while true; do echo hello world; sleep 1; done"
  2. docker pause test_pause

处于pause状态的容器,可以使用docker unpause命令来恢复到运行状态:

docker unpause test_pause

3.2.2 终止容器

        使用docker  stop 命令来终止一个正在运行的容器。

        该命令会首先发送SIGTERM信号,等待一段超时时间后(默认是10s),再发送SIGKILL信号来终止容器。

docker stop id

3.2.3 强制停止容器

加上-f之后是可以强制停止容器的。

docker rm -f fcf727bda146

3.2.4 清理停止的容器

执行docker container prune命令,会自动清除掉所有处于停止状态的容器。

docker container prune

还可以使用docker kill 直接发送SIGKILL信号来强行终止容器。

可以使用docker ps -qa命令来查看所有容器的ID。

docker ps -qa

 

可以使用docker start命令启动处于停止状态的容器。

也可以使用docker restart命令重新启动容器。先将一个运行的容器终止,然后再重新启动。

docker restart 67b354e0d141

3.3 进入容器

3.3.1 attach命令

        attach命令是Docker官方自带的命令。

  1. docker run -itd ubuntu:18.04
  2. docker ps
  3. docker attach intelligent_fermi

注意:当多个窗口同时attach到同一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了。

注意:使用docker attach进入时,当使用exit退出时容器也跟着停止了。

3.3.2 exec命令

        可以在运行中容器内直接执行任意命令。

docker exec -it intelligent_fermi /bin/bash

通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。

注意:当退出容器时,不会导致容器的停止。

3.4 删除容器

        可以使用docker rm 命令来删除处于终止或者退出状态的容器。

        默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能册删除还处于运行状态的容器。

docker rm practical_jemison

        如果要直接删除一个运行中的容器,可以添加-f参数。Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。或者也可以先stop容器,然后再rm删除容器。

docker rm -f intelligent_fermi

3.5 导出容器

        可以导出一个已经创建的容器到一个文件中,不管此时这个容器是否处于运行状态。

  1. docker export -o ubuntu_hello_world.tar 0e3f62f364a3
  2. 或者
  3. docker export 0e3f62f364a3 > ubuntu_hello_world2.tar

其中,-o选项来指定导出的.tar文件名 ,也可以直接通过重定向来实现。

        之后,就可以将导出的.tar文件传输到别的机器上,然后通过导入命令到系统中,实现容器的迁移。

注意:导出容器的时候,容器无需关闭

3.6 导入容器

        导出的文件可以通过docker import 命令导入变成镜像。

docker import --help

        可以通过-c,--change=[ ]选项在导入的同时执行对容器进行修改的Dockerfile文件。

docker import ubuntu_hello_world.tar test/ubuntu:v1

        docker load命令和docker import命令类似。实际上,既可以使用docker load命令来导入镜像存储文件到本地镜像库,也可以使用docker import 命令来导入一个容器快照到本地镜像仓库。二者的区别:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保留容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

3.7 查看容器

3.7.1 查看启动的容器

  • -a 表示all 所有的

  1. # 查看正在运行的容器
  2. sudo docker container ls
  3. # 查看所有的容器
  4. sudo docker container ls --all
  5. docker ps

3.7.2 查看容器详情

        可以使用docker container inspect命令查询详情,会以json格式返回包括容器的id、创建时间、路径、状态、镜像、配置等在内的各项信息。

docker container inspect eloquent_robinson

  1. [root@dgw-machine ~]# docker container inspect eloquent_robinson
  2. [
  3. {
  4. "Id": "0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7",
  5. "Created": "2023-05-21T05:06:52.230375082Z",
  6. "Path": "/bin/bash",
  7. "Args": [
  8. "-c",
  9. "while true; do echo hello world; sleep 1; done"
  10. ],
  11. "State": {
  12. "Status": "running",
  13. "Running": true,
  14. "Paused": false,
  15. "Restarting": false,
  16. "OOMKilled": false,
  17. "Dead": false,
  18. "Pid": 11785,
  19. "ExitCode": 0,
  20. "Error": "",
  21. "StartedAt": "2023-05-21T05:06:52.554615834Z",
  22. "FinishedAt": "0001-01-01T00:00:00Z"
  23. },
  24. "Image": "sha256:e28a50f651f9eefbc8883ddc64704d609f3d95bf1ea9e41f873a8da68ea5ec98",
  25. "ResolvConfPath": "/var/lib/docker/containers/0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7/resolv.conf",
  26. "HostnamePath": "/var/lib/docker/containers/0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7/hostname",
  27. "HostsPath": "/var/lib/docker/containers/0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7/hosts",
  28. "LogPath": "/var/lib/docker/containers/0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7/0e3f62f364a357fae84b577379c67ed78ff485c1a855fa9cee004f8fc0f30ff7-json.log",
  29. "Name": "/eloquent_robinson",
  30. "RestartCount": 0,
  31. "Driver": "overlay2",
  32. "Platform": "linux",
  33. "MountLabel": "",
  34. "ProcessLabel": "",
  35. "AppArmorProfile": "",
  36. "ExecIDs": null,
  37. "HostConfig": {
  38. "Binds": null,
  39. "ContainerIDFile": "",
  40. "LogConfig": {
  41. "Type": "json-file",
  42. "Config": {}
  43. },
  44. "NetworkMode": "default",
  45. "PortBindings": {},
  46. "RestartPolicy": {
  47. "Name": "no",
  48. "MaximumRetryCount": 0
  49. },
  50. "AutoRemove": false,
  51. "VolumeDriver": "",
  52. "VolumesFrom": null,
  53. "ConsoleSize": [
  54. 27,
  55. 166
  56. ],
  57. "CapAdd": null,
  58. "CapDrop": null,
  59. "CgroupnsMode": "host",
  60. "Dns": [],
  61. "DnsOptions": [],
  62. "DnsSearch": [],
  63. "ExtraHosts": null,
  64. "GroupAdd": null,
  65. "IpcMode": "private",
  66. "Cgroup": "",
  67. "Links": null,
  68. "OomScoreAdj": 0,
  69. "PidMode": "",
  70. "Privileged": false,
  71. "PublishAllPorts": false,
  72. "ReadonlyRootfs": false,
  73. "SecurityOpt": null,
  74. "UTSMode": "",
  75. "UsernsMode": "",
  76. "ShmSize": 67108864,
  77. "Runtime": "runc",
  78. "Isolation": "",
  79. "CpuShares": 0,
  80. "Memory": 0,
  81. "NanoCpus": 0,
  82. "CgroupParent": "",
  83. "BlkioWeight": 0,
  84. "BlkioWeightDevice": [],
  85. "BlkioDeviceReadBps": [],
  86. "BlkioDeviceWriteBps": [],
  87. "BlkioDeviceReadIOps": [],
  88. "BlkioDeviceWriteIOps": [],
  89. "CpuPeriod": 0,
  90. "CpuQuota": 0,
  91. "CpuRealtimePeriod": 0,
  92. "CpuRealtimeRuntime": 0,
  93. "CpusetCpus": "",
  94. "CpusetMems": "",
  95. "Devices": [],
  96. "DeviceCgroupRules": null,
  97. "DeviceRequests": null,
  98. "MemoryReservation": 0,
  99. "MemorySwap": 0,
  100. "MemorySwappiness": null,
  101. "OomKillDisable": false,
  102. "PidsLimit": null,
  103. "Ulimits": null,
  104. "CpuCount": 0,
  105. "CpuPercent": 0,
  106. "IOMaximumIOps": 0,
  107. "IOMaximumBandwidth": 0,
  108. "MaskedPaths": [
  109. "/proc/asound",
  110. "/proc/acpi",
  111. "/proc/kcore",
  112. "/proc/keys",
  113. "/proc/latency_stats",
  114. "/proc/timer_list",
  115. "/proc/timer_stats",
  116. "/proc/sched_debug",
  117. "/proc/scsi",
  118. "/sys/firmware"
  119. ],
  120. "ReadonlyPaths": [
  121. "/proc/bus",
  122. "/proc/fs",
  123. "/proc/irq",
  124. "/proc/sys",
  125. "/proc/sysrq-trigger"
  126. ]
  127. },
  128. "GraphDriver": {
  129. "Data": {
  130. "LowerDir": "/var/lib/docker/overlay2/255e8f6f55b45d7614bd012fcc0d2f8efdd1a44d3564d5ab0ab90da041867b2c-init/diff:/var/lib/docker/overlay2/d2db9613f837932d77d6dc5a11090e59704626d4358161a1ae364967bde28315/diff",
  131. "MergedDir": "/var/lib/docker/overlay2/255e8f6f55b45d7614bd012fcc0d2f8efdd1a44d3564d5ab0ab90da041867b2c/merged",
  132. "UpperDir": "/var/lib/docker/overlay2/255e8f6f55b45d7614bd012fcc0d2f8efdd1a44d3564d5ab0ab90da041867b2c/diff",
  133. "WorkDir": "/var/lib/docker/overlay2/255e8f6f55b45d7614bd012fcc0d2f8efdd1a44d3564d5ab0ab90da041867b2c/work"
  134. },
  135. "Name": "overlay2"
  136. },
  137. "Mounts": [],
  138. "Config": {
  139. "Hostname": "0e3f62f364a3",
  140. "Domainname": "",
  141. "User": "",
  142. "AttachStdin": false,
  143. "AttachStdout": false,
  144. "AttachStderr": false,
  145. "Tty": false,
  146. "OpenStdin": false,
  147. "StdinOnce": false,
  148. "Env": [
  149. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  150. ],
  151. "Cmd": [
  152. "/bin/bash",
  153. "-c",
  154. "while true; do echo hello world; sleep 1; done"
  155. ],
  156. "Image": "ubuntu:18.04",
  157. "Volumes": null,
  158. "WorkingDir": "",
  159. "Entrypoint": null,
  160. "OnBuild": null,
  161. "Labels": {}
  162. },
  163. "NetworkSettings": {
  164. "Bridge": "",
  165. "SandboxID": "11f5f2a64705ba6ef8419547bb0bbb3aacba5a68288de1b1ad2e092656484ca6",
  166. "HairpinMode": false,
  167. "LinkLocalIPv6Address": "",
  168. "LinkLocalIPv6PrefixLen": 0,
  169. "Ports": {},
  170. "SandboxKey": "/var/run/docker/netns/11f5f2a64705",
  171. "SecondaryIPAddresses": null,
  172. "SecondaryIPv6Addresses": null,
  173. "EndpointID": "2a6e6d63a0ff4d1cbfa4da9ad5353c7cc32acf7e5015a064f6b5d40c82472922",
  174. "Gateway": "172.17.0.1",
  175. "GlobalIPv6Address": "",
  176. "GlobalIPv6PrefixLen": 0,
  177. "IPAddress": "172.17.0.2",
  178. "IPPrefixLen": 16,
  179. "IPv6Gateway": "",
  180. "MacAddress": "02:42:ac:11:00:02",
  181. "Networks": {
  182. "bridge": {
  183. "IPAMConfig": null,
  184. "Links": null,
  185. "Aliases": null,
  186. "NetworkID": "63bc5376b3ecf16d0d60b4952199d183cd553485dfebe9de3b65927f9e98b28c",
  187. "EndpointID": "2a6e6d63a0ff4d1cbfa4da9ad5353c7cc32acf7e5015a064f6b5d40c82472922",
  188. "Gateway": "172.17.0.1",
  189. "IPAddress": "172.17.0.2",
  190. "IPPrefixLen": 16,
  191. "IPv6Gateway": "",
  192. "GlobalIPv6Address": "",
  193. "GlobalIPv6PrefixLen": 0,
  194. "MacAddress": "02:42:ac:11:00:02",
  195. "DriverOpts": null
  196. }
  197. }
  198. }
  199. }
  200. ]

3.7.3 查看容器内进程

        使用top方法查看容器内进程,类似于Linux系统中的top命令。会打印出容器内的进程信息,包括PID、用户、时间、命令等。

docker top eloquent_robinson

3.7.4 查看统计信息

        使用stats命令查看统计信息,会显示CPU、内存、存储、网络等使用情况的统计信息。

docker stats eloquent_robinson

3.8 复制文件

        container cp命令支持在容器和主机之间复制文件。

 将容器中数据复制到宿主机上:

docker cp eloquent_robinson:/tmp .

将宿主机上数据复制到容器中:

docker cp 111.txt eloquent_robinson:/tmp

3.9 查看容器变更

        docker diff查看容器内文件系统的变更。

docker container diff eloquent_robinson

3.10 查看容器端口映射

        docker port命令可以查看容器的端口映射情况。

docker container port objective_burnell

3.11 更新容器配置

        docker update命令可以更新容器中的一些运行时配置,主要是一些资源限制份额。

3.12 容器别名及操作

docker run -itd --name new_ubuntu new/ubuntu:v2.0.1 /bin/bash

3.13 容器错误日志

  1. 例:实时查看docker容器名为user-dgw的最后10行日志
  2. docker logs -f -t --tail 10 user-dgw
  3. 例:查看指定时间后的日志,只显示最后100行:
  4. docker logs -f -t --since="2018-02-08" --tail=100 user-dgw
  5. 例:查看最近30分钟的日志:
  6. docker logs --since 30m user-dgw
  7. 例:查看某时间之后的日志:
  8. docker logs -t --since="2018-02-08T13:23:37" user-dgw
  9. 例:查看某时间段日志:
  10. docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" user-dgw
  11. 例:将错误日志写入文件:
  12. docker logs -f -t --since="2018-02-18" user-dgw | grep error >> logs_error.txt

4、Docker仓库

仓库(Repository)是集中存放镜像的地方。

  • 可以采用共有的仓库,也可以自己搭建Docker Registry;
  • 如果之前有自己的Artifactory或者Nexus,它们同样可以支持Docker Registry功能;
  • 带界面的也可以使用Harbor等

4.1公共镜像Docker Hub

注册官方docker hub:Docker Hub

本人注册名称为:dgwdocker

4.1.1 登录:

        可以通过docker login命令输入用户名、密码和邮箱来完成注册和登录。注册成功后,本地用户目录下会自动创建.docker/config.json文件,保存用户的认证信息。

        登录成功后用户可以上传个人制作的镜像到Docker Hub。

4.1.2 镜像准备:

4.1.3 将镜像推送至Docke Hub服务器:

4.2 第三方镜像市场

4.2.1 查看镜像

如时速云:https://tenxcloud.com/

时速云官方仓库中的镜像会保持与DockerHub中官方镜像的同步。

4.2.2 下载镜像

下载镜像同样是使用docker pull命令,但是要在前面添加服务器的地址。

4.3 搭建本地私有仓库

4.3.1 使用registry镜像创建私有仓库

官方提供了registry镜像来简单搭建一套本地私有仓库环境。

docker run -d -p 5000:5000 registry:2

 这将自动下载并启动一个registry容器,创建本地的私有仓库服务。

此时,在本地启动了一个私有仓库服务,监听端口为5000。

4.3.2 管理私有仓库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/80381
推荐阅读
相关标签
  

闽ICP备14008679号