Docker基础之运行原理

news/2025/3/14 23:53:57/

docker run的一个执行流程

Docker是一个Client-Server 的结构的系统,Docker的守护进程在主机上,通过Socker从客户端来访问

DockerServer接收到Docker-Client的指令,就会执行这个命令

Docker为什么比Linux快?

1.Docker有着比虚拟机更小的抽象层

2.Docker利用的是宿主机的内核,vm需要的是Guest OS

虚拟机是加载Guest OS,是分钟级别的

新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,利用的是宿主机的操作系统,省略了这个复杂的过程,是秒级的

帮助命令

docker vension         //显示docker的命令信息

docker info               //显示docker的系统信息,包括镜像和容器的数量

docker 命令 -- help   //万能命令

镜像命令

docker images 查看仓库源

REPOSITORY 镜像的仓库源

TAG 镜像的标签

IMAGE ID 镜像的ID

CREATED 镜像的创建事件

SIZE 镜像的大小

-a,--a 就是列出所有的镜像

-q,--quiet 只显示镜像的id

docker search 搜索镜像

[root@localhost /]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search Docker Hub for images

Options:

  -f, --filter filter   Filter output based on conditions provided

      --format string   Pretty-print search using a Go template

      --limit int       Max number of search results

      --no-trunc        Don't truncate output

[root@localhost /]# docker search mysql

NAME                            DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED

mysql                           MySQL is a widely used, open-source relation…   14726     [OK]      

mariadb                         MariaDB Server is a high performing open sou…   5619      [OK]   

可选项,通过收藏来过滤

--felter=start=3000 搜索出来的镜像就是START大于3000的

[root@localhost /]# docker search mysql --filter=stars=3000

NAME      DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED

mysql     MySQL is a widely used, open-source relation…   14726     [OK]      

mariadb   MariaDB Server is a high performing open sou…   5619      [OK]   

docker pull下载镜像

[root@localhost /]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Download an image from a registry

Aliases:

  docker image pull, docker pull

Options:

  -a, --all-tags                Download all tagged images in the repository

      --disable-content-trust   Skip image verification (default true)

      --platform string         Set platform if server is multi-platform capable

  -q, --quiet                   Suppress verbose output

[root@localhost /]# docker pull mysql                后面可以添加一个tag来指定版本

Using default tag: latest                                       如果不写版本,后面默认指定的就是最新版

latest: Pulling from library/mysql

72a69066d2fe: Pull complete                                分层下载,docker image的核心,联合文件系统

93619dbc5b36: Pull complete

99da31dd6142: Pull complete

626033c43d70: Pull complete

37d5d7efb64e: Pull complete

ac563158d721: Pull complete

d2ba16033dad: Pull complete

688ba7d5c01a: Pull complete

00e060b6d11d: Pull complete

1c04857f594f: Pull complete

4d7cfa90e6ea: Pull complete

e0431212d27d: Pull complete

Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709     签名

Status: Downloaded newer image for mysql:latest                                                                                                                                      

docker.io/library/mysql:latest                                                                                                            真实地址

这里的docker pull 等价于 docker pull  docker.io/library/mysql:latest

如果我们再次安装mysql 5.7版本的话

[root@localhost /]# docker pull mysql:5.7

5.7: Pulling from library/mysql

72a69066d2fe: Already exists

93619dbc5b36: Already exists

99da31dd6142: Already exists

626033c43d70: Already exists

37d5d7efb64e: Already exists

ac563158d721: Already exists

d2ba16033dad: Already exists

0ceb82207cd7: Pull complete

37f2405cae96: Pull complete

e2482e017e53: Pull complete

70deed891d42: Pull complete

Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94

Status: Downloaded newer image for mysql:5.7

docker.io/library/mysql:5.7

因为之前安装最新版本的时候是已经安装了部分了,现在再次安装5.7就不用全部的层都安装了

docker 删除镜像

docker rmi -f 镜像id或名称

[root@localhost /]# docker images

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE

hello-world   latest    d2c94e258dcb   7 months ago   13.3kB

mysql         5.7       c20987f18b13   2 years ago    448MB

mysql         latest    3218b38490ce   2 years ago    516MB

[root@localhost /]# docker rmi -f c20987f18b13

Untagged: mysql:5.7

Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94

Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76

Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989

Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f

Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150

Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92

[root@localhost /]# docker images

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE

hello-world   latest    d2c94e258dcb   7 months ago   13.3kB

mysql         latest    3218b38490ce   2 years ago    516MB

删除多个容器

docker rmi -f 容器id 容器 id 容器id

全部删除

docker rmi -f $(docker images -aq) 将docker images -aq作为参数传入

[root@localhost /]# docker rmi -f $(docker images -aq)

Untagged: hello-world:latest

Untagged: hello-world@sha256:ac69084025c660510933cca701f615283cdbb3aa0963188770b54c31c8962493

Deleted: sha256:d2c94e258dcb3c5ac2798d32e1249e42ef01cba4841c2234249495f87264ac5a

Untagged: mysql:latest

Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709

Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b

Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5

Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d

Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9

Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3

Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff

Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba

Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7

Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da

Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838

Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0

Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa

Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2

[root@localhost /]# docker images

REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

说明:需要有了镜像才能使用容器,以一个linux容器中的centos镜像为例

docker pull centos

新建容器并启动

docker run [可选参数] image

参数说明

--name="Name" 容器名字,tomcat01、tomcat02来区分

-d 后台方式运行,

-it 使用交互方式运行,进入容器查看内容

-p 指定容器端口 有四种方式

-p ip:主机端口:容器端口

-p 主机端口:容器端口

-p 容器端口

容器端口

启动并进入容器

[root@localhost /]# docker run -it centos /bin/bash

[root@82893955fb41 /]#

[root@82893955fb41 /]# ls               查看容器内的centos

bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

此时容器内部的centos与外部的centos没有关系

退出容器

[root@82893955fb41 /]# exit

exit

[root@localhost /]#

docker ps 命令

    列出所有正在运行的容器

-a 列出所有正在运行的容器与曾经运行的容器

-n=个数 显示最近创建的N个容器

-q 只显示容器的编号

列出所有运行中的容器

[root@localhost /]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

列出曾经运行的容器

[root@localhost /]# docker ps -a

CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES

82893955fb41   centos         "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             elegant_kirch

0a5890a6d948   d2c94e258dcb   "/hello"      9 hours ago     Exited (0) 9 hours ago                    bold_chebyshev

列出最近创建的一个容器

[root@localhost /]# docker ps -n=1

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES

82893955fb41   centos    "/bin/bash"   6 minutes ago   Exited (0) 4 minutes ago             elegant_kirch

 

列出所有容器的编号

[root@localhost /]# docker ps -aq

82893955fb41

0a5890a6d948

exit 容器退出并停止

CTRL+P+Q 容器不停止退出

[root@localhost ~]# docker run -it centos /bin/bash

[root@4bdda8d6242e /]# docker ps

bash: docker: command not found

[root@4bdda8d6242e /]# [root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES

4bdda8d6242e   centos    "/bin/bash"   8 minutes ago   Up 8 minutes             vigorous_gagarin

删除容器

docker rm 移除容器

docjer rmi 移除镜像

docker rm 容器id                     删除指定容器,不能删除正在运行的容器,如果需要强制删除,就需要 加入 -f

docker rm -f $(docker ps -aq) 删除全部容器

docker ps -a -q | xargs dockers rm 删除所有容器

启动与停止容器

docker start 容器id        启动容器

docker restart 容器id     重启容器

docker stop 容器id        停止正在运行容器

docker kill 容器id          强制杀死正在运行的容器

先启动容器然后退出容器,再用历史中id启动容器,利用docker stop id 停止容器

[root@localhost ~]# docker run -it centos /bin/bash

[root@a54518f477e9 /]# exit

exit

[root@localhost ~]# docker os

docker: 'os' is not a docker command.

See 'docker --help'

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@localhost ~]# docker ps -a

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES

a54518f477e9   centos    "/bin/bash"   56 seconds ago   Exited (0) 49 seconds ago             ecstatic_keller

[root@localhost ~]# docker start a54518f477e9

a54518f477e9

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS         PORTS     NAMES

a54518f477e9   centos    "/bin/bash"   About a minute ago   Up 6 seconds             ecstatic_keller

[root@localhost ~]# docker stop a54518f477e9

a54518f477e9

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

其他命令

后台启动容器

通过docker run -a 镜像名 来启动容器

[root@localhost ~]# docker run -d centos

bd19d67283774aede6ea1042ff9e2e14ae41d349285a18cf23faf8a18bf73572

[root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

使用后台运行的时候,如果没有前台进程,如-it,docker发送没有前台应用,就会自动停止,也就是说我们就是只启动了一个CentOS,没有没有使用它,然后就自动停止了

查看日志

docker logs -f -t --tail 显示的日志条数 容器

查看容器中的进程信息

top

[root@localhost ~]# docker run -it centos /bin/bash

[root@f6306cb0eaaa /]# [root@localhost ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES

f6306cb0eaaa   centos    "/bin/bash"   10 seconds ago   Up 9 seconds             funny_clarke

[root@localhost ~]# docker top f6306cb0eaaa

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD

root                72103               72079               0                   05:18               pts/0               00:00:00            /bin/bash

查看镜像的元数据

docker inspect 容器id

[root@localhost ~]# docker inspect f6306cb0eaaa

[

    {

        "Id": "f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece",

        "Created": "2023-12-23T13:18:36.76455639Z",

        "Path": "/bin/bash",

        "Args": [],

        "State": {

            "Status": "running",

            "Running": true,

            "Paused": false,

            "Restarting": false,

            "OOMKilled": false,

            "Dead": false,

            "Pid": 72103,

            "ExitCode": 0,

            "Error": "",

            "StartedAt": "2023-12-23T13:18:37.176971566Z",

            "FinishedAt": "0001-01-01T00:00:00Z"

        },

        "Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",

        "ResolvConfPath": "/var/lib/docker/containers/f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece/resolv.conf",

        "HostnamePath": "/var/lib/docker/containers/f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece/hostname",

        "HostsPath": "/var/lib/docker/containers/f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece/hosts",

        "LogPath": "/var/lib/docker/containers/f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece/f6306cb0eaaa4894af9e6cd5d276c93fcadb3cfe5c1d2c46b44cb91d02d39ece-json.log",

        "Name": "/funny_clarke",

        "RestartCount": 0,

        "Driver": "overlay2",

        "Platform": "linux",

        "MountLabel": "",

        "ProcessLabel": "",

        "AppArmorProfile": "",

        "ExecIDs": null,

        "HostConfig": {

            "Binds": null,

            "ContainerIDFile": "",

            "LogConfig": {

                "Type": "json-file",

                "Config": {}

            },

            "NetworkMode": "default",

            "PortBindings": {},

            "RestartPolicy": {

                "Name": "no",

                "MaximumRetryCount": 0

            },

            "AutoRemove": false,

            "VolumeDriver": "",

            "VolumesFrom": null,

            "ConsoleSize": [

                46,

                150

            ],

            "CapAdd": null,

            "CapDrop": null,

            "CgroupnsMode": "host",

            "Dns": [],

            "DnsOptions": [],

            "DnsSearch": [],

            "ExtraHosts": null,

            "GroupAdd": null,

            "IpcMode": "private",

            "Cgroup": "",

            "Links": null,

            "OomScoreAdj": 0,

            "PidMode": "",

            "Privileged": false,

            "PublishAllPorts": false,

            "ReadonlyRootfs": false,

            "SecurityOpt": null,

            "UTSMode": "",

            "UsernsMode": "",

            "ShmSize": 67108864,

            "Runtime": "runc",

            "Isolation": "",

            "CpuShares": 0,

            "Memory": 0,

            "NanoCpus": 0,

            "CgroupParent": "",

            "BlkioWeight": 0,

            "BlkioWeightDevice": [],

            "BlkioDeviceReadBps": [],

            "BlkioDeviceWriteBps": [],

            "BlkioDeviceReadIOps": [],

            "BlkioDeviceWriteIOps": [],

            "CpuPeriod": 0,

            "CpuQuota": 0,

            "CpuRealtimePeriod": 0,

            "CpuRealtimeRuntime": 0,

            "CpusetCpus": "",

            "CpusetMems": "",

            "Devices": [],

            "DeviceCgroupRules": null,

            "DeviceRequests": null,

            "MemoryReservation": 0,

            "MemorySwap": 0,

            "MemorySwappiness": null,

            "OomKillDisable": false,

            "PidsLimit": null,

            "Ulimits": null,

            "CpuCount": 0,

            "CpuPercent": 0,

            "IOMaximumIOps": 0,

            "IOMaximumBandwidth": 0,

            "MaskedPaths": [

                "/proc/asound",

                "/proc/acpi",

                "/proc/kcore",

                "/proc/keys",

                "/proc/latency_stats",

                "/proc/timer_list",

                "/proc/timer_stats",

                "/proc/sched_debug",

                "/proc/scsi",

                "/sys/firmware",

                "/sys/devices/virtual/powercap"

            ],

            "ReadonlyPaths": [

                "/proc/bus",

                "/proc/fs",

                "/proc/irq",

                "/proc/sys",

                "/proc/sysrq-trigger"

            ]

        },

        "GraphDriver": {

            "Data": {

                "LowerDir": "/var/lib/docker/overlay2/2c81f36d8e5aab055a767c095a3a48923c509524e9382ab25b90f3cbff4d5212-init/diff:/var/lib/docker/overlay2/f59ecbfd0d480206326041d65a34502077c4b4b3d8ea3fe8d3bea282d054df5b/diff",

                "MergedDir": "/var/lib/docker/overlay2/2c81f36d8e5aab055a767c095a3a48923c509524e9382ab25b90f3cbff4d5212/merged",

                "UpperDir": "/var/lib/docker/overlay2/2c81f36d8e5aab055a767c095a3a48923c509524e9382ab25b90f3cbff4d5212/diff",

                "WorkDir": "/var/lib/docker/overlay2/2c81f36d8e5aab055a767c095a3a48923c509524e9382ab25b90f3cbff4d5212/work"

            },

            "Name": "overlay2"

        },

        "Mounts": [],

        "Config": {

            "Hostname": "f6306cb0eaaa",

            "Domainname": "",

            "User": "",

            "AttachStdin": true,

            "AttachStdout": true,

            "AttachStderr": true,

            "Tty": true,

            "OpenStdin": true,

            "StdinOnce": true,

            "Env": [

                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

            ],

            "Cmd": [

                "/bin/bash"

            ],

            "Image": "centos",

            "Volumes": null,

            "WorkingDir": "",

            "Entrypoint": null,

            "OnBuild": null,

            "Labels": {

                "org.label-schema.build-date": "20210915",

                "org.label-schema.license": "GPLv2",

                "org.label-schema.name": "CentOS Base Image",

                "org.label-schema.schema-version": "1.0",

                "org.label-schema.vendor": "CentOS"

            }

        },

        "NetworkSettings": {

            "Bridge": "",

            "SandboxID": "ce88100eec36b666214ed141c32055f8643ccc59ea3ebc12828d61310acacf06",

            "HairpinMode": false,

            "LinkLocalIPv6Address": "",

            "LinkLocalIPv6PrefixLen": 0,

            "Ports": {},

            "SandboxKey": "/var/run/docker/netns/ce88100eec36",

            "SecondaryIPAddresses": null,

            "SecondaryIPv6Addresses": null,

            "EndpointID": "f35174bff621aaec194c51d0614b915a3608240adde06f82f45e47d5152a6107",

            "Gateway": "172.17.0.1",

            "GlobalIPv6Address": "",

            "GlobalIPv6PrefixLen": 0,

            "IPAddress": "172.17.0.2",

            "IPPrefixLen": 16,

            "IPv6Gateway": "",

            "MacAddress": "02:42:ac:11:00:02",

            "Networks": {

                "bridge": {

                    "IPAMConfig": null,

                    "Links": null,

                    "Aliases": null,

                    "NetworkID": "712ef386b938f762e6d3b55ab127383431cf782f3c717aaaa2dcd068b8c0e1ee",

                    "EndpointID": "f35174bff621aaec194c51d0614b915a3608240adde06f82f45e47d5152a6107",

                    "Gateway": "172.17.0.1",

                    "IPAddress": "172.17.0.2",

                    "IPPrefixLen": 16,

                    "IPv6Gateway": "",

                    "GlobalIPv6Address": "",

                    "GlobalIPv6PrefixLen": 0,

                    "MacAddress": "02:42:ac:11:00:02",

                    "DriverOpts": null

                }

            }

        }

    }

]


http://www.ppmy.cn/news/1578666.html

相关文章

LeetCode 2269.找到一个数字的 K 美丽值:字符串数字转换(模拟)

【LetMeFly】2269.找到一个数字的 K 美丽值:字符串数字转换(模拟) 力扣题目链接:https://leetcode.cn/problems/find-the-k-beauty-of-a-number/ 一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目: 子字符串长度为 k 。…

有哪些好用的AI视频加工创作网站

以下是当前较为流行且功能强大的AI视频创作与加工平台,涵盖视频生成、编辑、特效及自动化处理等功能,适合不同需求的用户: 一、AI视频生成工具 1. Synthesia - 特点:AI虚拟人像生成,支持100语言配音,无…

node.js内置模块之---crypto 模块

crypto 模块的作用 在 Node.js 中,crypto 模块提供了多种加密功能,包括哈希、对称加密、非对称加密和数字签名等。通过 crypto 模块,可以进行各种加密和解密操作,保护敏感数据的安全性。 crypto 模块 1. 哈希算法(H…

c#面试题整理7

1.UDP和TCP的区别 UDP是只要能连上终端就发送,至于终端是否收到,不管。 TCP则是会存在交换,即发送失败或成功,是可知的。 2.进程和线程的区别 双击一个程序的exe文件,程序执行了,这就是一个进程。 这个…

SQLiteStudio:一款免费开源跨平台的SQLite管理工具

目录 1.简介 2.下载与安装 3.实现分析 4.总结 1.简介 SQLiteStudio 是一款专门用于管理 SQLite 数据库的图形化工具,由波兰开发者开发并维护。由于 SQLite 以其轻量级、零配置、嵌入式等特性被广泛应用于各种小型项目、移动应用和桌面应用中,而 SQLi…

linux 软件安装(上)

一、基础环境准备 1.1、安装VM 1.2、在VM上导入linux iso镜像,装好linux系统 华为centos镜像下载地址 https://mirrors.huaweicloud.com/centos/ https://mirrors.huaweicloud.com/centos/7.9.2009/isos/x86_64/ 网易centos镜像下载地址 htt…

hbase-05 namespace、数据的确界TTL

要点 掌握HBase的命名空间namespace概念 掌握HBase数据版本确界 掌握HBase数据TTL 1. HBase的namespace 1.1 namespace基本介绍 在HBase中,namespace命名空间指对一组表的逻辑分组,类似RDBMS中的database,方便对表在业务上划分。Apache…

DeepIn Wps 字体缺失问题

系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录(Ubuntu 应该也是这个目录&am…