• Docker最常用的镜像命令和容器命令


    一、镜像相关命令#

    官方文档:https://docs.docker.com/referenc

    1.1查看镜像#

    [root@localhost ~]# docker images
    REPOSITORY    TAG                IMAGE ID       CREATED         SIZE
    hello-world   latest             feb5d9fea6a5   6 months ago    13.3kB
    mysql         5.7                8cf625070931   8 months ago    448MB
    rabbitmq      3.8.3-management   867da7fcdf92   22 months ago   181MB
    
    • REPOSITORY:镜像在仓库中的名称
    • TAG:镜像标签
    • IMAGE ID:镜像ID
    • CREATED:镜像创建日期(不是获取该镜像的日期)
    • SIZE:镜像大小

    这些镜像都是存储在 Docker 宿主机的 var/lib/docker 目录下的。

    1.2搜索镜像#

    当需要从网络中找出需要的镜像,就可以通过以下命令搜索。

    docker search 镜像名称
    

    image-20220528214624049

    • NAME:镜像名称
    • DESCRIPTION:镜像描述
    • STARS:用户评价(受欢迎的程度)
    • OFFICIAL:是否为官方构建
    • AUTOMATED:自动构建,表示该镜像是由 Docker Hub 自动构建流程创建的

    1.3拉取镜像#

    拉取镜像就是从中央仓管总下载镜像到本地

    docker pull 镜像名称
    

    例如拉取 CentOS 镜像到本地,如果不声明 Tag 镜像标签信息则默认拉取 Latest 版本,也可以通过:https://hub.docker.com 搜索该镜像,查看支持的 Tag 信息。

    image-20220528214640295

    通过 Tag 信息,下载centos7 的镜像。

    docker pull centos:7
    

    1.4删除镜像#

    按镜像 ID 删除镜像

    # 删除单个镜像
    docker rmi 镜像ID
    
    # 删除多个镜像
    docker rmi 镜像ID 镜像ID 镜像ID 
    

    docker images -q 可以查询到所有镜像的 ID,通过组合命令可以实现删除所有镜像的操作。

    docker rmi `docker images -q`
    

    注意:如果通过了某个镜像创建了容器,则该镜像无法删除。

    解决办法:先删除镜像中的容器,在删除该镜像。

    二、容器相关命令#

    2.1查看容器#

    查看正在运行的容器

    [root@localhost ~]# docker ps
    CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
    fdda4b253da0   centos:7   "/bin/bash"   3 seconds ago   Up 2 seconds             centos
    
    • CONTAINER ID:容器ID
    • IMAGE:所属容器
    • CREATED:创建时间
    • STATUS:容器状态
    • PORTS:端口
    • NAMES:容器名称

    查看停止的容器

    docker ps -f startus=exited
    

    查看所有容器(包括运行和停止)

    docker ps -a
    

    查看最后一次运行的容器

    docker ps -l
    

    列出最近创建的 n 个容器

    docker ps -n 3
    

    2.2创建与启动容器#

    docker run [OPTIONS] image [COMMAND] [ARG...]
    
    • -i:表示运行容器;
    • -t:表示容器启动后会进入其命令行,也就是创建容器后就能登录进去;
    • --name:为创建的容器命名;
    • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机的目录)可以用多个-v做多个目录映射;
    • -d:创建一个守护式容器在后台运行,不会自动登录容器;
    • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个-p做多端口映射;
    • -P:随机使用宿主机的可用端口与容器内暴露的端口映射;

    2.2.1创建并进入容器#

    通过一个镜像名称创建一个容器,并进入容器的 /bin/bash

    docker run -it --name 容器名称 镜像名称:标签 /bin/bash
    

    注意:Docker 容器运行必须有一个前台进程,如果没有前台进程执行,容器认为是空闲状态,就会自动退出。

    退出当前容器

    exit
    

    2.2.2守护式方式创建容器#

    docker run -id --name 容器名称 镜像名称:标签
    
    # 登录守护式容器
    docker exec -it 容器名称|容器ID /bin/bash
    

    2.3停止与启动容器#

    # 停止容器
    docker stop 容器名称|容器ID
    
    # 启动容器
    docker start 容器名称|容器ID
    

    2.4文件拷贝#

    将文件拷贝到容器内可以使用 cp 命令

    docker cp 需要拷贝的文件或目录 容器名称:容器目录
    

    将文件从容器内拷贝出来

    docker cp 容器名称:容器目录 需要拷贝的文件或目录
    

    2.5目录挂载#

    ​ 目录挂载是属于容器数据卷操作,我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样的话可以通过修改宿主机某个目录的文件而去影响容器,而且这个操作是双向绑定的,也就是说容器内的操作也会影响到宿主机,实现备份功能。

    ​ 但是容器被删除的时候,宿主机的内容并不会被删除,如果多个容器挂载同一个目录,其中一个容器被删除,其他容器的内容也不会受到影响。

    创建容器添加 -v 参数,格式为 宿主机目录:容器目录, 例如:

    docker run -id -v /mydata/docker_centos/data:/user/local/data --name centos01 centos:7
    
    # 多个目录挂载
    docker run -id -v 宿主机目录1:容器目录1 -v 宿主机目录2:容器目录2 --name 容器名 镜像名
    

    在挂载时可能会出现权限不足的提示。这是因为 CentOS7 中的安全模块 SELinux 把权限禁掉了,在 docker run 时通过 -privileged=true 给该容器加权限来解决挂载的目录没有权限的问题

    2.5.1匿名挂载#

    匿名挂载只需要写容器目录即可,容器外对应的目录会在 /var/lib/docker/volumes 中生成。

    # 匿名挂载
    docker run -id -v /user/local/data --name centos02 centos:7
    
    # 查看 volume 数据卷信息
    docker volume ls
    

    image-20220528214716028

    2.5.2具名挂载#

    具名挂载就是给数据卷取个名字,容器外对应的目录就会在 /var/lib/docker/volume 中生成。

    # 具名挂载
    docker run -id -v docker_centos_data:/usr/local/data --name centos03 centos:7
    
    # 查看 volume 数据卷信息
    docker volume ls
    

    image-20220528214725922

    2.5.3指定目录挂载#

    最开始的挂载就是指定目录挂载,这种方式的挂载不会在 /var/lib/docker/volume 目录生成内容。

    docker run -id -v /mydata/docker_centos/data:/user/local/data --name centos01 centos:7
    
    # 多个目录挂载
    docker run -id -v 宿主机目录1:容器目录1 -v 宿主机目录2:容器目录2 --name 容器名 镜像名
    

    2.5.4查看目录挂载关系#

    通过 docker volue inspect 数据卷名称 可以查看该数据卷对应宿主机目录地址。

    [root@localhost ~]# docker volume inspect centos_data
    [
        {
            "CreatedAt": "2022-03-30T20:40:07-07:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/centos_data/_data",
            "Name": "centos_data",
            "Options": null,
            "Scope": "local"
        }
    ]
    

    通过 docker inspect 容器ID或名称,在返回的 JSON 节点中找到 Mounts, 可以查看详细数据挂载信息。

    image-20220528214744357

    2.5.5只读只写#

    只读:只能通过修改宿主机内容实现对容器的数据管理

    docker run -it -v 宿主机目录:容器目录:ro --name 容器名 镜像名:标签
    

    只写:默认,宿主机和容器可以双向操作数据

    docker run -it -v 宿主机目录:容器目录:rw --name 容器名 镜像名:标签
    

    2.5.6继承(volumes-from)#

    也就是将其他一个或多个容器继承于某一个容器的挂载目录

    # 容器 centos7-01 指定目录挂载
    docker run -id -v /mydata/data:/use/local/data --name centos7-01 centos:7
    
    # 容器 centos7-02 和 centos7-03 相当于继承 centos7-01 容器的挂载目录、
    docker run -id --volumes-from centos7-01:ro --name centos7-04 centos:7	# 只读
    docker run -id --volumes-from centos7-01:rw --name centos7-05 centos:7	# 双向(默认)
    

    2.6查看容器IP地址#

    通过元信息查看

    docker inspect 容器名称|容器ID
    

    直接输入IP地址

    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名|容器ID
    

    2.6删除容器#

    # 删除指定容器
    docker rm 容器名称|容器ID
    
    # 删除多个容器
    docker rm 容器名称1|容器ID1 容器名称2|容器ID2
    
  • 相关阅读:
    数据结构-作业6
    一文搞懂APT攻击
    Python爬虫编程思想(159):Scrapy中的爬虫中间件
    Android之自定义时间选择弹框
    js原理及手写系列
    【2024秋招】2023-9-14 最右线下后端开发二面
    微机原理与系统设计笔记6 | 存储器系统设计
    说说 TCP的粘包、拆包
    【Linux】基本的指令(终章)
    CSS复习笔记
  • 原文地址:https://www.cnblogs.com/XiaoYang-sir/p/16081193.html