Docker【安装与基本使用】

【1】Docker的安装

注意:如果之前安装过docker其他版本,请删除干净。

docker-01

10.0.0.51

2G

docker-02

10.0.0.52

2G

 docker-01

[root@docker-01 ~]# cp -rp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
cp: overwrite ‘/etc/localtime’? y

[root@docker-01 ~]# ntpdate ntp1.aliyun.com

[root@docker-01 ~]# hwclock --systohc

[root@docker-01 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release

Docker【安装与基本使用】_第1张图片

[root@docker-01 ~]#  wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
--2023-07-17 21:26:12--  http://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.15.130, 2402:f000:1:400::2
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.15.130|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1919 (1.9K) [application/octet-stream]
Saving to: ‘/etc/yum.repos.d/docker-ce.repo’

100%[=========================================================>] 1,919       --.-K/s   in 0s      

2023-07-17 21:26:12 (10.2 MB/s) - ‘/etc/yum.repos.d/docker-ce.repo’ saved [1919/1919]

[root@docker-01 ~]# sed -i 's+donload.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

[root@docker-01 ~]# yum -y install docker-ce

[root@docker-01 ~]# mkdir docker-ce
[root@docker-01 ~]# find /var/cache/yum/x86_64/7/ -type f -name "*.rpm" | xargs mv -t docker-ce/

[root@docker-01 ~]# docker version 
Client: Docker Engine - Community
 Version:           24.0.4
 API version:       1.43
 Go version:        go1.20.5
 Git commit:        3713ee1
 Built:             Fri Jul  7 14:54:21 2023
 OS/Arch:           linux/amd64
 Context:           default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

[root@docker-01 ~]# systemctl start docker
[root@docker-01 ~]# systemctl enable docker

[root@docker-01 ~]# tar -zcvf docker-ce.tar.gz docker-ce/
[root@docker-01 ~]# scp -rp docker-ce.tar.gz [email protected]:/root
The authenticity of host '10.0.0.52 (10.0.0.52)' can't be established.
ECDSA key fingerprint is 91:14:1f:5c:f9:69:6e:12:5f:fa:dd:61:bc:ef:3e:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.52' (ECDSA) to the list of known hosts.
[email protected]'s password: 
docker-ce.tar.gz                                                 100%  116MB 116.5MB/s   00:01   

 docker-02

[root@docker-02 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2523  100  2523    0     0   6100      0 --:--:-- --:--:-- --:--:--  6108

[root@docker-02 ~]# tar xf docker-ce.tar.gz 
[root@docker-02 ~]# cd docker-ce/
[root@docker-02 docker-ce]# yum localinstall -y *.rpm

[root@docker-02 docker-ce]# systemctl start docker
[root@docker-02 docker-ce]# systemctl enable docker

[root@docker-02 docker-ce]# docker version 
Client: Docker Engine - Community
 Version:           24.0.4
 API version:       1.43
 Go version:        go1.20.5
 Git commit:        3713ee1
 Built:             Fri Jul  7 14:54:21 2023
 OS/Arch:           linux/amd64
 Context:           default

【2】docker常用命令 

搜索镜像 - search

[root@docker-01 ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        18762     [OK]       
unit                                              Official build of NGINX Unit: Universal Web …   6         [OK]       

下载镜像 - pull

[root@docker-01 ~]# docker pull nginx:latest
latest: Pulling from library/nginx
faef57eae888: Pull complete 
76579e9ed380: Pull complete 
cf707e233955: Pull complete 
91bb7937700d: Pull complete 
4b962717ba55: Pull complete 
f46d7b05649a: Pull complete 
103501419a0a: Pull complete 
Digest: sha256:08bc36ad52474e528cc1ea3426b5e3f4bad8a130318e3140d6cfe29c8892c7ef
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

 查看存在的镜像 - image ls

[root@docker-01 ~]# docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB

## 或使用 images
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB

 删除镜像 - image rm

[root@docker-01 ~]# docker image rm nginx:latest 
Untagged: nginx:latest
Untagged: nginx@sha256:08bc36ad52474e528cc1ea3426b5e3f4bad8a130318e3140d6cfe29c8892c7ef
Deleted: sha256:021283c8eb95be02b23db0de7f609d603553c6714785e7a673c6594a624ffbda
Deleted: sha256:a9de33035096cdf7bbaf7f3e1291701c0620d2a0e66152228abef35a79002876
Deleted: sha256:d66c35807d98c6f37bd2a14c6506a42d27a40fbdb564e233f7a78aafdc636c59
Deleted: sha256:a4c423818ed6dc12a545c349d0dc36a5695446448e07229e96c7235a126c2520
Deleted: sha256:c04094edc9df98c870e281f3b947a7782ca6d542d8715814ac06786466af3659
Deleted: sha256:c9c467815e8fe87d99f0f500495cf7f4f9096cf6c116ef2782e84bb17a4a5e06
Deleted: sha256:4645f26713fbea51190f5de52b88fbe27b42efd61c0dba87c81fa16df9a8f649
Deleted: sha256:24839d45ca455f36659219281e0f2304520b92347eb536ad5cc7b4dbb8163588

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

## 或使用 rmi
[root@docker-01 ~]# docker pull nginx:latest
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB
[root@docker-01 ~]# docker rmi nginx:latest 
Untagged: nginx:latest
Untagged: nginx@sha256:08bc36ad52474e528cc1ea3426b5e3f4bad8a130318e3140d6cfe29c8892c7ef
Deleted: sha256:021283c8eb95be02b23db0de7f609d603553c6714785e7a673c6594a624ffbda
Deleted: sha256:a9de33035096cdf7bbaf7f3e1291701c0620d2a0e66152228abef35a79002876
Deleted: sha256:d66c35807d98c6f37bd2a14c6506a42d27a40fbdb564e233f7a78aafdc636c59
Deleted: sha256:a4c423818ed6dc12a545c349d0dc36a5695446448e07229e96c7235a126c2520
Deleted: sha256:c04094edc9df98c870e281f3b947a7782ca6d542d8715814ac06786466af3659
Deleted: sha256:c9c467815e8fe87d99f0f500495cf7f4f9096cf6c116ef2782e84bb17a4a5e06
Deleted: sha256:4645f26713fbea51190f5de52b88fbe27b42efd61c0dba87c81fa16df9a8f649
Deleted: sha256:24839d45ca455f36659219281e0f2304520b92347eb536ad5cc7b4dbb8163588
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

 导出镜像 - save

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB
alpine       latest    c1aabb73d233   4 weeks ago   7.33MB
[root@docker-01 ~]# docker save nginx:latest -o docker_nginx_latest.tar.gz
[root@docker-01 ~]# ls
anaconda-ks.cfg  docker_nginx_latest.tar.gz

 将多个镜像导出到同一个tar包

[root@docker-01 ~]# docker save -o docker_nginx_latest_alpine_laster.tar.gz nginx:latest alpine:latest 
[root@docker-01 ~]# ls
anaconda-ks.cfg  docker_nginx_latest_alpine_laster.tar.gz

 导入镜像 - load

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker-01 ~]# docker load -i docker_nginx_latest.tar.gz 
24839d45ca45: Loading layer [==================================================>]  77.81MB/77.81MB
b821d93f6666: Loading layer [==================================================>]  113.2MB/113.2MB
1998c5cd2230: Loading layer [==================================================>]  3.584kB/3.584kB
f36897eea34d: Loading layer [==================================================>]  4.608kB/4.608kB
9fdfd12bc85b: Loading layer [==================================================>]   2.56kB/2.56kB
434c6a715c30: Loading layer [==================================================>]   5.12kB/5.12kB
3c9d04c9ebd5: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB

[root@docker-01 ~]# docker load -i docker_nginx_latest_alpine_laster.tar.gz 
Loaded image: nginx:latest
78a822fe2a2d: Loading layer [==================================================>]  7.622MB/7.622MB
Loaded image: alpine:latest
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB
alpine       latest    c1aabb73d233   4 weeks ago   7.33MB

导入镜像 - import (使用import导入的镜像,没有名称和tag)

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker-01 ~]# docker import docker_nginx_latest.tar.gz 
sha256:3a1b69daa7117d4087d303a9b9f8264bd6ddd89fc0aa98de15279bc54fd6417f
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
           3a1b69daa711   8 seconds ago   191MB

 镜像打标签tag - tag

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
           50e01e030252   7 seconds ago   191MB
[root@docker-01 ~]# docker tag 50e01e030252 nignx:latest
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nignx        latest    50e01e030252   36 seconds ago   191MB

 批量导入镜像

[root@docker-01 ~]# ls 
anaconda-ks.cfg  docker_alpine_latest.tar.gz  docker_nginx_latest.tar.gz
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker-01 ~]# for i in `ls *.tar.gz` ; do docker load -i ${i} ; done
78a822fe2a2d: Loading layer [==================================================>]  7.622MB/7.622MB
Loaded image: alpine:latest
24839d45ca45: Loading layer [==================================================>]  77.81MB/77.81MB
b821d93f6666: Loading layer [==================================================>]  113.2MB/113.2MB
1998c5cd2230: Loading layer [==================================================>]  3.584kB/3.584kB
f36897eea34d: Loading layer [==================================================>]  4.608kB/4.608kB
9fdfd12bc85b: Loading layer [==================================================>]   2.56kB/2.56kB
434c6a715c30: Loading layer [==================================================>]   5.12kB/5.12kB
3c9d04c9ebd5: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:latest
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    021283c8eb95   12 days ago   187MB
alpine       latest    c1aabb73d233   4 weeks ago   7.33MB

查看镜像属性信息 - inspect

[root@docker-01 ~]# docker image inspect nignx:latest 
[
    {
        "Id": "sha256:50e01e0302529b75135cdb604390e902edf0d2d33b15a4aad38549364d8a783d",
        "RepoTags": [
            "nignx:latest"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "Imported from -",
        "Created": "2023-07-17T14:00:39.736859118Z",
        "Container": "",
        "ContainerConfig": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "DockerVersion": "24.0.4",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 191044723,
        "VirtualSize": 191044723,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/26712e0da7400f397726cf91ce493a57ddba45fd2888eef4c47a02cb09b3c611/merged",
                "UpperDir": "/var/lib/docker/overlay2/26712e0da7400f397726cf91ce493a57ddba45fd2888eef4c47a02cb09b3c611/diff",
                "WorkDir": "/var/lib/docker/overlay2/26712e0da7400f397726cf91ce493a57ddba45fd2888eef4c47a02cb09b3c611/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:3535316b441652de429ba1b43116475d9096fe29db21febf279c6d34edf7a8f0"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-07-17T22:01:13.237222336+08:00"
        }
    }
]

 清理无名、无效的镜像 - prune

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
           7a3926d49b5c   3 seconds ago   7.62MB
nignx        latest    50e01e030252   2 minutes ago   191MB
[root@docker-01 ~]# docker image prune 
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:7a3926d49b5c85905e58e97413bb3867e8b4584b4d88a22392ae8d70de6ebd0a
deleted: sha256:827bcdd7ee4f04b14a30f473be61643971d64a7bacb639c1ad1f99d133598987

Total reclaimed space: 7.625MB
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nignx        latest    50e01e030252   2 minutes ago   191MB

 批量删除镜像、删除没有容器使用的镜像 - system prune

[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nignx        latest    50e01e030252   3 minutes ago   191MB
alpine       latest    c1aabb73d233   4 weeks ago     7.33MB
[root@docker-01 ~]# docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: nignx:latest
deleted: sha256:50e01e0302529b75135cdb604390e902edf0d2d33b15a4aad38549364d8a783d
deleted: sha256:3535316b441652de429ba1b43116475d9096fe29db21febf279c6d34edf7a8f0
untagged: alpine:latest
deleted: sha256:c1aabb73d2339c5ebaa3681de2e9d9c18d57485045a4e311d9f8004bec208d67
deleted: sha256:78a822fe2a2d2c84f3de4a403188c45f623017d6a4521d23047c9fbb0801794c

Total reclaimed space: 198.4MB
[root@docker-01 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker-01 ~]# 

创建、启动容器 - run -dit

[root@docker-01 ~]# docker run -dit nginx:latest 
a5ff63d7068da615129595535c0be909ee2055feb836e0584370e19a0fb7181d
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
a5ff63d7068d   nginx:latest   "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp    romantic_shtern
[root@docker-01 ~]# 

创建、启动并直接进入容器 - run -it (但是退出后,容器会死掉)

[root@docker-01 ~]# docker run -it alpine:latest 
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # exit
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                     PORTS     NAMES
c6e57a2ae517   alpine:latest   "/bin/sh"                15 seconds ago   Exited (0) 2 seconds ago             suspicious_ishizaka

 创建、启动容器让容器一直处于运行状态

[root@docker-01 ~]# docker run -dit alpine:latest 
1f602a2a733ef393edfb32e4958d5169dd40e6f8000e746e96c0743934a2b8e3
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                          PORTS     NAMES
1f602a2a733e   alpine:latest   "/bin/sh"                6 seconds ago        Up 5 seconds                              hungry_chatelet

[root@docker-01 ~]# docker exec -it 1f602a2a733e /bin/ash
/ # exit
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                          PORTS     NAMES
1f602a2a733e   alpine:latest   "/bin/sh"                34 seconds ago   Up 34 seconds                             hungry_chatelet

创建容器,但是不启动 - create 

[root@docker-01 ~]# docker create alpine:latest 
dff9b9819f1ea4d9a472552c5cccf950e8900e08925388f22b304cc0a4881844
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                     PORTS     NAMES
dff9b9819f1e   alpine:latest   "/bin/sh"                3 seconds ago        Created                              trusting_liskov

 创建容器,并指定容器名称 - name

[root@docker-01 ~]# docker run -dit --name test centos:latest
f2e7ddb5c9a3518d6145cd40c4f05813ee788ca33d36cdc2a155896e97d8f08c
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS                               NAMES
f2e7ddb5c9a3   centos:latest    "/bin/bash"   8 seconds ago    Up 7 seconds                                        test

docker服务重启后,自动拉起容器运行

[root@docker-01 ~]# docker run -dit --name test-01 --restart=unless-stopped nginx:latest 
96ce404fc5aab56a290d0da1146b1c5222951d4c02e84e7ac97017527347f8c2
[root@docker-01 ~]# 

----restart=unless-stopped :docker重启后,自动拉起(但是不包含在守护进程重启之前就停止的容器)
----restart=no             : docker重启后, 不自动拉起容器
--restart=always           :docker重启后, 总是拉起容器
--restart=on-failure:3     :docker服务不正常退出并重启后,自动拉起服务,若超过指定3次未拉起容器则放弃

  创建容器,并指定容器最大使用内存 - memory

[root@docker-01 ~]# docker run -dit --name test-mem --memory 256m centos:latest 
927a4400a7570dc04768219aac08188aca5412cd15b6eba91eb42a63c28f9e3b
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS                               NAMES
927a4400a757   centos:latest    "/bin/bash"   5 seconds ago    Up 5 seconds                                        test-mem

[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS
927a4400a757   test-mem            0.00%     536KiB / 256MiB       0.20%     648B / 0B        0B / 0B           1

[root@docker-01 ~]# docker inspect test-mem | grep -i mem
        "Name": "/test-mem",
            "Memory": 268435456,
            "CpusetMems": "",
            "MemoryReservation": 0,
            "MemorySwap": 536870912,
            "MemorySwappiness": null,

 容器配置swap - memory-swap

[root@docker-01 ~]# docker run -dit --name test --memory 300m --memory-swap 300m nginx:latest 
f86590ceb190c3f4768841e00daa3498e8a52d03ba37acc2c5321f1c7a655ff4

[root@docker-01 ~]# docker run -dit --name test-01 --memory 300m --memory-swap 300m centos:latest 
ad33ab277600a5ecb0c6074d37a0cd9510113827e73bea8d032f2a09245a5cb1

[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O     PIDS
ad33ab277600   test-01   0.00%     540KiB / 300MiB     0.18%     648B / 0B   0B / 0B       1
f86590ceb190   test      0.00%     6.344MiB / 300MiB   2.11%     648B / 0B   26.4MB / 0B   2

[root@docker-01 ~]# docker inspect test | grep  -i mem
            "Memory": 314572800,
            "CpusetMems": "",
            "MemoryReservation": 0,
            "MemorySwap": 314572800,
            "MemorySwappiness": null,

[root@docker-01 ~]# docker inspect test-01 | grep  -i mem
            "Memory": 314572800,
            "CpusetMems": "",
            "MemoryReservation": 0,
            "MemorySwap": 314572800,
            "MemorySwappiness": null,

 设置容器不被kill

  • 容器在运行中,如果内存使用超出最大限制后,docker会将容器杀死,但是容器中有些服务会很重要,不能被杀死
[root@docker-01 ~]# docker run -dit --name test --memory 256m --memory-swap 256m --no-healthcheck=false nginx:latest 
0ea31b515ca8dbb3fcf4976647ec9761198d4f432be98f5ef4ce8bb417c4c4ac

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
0ea31b515ca8   nginx:latest   "/docker-entrypoint.…"   7 seconds ago   Up 6 seconds   80/tcp    test

[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
0ea31b515ca8   test      0.00%     1.797MiB / 256MiB   0.70%     648B / 0B   0B / 0B     2

容器内存扩容 

[root@docker-01 ~]# docker inspect test-01 | grep -i mem
            "Memory": 268435456,
            "CpusetMems": "",
            "MemoryReservation": 0,
            "MemorySwap": 268435456,
            "MemorySwappiness": null,

[root@docker-01 ~]# docker update --memory 512m --memory-swap 512m test-01 
test-01

[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
835765b53151   test-01   0.00%     1.801MiB / 512MiB   0.35%     648B / 0B   0B / 0B     2
[root@docker-01 ~]# docker inspect test-01 | grep -i mem
            "Memory": 536870912,
            "CpusetMems": "",
            "MemoryReservation": 0,
            "MemorySwap": 536870912,
            "MemorySwappiness": null,

 容器只可以在cpu0上运行

[root@docker-01 ~]# docker run -dit --name test --memory 256m --memory-swap 256m --cpuset-cpus 0 nginx:latest 
5f4ea4c54fba032131d8df05d3f47d28d88054882ad174ab092166632d2467e2
[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O     BLOCK I/O   PIDS
5f4ea4c54fba   test      0.00%     1.801MiB / 256MiB   0.70%     648B / 0B   0B / 0B     2

 容器可以在cpu0-cpu1之间运行

[root@docker-01 ~]# docker run -dit --name test --memory 256m --memory-swap 256m --cpuset-cpus '0-1' nginx:latest

  容器只可以在cpu0、cpu1运行

[root@docker-01 ~]# docker run -dit --name test-02 --memory 256m --memory-swap 256m --cpuset-cpus '0,1' nginx:latest

 容器只能使用50%的CPU资源

[root@docker-01 ~]# docker run -dit --name test-01 --memory 256m --memory-swap 256m --cpuset-cpus 0 --cpu-shares 50 nginx:latest 
835765b53151d23cadc688aee2d69e373cf7ab4fe1931600b35e0e55b2cb9695

[root@docker-01 ~]# docker inspect test-01 | grep -i cpu
            "CpuShares": 50,
            "NanoCpus": 0,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "0",
            "CpusetMems": "",
            "CpuCount": 0,
            "CpuPercent": 0,

 容器重命名 - rename

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
a5ff63d7068d   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    romantic_shtern
[root@docker-01 ~]# docker rename a5ff63d7068d nginx
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS              PORTS     NAMES
a5ff63d7068d   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    nginx
[root@docker-01 ~]# 

Docker【安装与基本使用】_第2张图片

 进入容器、attach命令退出会容器停止 - attach

[root@docker-01 ~]# docker attach 4f2dd90101d7
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # exit
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                     PORTS     NAMES
4f2dd90101d7   alpine:latest   "/bin/sh"                31 seconds ago       Exited (0) 2 seconds ago             practical_poincare

 

  • 但是我们使用attach进入容器后,想退出但是不想容器死掉,使用 crtl + p + q,偷偷退出
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND     CREATED         STATUS         PORTS     NAMES
d6e4f2cdbdb7   alpine:latest   "/bin/sh"   8 seconds ago   Up 7 seconds             jovial_meninsky
[root@docker-01 ~]# docker attach d6e4f2cdbdb7
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # read escape sequence
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND     CREATED          STATUS          PORTS     NAMES
d6e4f2cdbdb7   alpine:latest   "/bin/sh"   27 seconds ago   Up 27 seconds             jovial_meninsky
[root@docker-01 ~]# 

 

  • 有意思的是:使用attach命令,不管是多少人进入这个容器,都是用的相同的终端下工作,所以说画面都是是同步的,执行的过程大家都能看到,当如果有人执行了exit,自己也会退出容器也会死掉

Docker【安装与基本使用】_第3张图片

 进入容器exec,退出容器不会停止 - exec

[root@docker-01 ~]# docker exec -it jovial_meninsky /bin/sh
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    test   tmp    usr    var
/ # exit
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND     CREATED         STATUS          PORTS     NAMES
d6e4f2cdbdb7   alpine:latest   "/bin/sh"   6 minutes ago   Up 20 seconds             jovial_meninsky

 那么使用exec进入的容器为什么退出时容器不会死掉?他和attach有什么区别?

  • 1、exec 进入容器时需要指定方式/bin/sh,也就是说会在进入容器时生成新的终端并在此终端下作业,所以说不管多少人使用exec进入相同的容器,都不会是同一个终端,并不会影响其他人在容器中的作业

 查看启动、运行中的容器 - ps

[root@docker-01 ~]# docker ps
CONTAINER ID   IMAGE           COMMAND     CREATED          STATUS          PORTS     NAMES
d6e4f2cdbdb7   alpine:latest   "/bin/sh"   14 minutes ago   Up 22 seconds             jovial_meninsky

# 或使用 container ls
[root@docker-01 ~]# docker container ls
CONTAINER ID   IMAGE           COMMAND     CREATED          STATUS          PORTS     NAMES
d6e4f2cdbdb7   alpine:latest   "/bin/sh"   14 minutes ago   Up 39 seconds             jovial_meninsky

 查看所有容器 - ps -a

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS              PORTS     NAMES
4cc6e2bd2878   nginx:latest    "/docker-entrypoint.…"   30 seconds ago   Created                       boring_hoover
d6e4f2cdbdb7   alpine:latest   "/bin/sh"                16 minutes ago   Up About a minute             jovial_meninsky
[root@docker-01 ~]#

 查看最新创建的容器

[root@docker-01 ~]# docker ps -a -l
CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS    PORTS     NAMES
4cc6e2bd2878   nginx:latest   "/docker-entrypoint.…"   About a minute ago   Created             boring_hoover

 删除容器 - rm(只能删除停止的容器)

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS     NAMES
546bc01de58e   alpine:latest   "/bin/sh"                2 minutes ago   Up 6 seconds             pedantic_morse
4ff3ae3ab2b7   nginx:latest    "/docker-entrypoint.…"   3 minutes ago   Up 6 seconds   80/tcp    musing_jackson
[root@docker-01 ~]# docker stop 546bc01de58e
546bc01de58e

[root@docker-01 ~]# docker rm pedantic_morse 
pedantic_morse
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS     NAMES
4ff3ae3ab2b7   nginx:latest   "/docker-entrypoint.…"   3 minutes ago   Up 36 seconds   80/tcp    musing_jackson
[root@docker-01 ~]# 

 强制删除正在运行中的容器 - f

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS          PORTS     NAMES
4ff3ae3ab2b7   nginx:latest   "/docker-entrypoint.…"   6 minutes ago   Up 46 seconds   80/tcp    musing_jackson
[root@docker-01 ~]# docker rm -f musing_jackson 
musing_jackson
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@docker-01 ~]#

 批量删除容器 - rm(rm:只能删除停止的容器 ,-f :删除所有,包含运行中的容器)

[root@docker-01 ~]# docker rm -f $(docker ps -aq)
4cc6e2bd2878
d6e4f2cdbdb7

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 删除已经停止的容器

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS                     PORTS     NAMES
796a3ad06ca9   nginx:latest   "/docker-entrypoint.…"   22 seconds ago   Exited (0) 9 seconds ago             test-01
cccbebdc927e   nginx:latest   "/docker-entrypoint.…"   27 seconds ago   Up 26 seconds              80/tcp    test-02
61b7b8736291   nginx:latest   "/docker-entrypoint.…"   33 seconds ago   Exited (0) 2 seconds ago             test-04
d4ef395e0e5e   nginx:latest   "/docker-entrypoint.…"   36 seconds ago   Up 36 seconds              80/tcp    test-03

[root@docker-01 ~]# docker ps -a | grep Exit | awk '{print $NF}' | xargs docker rm
test-01
test-04
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
cccbebdc927e   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   80/tcp    test-02
d4ef395e0e5e   nginx:latest   "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   80/tcp    test-03

停止容器 - stop

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS              PORTS     NAMES
4ff3ae3ab2b7   nginx:latest   "/docker-entrypoint.…"   4 minutes ago   Up About a minute   80/tcp    musing_jackson
[root@docker-01 ~]# docker stop 4ff3ae3ab2b7
4ff3ae3ab2b7
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                     PORTS     NAMES
4ff3ae3ab2b7   nginx:latest   "/docker-entrypoint.…"   5 minutes ago   Exited (0) 4 seconds ago             musing_jackson
[root@docker-01 ~]# 

 批量停止容器

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS     NAMES
546bc01de58e   alpine:latest   "/bin/sh"                3 seconds ago   Up 3 seconds             pedantic_morse
4ff3ae3ab2b7   nginx:latest    "/docker-entrypoint.…"   8 seconds ago   Up 7 seconds   80/tcp    musing_jackson
[root@docker-01 ~]# docker stop $(docker ps -aq)
546bc01de58e
4ff3ae3ab2b7
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS                       PORTS     NAMES
546bc01de58e   alpine:latest   "/bin/sh"                29 seconds ago   Exited (137) 4 seconds ago             pedantic_morse
4ff3ae3ab2b7   nginx:latest    "/docker-entrypoint.…"   34 seconds ago   Exited (0) 14 seconds ago              musing_jackson
[root@docker-01 ~]# 

 我们发现使用stop停止容器,过程会很慢,可以使用kill强制停止

[root@docker-01 ~]# docker kill $(docker ps -aq)
546bc01de58e
4ff3ae3ab2b7
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                       PORTS     NAMES
546bc01de58e   alpine:latest   "/bin/sh"                About a minute ago   Exited (137) 3 seconds ago             pedantic_morse
4ff3ae3ab2b7   nginx:latest    "/docker-entrypoint.…"   2 minutes ago        Exited (137) 3 seconds ago             musing_jackson
[root@docker-01 ~]# 

 重启容器 - restart

[root@docker-01 ~]# docker restart musing_jackson 
musing_jackson
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
4ff3ae3ab2b7   nginx:latest   "/docker-entrypoint.…"   5 minutes ago   Up 2 seconds   80/tcp    musing_jackson
[root@docker-01 ~]# 

 查看容器中使用的系统

[root@docker-01 ~]# docker run -dit alpine:latest 
6f422cf9500c53f10f12119a2706b8faf33303947ec9aea8dbf6428c81e8c77d
[root@docker-01 ~]# docker exec trusting_engelbart cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.18.2
PRETTY_NAME="Alpine Linux v3.18"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
[root@docker-01 ~]# 

将更改过的容器提交为一个新的镜像 - commit

[root@docker-01 ~]# docker exec -it cool_mendeleev /bin/bash
[root@cd3eb28ffbd0 /]# cat > /etc/yum.repos.d/nginx.repo << OK
> [nginx-stable]
> name=nginx stable repo
> baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
> gpgcheck=0
> enabled=1
> gpgkey=https://nginx.org/keys/nginx_signing.key
> module_hotfixes=true
> OK
[root@cd3eb28ffbd0 /]# yum -y install nginx
[root@a121db69daff /]# nginx
[root@cd3eb28ffbd0 /]# exit
exit

[root@docker-01 ~]# docker commit cool_mendeleev nginx/centos:7
sha256:daa47d59f276ad84e8a0e09547f2958f62e7bf15431850f64d5e7d3bbdb6495d
[root@docker-01 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
nginx/centos   7         daa47d59f276   3 seconds ago   458MB
nginx          latest    021283c8eb95   12 days ago     187MB
alpine         latest    c1aabb73d233   4 weeks ago     7.33MB
centos         7         eeb6ee3f44bd   22 months ago   204MB
centos         latest    5d0da3dc9764   22 months ago   231MB

[root@docker-01 ~]# docker run -dit -p 80:80 nginx/centos:7 
a121db69daff2260798d732c2ad37aa9c0cbb5a444e1c62d6aa03ec0950d3306
[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND       CREATED         STATUS         PORTS                               NAMES
a121db69daff   nginx/centos:7   "/bin/bash"   3 seconds ago   Up 2 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   objective_ptolemy
cd3eb28ffbd0   centos:7         "/bin/bash"   3 minutes ago   Up 3 minutes  

Docker【安装与基本使用】_第4张图片

在容器和宿主机中互相复制文件 - cp

[root@docker-01 ~]# touch test
[root@docker-01 ~]# mkdir dir

[root@docker-01 ~]# docker cp test objective_ptolemy:/root
Successfully copied 1.54kB to objective_ptolemy:/root
[root@docker-01 ~]# docker cp dir objective_ptolemy:/root
Successfully copied 1.54kB to objective_ptolemy:/root

[root@docker-01 ~]# docker exec -it a121db69daff /bin/bash
[root@a121db69daff /]# cd root/
[root@a121db69daff ~]# ls
anaconda-ks.cfg  dir  test

 查看容器和镜像是否进行改变 - diff

[root@docker-01 ~]# docker diff objective_ptolemy 
C /var
C /var/log
C /var/log/nginx
C /var/log/nginx/access.log
C /var/log/nginx/error.log
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
C /run
A /run/nginx.pid
C /root
A /root/test
A /root/dir
A /root/llll
C /root/.bash_history

Docker【安装与基本使用】_第5张图片

 监控容器 - events

[root@docker-01 ~]# docker events
2023-07-17T23:24:20.956090809+08:00 container exec_die a121db69daff2260798d732c2ad37aa9c0cbb5a444e1c62d6aa03ec0950d3306 (execID=c83af3df8e9971ef24f8edc266a21096a4e5e6c6aabb65efae559e653bb48716, exitCode=0, image=nginx/centos:7, name=objective_ptolemy, org.label-schema.build-date=20201113, org.label-schema.license=GPLv2, org.label-schema.name=CentOS Base Image, org.label-schema.schema-version=1.0, org.label-schema.vendor=CentOS, org.opencontainers.image.created=2020-11-13 00:00:00+00:00, org.opencontainers.image.licenses=GPL-2.0-only, org.opencontainers.image.title=CentOS Base Image, org.opencontainers.image.vendor=CentOS)

将容器进程的文件导出到本地 - export

[root@docker-01 ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND       CREATED          STATUS          PORTS                               NAMES
a121db69daff   nginx/centos:7   "/bin/bash"   11 minutes ago   Up 11 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   objective_ptolemy
cd3eb28ffbd0   centos:7         "/bin/bash"   15 minutes ago   Up 15 minutes                                       cool_mendeleev
[root@docker-01 ~]# docker export cd3eb28ffbd0 > test.tar
[root@docker-01 ~]# ls
anaconda-ks.cfg  test.tar

将export导出的文件,创建一个镜像 - import

[root@docker-01 ~]# docker import test.tar centos:7.1
sha256:783d6a9fa04516bb4cb1c781413c916f55781576e53f6ef83a8b365c94c8b4de
[root@docker-01 ~]# docker images
REPOSITORY     TAG       IMAGE ID       CREATED          SIZE
centos         7.1       783d6a9fa045   3 seconds ago    431MB

 查看容器的资源使用情况 - stats

[root@docker-01 ~]# docker stats a121db69daff

CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT    MEM %     NET I/O           BLOCK I/O     PIDS
a121db69daff   objective_ptolemy   0.00%     2.93MiB / 1.781GiB   0.16%     2.71kB / 2.29kB   3.96MB / 0B   3

[root@docker-01 ~]# docker stats --no-stream 
CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS
a121db69daff   objective_ptolemy   0.00%     396KiB / 1GiB         0.04%     648B / 0B        0B / 0B           1
cd3eb28ffbd0   cool_mendeleev      0.00%     64.07MiB / 1.781GiB   3.51%     58.5MB / 233kB   16.3MB / 9.65MB   1

 查看容器日志 - logs

[root@docker-01 ~]# docker logs cool_mendeleev

  查看容器进程 - top

[root@docker-01 ~]# docker top objective_ptolemy 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                21989               21968               0                   23:17               ?                   00:00:00            /bin/bash
root                22115               21968               0                   23:18               ?                   00:00:00            nginx: master process nginx
systemd+            22116               22115               0                   23:18               ?                   00:00:00            nginx: worker process

你可能感兴趣的:(Docker,docker,spring,cloud,容器)