目录

Docker基础之运行原理

Docker基础之运行原理

docker run的一个执行流程

https://i-blog.csdnimg.cn/direct/12cceed0ab0541ad9d81835122026af0.jpeg

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

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

https://i-blog.csdnimg.cn/direct/cd68ebd878a04c2ab87dc44ef8591c90.jpeg

Docker为什么比Linux快?

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

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

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

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

https://i-blog.csdnimg.cn/direct/c3b179e381f14341af3dc745ec4610b0.jpeg

帮助命令

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

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

docker 命令 – help   //万能命令

镜像命令

docker images 查看仓库源

https://i-blog.csdnimg.cn/direct/70ce205f1d4e4120a08f8954b0a24917.jpeg

REPOSITORY 镜像的仓库源

TAG 镜像的标签

IMAGE ID 镜像的ID

CREATED 镜像的创建事件

SIZE 镜像的大小

https://i-blog.csdnimg.cn/direct/a7e1b53f29d347748b30c4dd25ca5037.jpeg

-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

}

}

}

}

]