主頁 > 作業系統 > 容器技術之Docker常用命令說明

容器技術之Docker常用命令說明

2020-09-17 17:29:30 作業系統

  前面我們聊了docker的基本概念、架構、鏡像、網路、資料卷,回顧請參考https://www.cnblogs.com/qiuhom-1874/category/1766327.html;今天這篇博客主要是對前面博客中的常用命令做一個總結補充說明;

  在前面的博客中我們說過docker是基于LXC之上封裝來實作容器的,其核心就是利用內核的資源名稱空間和Cgroup實作資源的管控和隔離;這里要補充一點的是docker容器把資源抽象成物件;作為客戶端,docker這個命令其實就是在對這些抽象出來的資源物件做增刪查改的操作;docker的API是RESTful風格的API,所以它支持類似像http協議里的GET、POST、PUT、DELETE等操作;RESTful風格的API有這樣的特點;1、每一個URI代表1種資源;2、支持類似http里的GET、POST、PUT、DELETE;GET用來獲取資源,POST用來新建資源(也可以用于更新資源),PUT用來更新資源,DELETE用來洗掉資源;3、通過操作資源的表現形式來操作資源;4、資源的表現形式是XML或者HTML;5、客戶端與服務端之間的互動在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的資訊,這也是docker客戶端和服務端使用http或https協議通信的原因吧!!

  了解了上面docker的API風格,我們接下來再說說docker的物件;docker的物件大概有這樣幾個,1、鏡像(image),2、容器(container),3、網路(network),4、卷(volumes),5、插件(plugins);除上5種還有就是其他物件;其中最為核心的就image,container,network;對于docker來說運行一容器的最最基礎的是需要一鏡像,其次就是網路,對于容器來講,我們運行容器的目的就是為了提供服務,而絕大部分服務都是基于網路的,所以真正產生價值的是把服務通過網路提供給客戶;所以網路是必不可少的資源;

  鏡像相關操作

  鏡像搜索

[root@node1 ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13255               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1812                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   775                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   113                                     
bitnami/nginx                      Bitnami nginx Docker Image                      83                                      [OK]
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   74                                      [OK]
alfg/nginx-rtmp                    NGINX, nginx-rtmp-module and FFmpeg from sou…   64                                      [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   61                                      
nginxdemos/hello                   NGINX webserver that serves a simple page co…   50                                      [OK]
jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        44                                      [OK]
nginx/nginx-ingress                NGINX Ingress Controller for Kubernetes         32                                      
privatebin/nginx-fpm-alpine        PrivateBin running on an Nginx, php-fpm & Al…   25                                      [OK]
schmunk42/nginx-redirect           A very simple container to redirect HTTP tra…   18                                      [OK]
nginxinc/nginx-unprivileged        Unprivileged NGINX Dockerfiles                  16                                      
centos/nginx-112-centos7           Platform for running nginx 1.12 or building …   13                                      
blacklabelops/nginx                Dockerized Nginx Reverse Proxy Server.          13                                      [OK]
centos/nginx-18-centos7            Platform for running nginx 1.8 or building n…   13                                      
raulr/nginx-wordpress              Nginx front-end for the official wordpress:f…   12                                      [OK]
nginx/nginx-prometheus-exporter    NGINX Prometheus Exporter                       12                                      
mailu/nginx                        Mailu nginx frontend                            7                                       [OK]
sophos/nginx-vts-exporter          Simple server that scrapes Nginx vts stats a…   7                                       [OK]
bitnami/nginx-ingress-controller   Bitnami Docker Image for NGINX Ingress Contr…   5                                       [OK]
ansibleplaybookbundle/nginx-apb    An APB to deploy NGINX                          1                                       [OK]
wodby/nginx                        Generic nginx                                   1                                       [OK]
centos/nginx-110-centos7           Platform for running nginx 1.10 or building …   0                                       
[root@node1 ~]#

  提示:docker search 命令是從dockerhub中檢索對應鏡像的命令;該命令有個-s選項,是用于指定鏡像的星級;通過使用-s選項可以篩選出我們指定星級以上的鏡像;

[root@node1 ~]# docker search -s 5000 nginx
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                DESCRIPTION                STARS               OFFICIAL            AUTOMATED
nginx               Official build of Nginx.   13255               [OK]                
[root@node1 ~]# docker search -s 500 nginx 
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                     Official build of Nginx.                        13255               [OK]                
jwilder/nginx-proxy       Automated Nginx reverse proxy for docker con…   1812                                    [OK]
richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable of…   775                                     [OK]
[root@node1 ~]# 

  鏡像下載

[root@node1 ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete 
b90c53a0b692: Pull complete 
11fa52a0fdc0: Pull complete 
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@node1 ~]# docker image pull centos:7
7: Pulling from library/centos
524b0c1e57f8: Pull complete 
Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@node1 ~]#

  提示:docker pull和docker image pull兩個命令都是從dockerhub倉庫中下載指定鏡像;這里需要提示一下,docker的鏡像是鏡像名+版本組成的;如果我們只指定了鏡像名稱沒有指定版本,默認是latest版本(最新版);

  查看鏡像串列

[root@node1 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9beeba249f3e        13 days ago         127MB
centos              7                   b5b4d78bc90c        3 weeks ago         203MB
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9beeba249f3e        13 days ago         127MB
centos              7                   b5b4d78bc90c        3 weeks ago         203MB
[root@node1 ~]#

  提示:docker image ls 等同docker images 這兩個命令都是用來查看本地倉庫所有鏡像串列;

  除了上面的兩種操作外,還有其他操作,我們可以通過docker image --help 來查看對鏡像的命令幫助;如下

[root@node1 ~]# docker image --help

Usage:  docker image COMMAND

Manage images

Commands:
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

Run 'docker image COMMAND --help' for more information on a command.
[root@node1 ~]# 

  提示:build子命令是基于dockerfile來構建鏡像;history:顯示鏡像的歷史制作程序;import:從tarball匯入內容以創建檔案系統鏡像;inspect:顯示鏡像的詳細資訊;load:指定本地一個tar包格式的檔案從標準輸入匯入鏡像;prune:移除未使用的鏡像;push:把指定鏡像推送到倉庫;rm:洗掉一個或多個鏡像;save:匯出一個或多個鏡像到本地指定tar檔案中;默認是從標準輸出匯出;tag:對指定鏡像新建一個標簽;

  查看鏡像歷史

[root@node1 ~]# docker image history   nginx              
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
9beeba249f3e        13 days ago         /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B                  
<missing>           13 days ago         /bin/sh -c #(nop)  STOPSIGNAL SIGTERM           0B                  
<missing>           13 days ago         /bin/sh -c #(nop)  EXPOSE 80                    0B                  
<missing>           13 days ago         /bin/sh -c ln -sf /dev/stdout /var/log/nginx…   22B                 
<missing>           13 days ago         /bin/sh -c set -x     && addgroup --system -…   57.6MB              
<missing>           13 days ago         /bin/sh -c #(nop)  ENV PKG_RELEASE=1~buster     0B                  
<missing>           13 days ago         /bin/sh -c #(nop)  ENV NJS_VERSION=0.3.9        0B                  
<missing>           13 days ago         /bin/sh -c #(nop)  ENV NGINX_VERSION=1.17.10    0B                  
<missing>           13 days ago         /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0B                  
<missing>           2 weeks ago         /bin/sh -c #(nop) ADD file:7780c81c33e6cc5b6…   69.2MB              
[root@node1 ~]# 

  提示:以上默認是顯示部分命令,如果要顯示命令全部可以使用 --no-trunc選項;

  查看鏡像詳細資訊

[root@node1 ~]# docker image inspect nginx
[
    {
        "Id": "sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-05-15T20:15:52.366876108Z",
        "Container": "ed0a25109c2acf3dcb0b4926cad00692e01717b8417d36e50928aa6f03a711ca",
        "ContainerConfig": {
            "Hostname": "ed0a25109c2a",
            "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.17.10",
                "NJS_VERSION=0.3.9",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:23edbb1066877bcc22193518edb32ee3a50a18d52787c4f45f9a8bca95d329eb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGTERM"
        },
        "DockerVersion": "18.09.7",
        "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.17.10",
                "NJS_VERSION=0.3.9",
                "PKG_RELEASE=1~buster"
            ],
            "Cmd": [
                "nginx",
                "-g",
                "daemon off;"
            ],
            "ArgsEscaped": true,
            "Image": "sha256:23edbb1066877bcc22193518edb32ee3a50a18d52787c4f45f9a8bca95d329eb",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "maintainer": "NGINX Docker Maintainers <[email protected]>"
            },
            "StopSignal": "SIGTERM"
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 126773960,
        "VirtualSize": 126773960,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/4728ce1723abfab65d8065858c616360f45e258d53e7573be8e0f7bbe338be5d/diff:/var/lib/docker/overlay2/e998de0cd64ffe2b0410fb4595cbc3358b1b28626c8d356c6c6ac0ef97234a31/diff",
                "MergedDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/merged",
                "UpperDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/diff",
                "WorkDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07",
                "sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9",
                "sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]
[root@node1 ~]# 

  提示:docker image inspect 是顯示指定鏡像的詳細資訊;其中-f選項可以只顯示指定欄位;起著過濾功能

[root@node1 ~]# docker image inspect -f {{.RootFS}} nginx        
{layers [sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07 sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9 sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf] }
[root@node1 ~]# docker image inspect -f {{.RootFS.Type}} nginx 
layers
[root@node1 ~]# docker image inspect -f {{.RootFS.Layers}} nginx    
[sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07 sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9 sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf]
[root@node1 ~]# 

  提示:-f指定欄位必須從“.”開始且需要用雙大括號把欄位括起來;如果一級欄位是下還有二級欄位,可以使用“.”加二級欄位名稱來表示顯示二級欄位的值;以此類推;

  洗掉鏡像

[root@node1 ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
d9cbbca60e5f: Pull complete 
Digest: sha256:836945da1f3afe2cfff376d379852bbb82e0237cb2925d53a13f53d6e8a8c48c
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
[root@node1 ~]# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
cbdbe7a5bc2a: Pull complete 
Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9beeba249f3e        13 days ago         127MB
busybox             latest              78096d0a5478        2 weeks ago         1.22MB
centos              7                   b5b4d78bc90c        3 weeks ago         203MB
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker image rm centos:7
Untagged: centos:7
Untagged: centos@sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
Deleted: sha256:b5b4d78bc90ccd15806443fb881e35b5ddba924e2f475c1071a38a3094c3081d
Deleted: sha256:edf3aa290fb3c255a84fe836109093fbfeef65c08544f655fad8d6afb53868ba
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9beeba249f3e        13 days ago         127MB
busybox             latest              78096d0a5478        2 weeks ago         1.22MB
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]#

  提示:洗掉鏡像的前提是該鏡像沒有運行成容器;docker image rm 等同docker rmi命令;如果需要強行洗掉已經運行為容器的鏡像,可以使用-f選項來指定;

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker run --name a1 -d alpine
d0abe1efe7138dfb409574a785e77b4941a50534a23740d6f7d2f1af36d05589
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
d0abe1efe713        alpine              "/bin/sh"           4 seconds ago       Exited (0) 2 seconds ago                       a1
[root@node1 ~]# docker image rm alpine
Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container d0abe1efe713 is using its referenced image f70734b6a266
[root@node1 ~]# docker rmi alpine
Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container d0abe1efe713 is using its referenced image f70734b6a266
[root@node1 ~]# docker image rm -f alpine
Untagged: alpine:latest
Untagged: alpine@sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Deleted: sha256:f70734b6a266dcb5f44c383274821207885b549b75c8e119404917a61335981a
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@node1 ~]# 

  提示:只要運行為容器,不管容器是否是運行狀態,洗掉鏡像都需要先洗掉容器在洗掉鏡像,否則就需要用-f來指定強制洗掉鏡像;通常不建議這么干;

  給鏡像打標簽

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker image tag alpine:latest alpine:v1
[root@node1 ~]# docker image tag alpine:latest alpine:v2
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
alpine              v1                  f70734b6a266        5 weeks ago         5.61MB
alpine              v2                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker tag alpine alpine:v3 
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
alpine              v1                  f70734b6a266        5 weeks ago         5.61MB
alpine              v2                  f70734b6a266        5 weeks ago         5.61MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# 

  提示:docker image tag 和docker tag 等同;都是用于給鏡像打標簽;打標簽的意思類似給鏡像取別名的意思;

  移除未使用的鏡像

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              9beeba249f3e        13 days ago         127MB
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
alpine              v1                  f70734b6a266        5 weeks ago         5.61MB
alpine              v2                  f70734b6a266        5 weeks ago         5.61MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d0abe1efe713        alpine              "/bin/sh"           11 minutes ago      Exited (0) 11 minutes ago                       a1
[root@node1 ~]# docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: alpine:latest
untagged: alpine:v1
untagged: alpine:v2
untagged: nginx:latest
untagged: nginx@sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
deleted: sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9
deleted: sha256:8fb6373b4cca3383756d7fd7843dd92f95827e5f2913609e09a9621dcddb3752
deleted: sha256:8b09841626797a03a9fe5e73aa38aeacf9ff0ce85a3004236ff35234eec3b35c
deleted: sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07

Total reclaimed space: 126.8MB
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# 

  提示:-a表示移除全部未使用的鏡像;如果不想互動式確認可以使用-f選項,-f表示強制洗掉,不詢問;

  把指定鏡像推送到倉庫

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     latest              e408b1c6e04f        6 days ago          1.22MB
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker image push linux1874/myimg
The push refers to repository [docker.io/linux1874/myimg]
Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
[root@node1 ~]# docker image push linux1874/myimg
The push refers to repository [docker.io/linux1874/myimg]
4d567d38fed1: Layer already exists 
1079c30efc82: Layer already exists 
latest: digest: sha256:6c2f6b7a0df5ca0a46cd46d858e9fd564169471e6715c0155027ac77672508f6 size: 734
4d567d38fed1: Layer already exists 
1079c30efc82: Layer already exists 
v0.1: digest: sha256:6c2f6b7a0df5ca0a46cd46d858e9fd564169471e6715c0155027ac77672508f6 size: 734
[root@node1 ~]# 

  提示:如果是往自己私有倉庫里推送鏡像,需要先登錄,然后在推鏡像;這里需要注意一點鏡像的命名需要同倉庫一樣;如果是頂級倉庫則沒有“/”分割;如果推送鏡像沒有指定版本,默認會把本地指定鏡像的所有版本的推送到倉庫;

  鏡像匯出

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     latest              e408b1c6e04f        6 days ago          1.22MB
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker save alpine > alpine.tar.gz
[root@node1 ~]# ls
alpine.tar.gz
[root@node1 ~]# 

  提示:docker save默認是把鏡像輸出到標準輸出,所以我們匯出時需要用重定向的方式存盤到某個檔案中,通常這個檔案是tar格式的檔案;

  鏡像匯入

[root@node1 ~]# scp alpine.tar.gz 192.168.0.22:/root
The authenticity of host '192.168.0.22 (192.168.0.22)' can't be established.
ECDSA key fingerprint is SHA256:EG9nua4JJuUeofheXlgQeL9hX5H53JynOqf2vf53mII.
ECDSA key fingerprint is MD5:57:83:e6:46:2c:4b:bb:33:13:56:17:f7:fd:76:71:cc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.22' (ECDSA) to the list of known hosts.
alpine.tar.gz                                                   100% 5750KB  31.9MB/s   00:00    
[root@node1 ~]# 
[root@docker_node1 ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:22:36:7f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.22/24 brd 192.168.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe22:367f/64 scope link 
       valid_lft forever preferred_lft forever
[root@docker_node1 ~]# ls
alpine.tar.gz  
[root@docker_node1 ~]# docker images
WARNING: Error loading config file: /root/.docker/config.json: EOF
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
wordpress           latest              c3fa1c8546fb        4 weeks ago         540MB
mysql               5.7                 f965319e89de        4 weeks ago         448MB
httpd               2.4.37-alpine       dfd436f9a5d8        17 months ago       91.8MB
[root@docker_node1 ~]# docker load -i alpine.tar.gz 
WARNING: Error loading config file: /root/.docker/config.json: EOF
3e207b409db3: Loading layer  5.879MB/5.879MB
Loaded image: alpine:v3
[root@docker_node1 ~]# docker images
WARNING: Error loading config file: /root/.docker/config.json: EOF
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
wordpress           latest              c3fa1c8546fb        4 weeks ago         540MB
mysql               5.7                 f965319e89de        4 weeks ago         448MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
httpd               2.4.37-alpine       dfd436f9a5d8        17 months ago       91.8MB
[root@docker_node1 ~]#

  有關容器的操作

[root@node1 ~]# docker container --help
WARNING: Error loading config file: /root/.docker/config.json: EOF

Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker container COMMAND --help' for more information on a command.
[root@node1 ~]# 

  提示:docker container 操作大概有這么多;其中run ,exec,kill,port,logs,inspect用的比較多;其余命令其實我們看子命令就大概知道什么意思;如果需要查看某個子命令的具體用法和選項,我們可以加上子命令 然后用--help來查看幫助即可;如下

[root@node1 ~]# docker container logs --help
WARNING: Error loading config file: /root/.docker/config.json: EOF

Usage:  docker container logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative
                       (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative
                       (e.g. 42m for 42 minutes)
[root@node1 ~]# 

  提示:以上就是查看logs指明的用法和選項說明;

  創建容器

[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     latest              e408b1c6e04f        6 days ago          1.22MB
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker container create alpine
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
Status: Downloaded newer image for alpine:latest
13bcdb5067a31389acd75b8218f73c9d759590b81e178084de3c8110af330d0b
[root@node1 ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@node1 ~]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
13bcdb5067a3        alpine              "/bin/sh"           17 seconds ago      Created                                         tender_grothendieck
d0abe1efe713        alpine              "/bin/sh"           49 minutes ago      Exited (0) 49 minutes ago                       a1
[root@node1 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
13bcdb5067a3        alpine              "/bin/sh"           3 minutes ago       Created                                         tender_grothendieck
d0abe1efe713        alpine              "/bin/sh"           53 minutes ago      Exited (0) 53 minutes ago                       a1
[root@node1 ~]# 

  提示:用create命令創建容器,容器不會自動運行;查看容器用ls命令,其中ls不加選項表示查看運行狀態的容器串列,-a表示查看所有狀態容器串列;docker container ls 就等同docker ps 都用于查看運行態容器串列; 

  創建并運行容器

[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@node1 ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     latest              e408b1c6e04f        6 days ago          1.22MB
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker run --name a1 -d linux1874/myimg
6be4be4e54690bc10fb07b12cc00c3173636ed95bd456f04ed2cca6cb8cc93e9
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6be4be4e5469        linux1874/myimg     "/bin/sh -c '/bin/ht…"   4 seconds ago       Up 2 seconds                            a1
[root@node1 ~]# 

  提示:docker run 等同docker container run;其中--name表示指定容器的的名稱;-d表示后臺運行,不占據現有終端;用run命令表示運行一容器,如果本地沒有鏡像,它默認會從dockerhub上去拖鏡像,然后直接創建并運行容器;如果有鏡像,則直接創建并運行為容器;

  停止、啟動、重啟容器

[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6be4be4e5469        linux1874/myimg     "/bin/sh -c '/bin/ht…"   4 minutes ago       Up 4 minutes                            a1
[root@node1 ~]# docker stop a1
a1
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
6be4be4e5469        linux1874/myimg     "/bin/sh -c '/bin/ht…"   4 minutes ago       Exited (137) 5 seconds ago                       a1
[root@node1 ~]# docker start a1
a1
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6be4be4e5469        linux1874/myimg     "/bin/sh -c '/bin/ht…"   4 minutes ago       Up 3 seconds                            a1
[root@node1 ~]# docker restart a1
a1
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
6be4be4e5469        linux1874/myimg     "/bin/sh -c '/bin/ht…"   5 minutes ago       Up 6 seconds                            a1
[root@node1 ~]#

  提示:以上命令都支持后面跟多個容器,表示同時操作多個容器;docker start;docker stop ;docker restart;這三個命令等同docker contaier start,docker container stop ,docker container restart;停止容器除了正常用stop停止外,還可以使用kill命令停止容器;兩者不同的是一個是給docker行程發送15號信號,正常停止容器,一個是發送9號信號,強殺容器;如下

  提示:--rm選項表示啟動一次性容器,容器停止后,自動洗掉容器;

  查看容器日志

[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
linux1874/myimg     latest              e408b1c6e04f        6 days ago          1.22MB
linux1874/myimg     v0.1                e408b1c6e04f        6 days ago          1.22MB
nginx               stable-alpine       ab94f84cc474        5 weeks ago         21.3MB
alpine              latest              f70734b6a266        5 weeks ago         5.61MB
alpine              v3                  f70734b6a266        5 weeks ago         5.61MB
[root@node1 ~]# docker run --name n1 -d nginx:stable-alpine
a859fda7c6021a1e5398f744826d5a62257eb1d272b622ea32dac39f83009fc9
[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
a859fda7c602        nginx:stable-alpine   "nginx -g 'daemon of…"   3 seconds ago       Up 2 seconds        80/tcp              n1
[root@node1 ~]# docker container inspect -f {{.NetworkSettings.Networks.bridge.IPAddress}} n1
172.17.0.2
[root@node1 ~]# curl http://172.17.0.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@node1 ~]# elinks -dump http://172.17.0.2
                               Welcome to nginx!

   If you see this page, the nginx web server is successfully installed and
   working. Further configuration is required.

   For online documentation and support please refer to [1]nginx.org.
   Commercial support is available at [2]nginx.com.

   Thank you for using nginx.

References

   Visible links
   1. http://nginx.org/
   2. http://nginx.com/
[root@node1 ~]# docker logs n1
172.17.0.1 - - [29/May/2020:16:20:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.17.0.1 - - [29/May/2020:16:20:27 +0000] "GET / HTTP/1.1" 200 612 "-" "ELinks/0.12pre6 (textmode; Linux; -)" "-"
[root@node1 ~]# docker container logs n1
172.17.0.1 - - [29/May/2020:16:20:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.17.0.1 - - [29/May/2020:16:20:27 +0000] "GET / HTTP/1.1" 200 612 "-" "ELinks/0.12pre6 (textmode; Linux; -)" "-"
[root@node1 ~]# 

  提示:docker container logs等同docker logs命令,用于查看指定容器的日志資訊;跟蹤某個容器的日志資訊可以使用-f選項;該選項同tail -f選項一樣;

  洗掉容器

[root@node1 ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS               NAMES
d6bd7c0a29bb        nginx:stable-alpine   "nginx -g 'daemon of…"   3 seconds ago       Up 3 seconds        80/tcp              n1
[root@node1 ~]# docker container rm n1
Error response from daemon: You cannot remove a running container d6bd7c0a29bb4ea4cb60266727bd534fa086c8a70831dfea00791034bb2a84c4. Stop the container before attempting removal or force remove
[root@node1 ~]# docker container rm -f n1
n1
[root@node1 ~]# 

  提示:洗掉容器必須得是停止狀態的容器才可正常洗掉;如果洗掉正在運行的容器需要用到-f選項;docker rm 等同docker container rm 用于洗掉容器;

  附加到現運行的容器終端

  提示:容器運行服務和傳統系統上運行服務端方式有點不同,傳統運行服務都是把服務運行到后臺,而容器運行服務通常是把服務運行為前臺;所以我們進入到容器內部終端是可以直接看到nginx訪問日志的輸出的;docker attach命令等同docker container attach;

  通過上面對鏡像和容器的一些基本操作,總結為一點docker客戶端命令就是對docker的資源物件做增刪查改操作,每個資源物件后面都有一些子命令支持對該資源的操作;我們可以使用docker +資源物件+--help 來查看該資源物件支持那些操作,每個子命令的用法可以使用docker + 資源物件 + 子命令 + --help來查看具體資源物件子命令的操作命令用法和選項的說明;有關網路和卷的操作我這里就不多去演示;有興趣的朋友可以試試docker + 資源物件 + --help去了解每個資源物件的用法吧;

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/67264.html

標籤:Linux

上一篇:黑蘋果安裝中遇到的問題和注意事件

下一篇:請問這個該怎么處理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more