• Docker技术入门| Part02:Docker基础用法(Docker镜像使用、操作容器、数据管理)


    Docker镜像使用

    列出镜像

    $ docker images           
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
    php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
    nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
    mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
    httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
    ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
    hello-world         latest              690ed74de00f        6 months ago        960 B
    training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    TAG:镜像的标签,同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
    把所有的镜像的 ID 列出来

    $ docker images  -q
    5f515359c7f8
    05a60462f8ba
    fe9198c04d62
    00285df0df87
    329ed837d508
    329ed837d508
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    搜索镜像

    docker search 镜像名称
    
    • 1

    拉取一个新的镜像

    当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

    $ docker pull ubuntu:13.10
    
    • 1

    删除镜像

    $ docker image rmi [选项] <镜像1> [<镜像2> ...]
    
    • 1

    <镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
    镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

    $ docker rmi hello-world
    
    • 1

    可以使用 docker image ls -q 来配合使用 docker image rm,这样可以成批的删除希望删除的镜像。

    $ docker rmi 'docker images -q'
    
    • 1

    创建镜像

    当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

    1、从已经创建的容器中更新镜像,并且提交这个镜像

    在运行的容器内使用 apt-get update 命令进行更新。
    在完成操作之后,输入 exit 命令来退出这个容器。

    docker commit [选项]  容器ID或容器名 镜像名称:版本号
    
    • 1
    $ docker commit -m="has update" -a="coonote" e218edb10161 coonote/ubuntu:v2
    
    • 1

    各个参数说明:

    • -m: 提交的描述信息
    • -a: 指定镜像作者
    • e218edb10161:容器 ID
    • coonote/ubuntu:v2: 指定要创建的目标镜像名

    镜像是不能传输的,需要压缩和解压缩:

    docker save -o 压缩文件名称  镜像名称:版本号
    
    • 1
    docker load -i 压缩文件名称
    
    • 1

    2、使用 Dockerfile 构建一个新的镜像

    使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
    这里放在后面详细讲,Dockerfile详解

    Docker操作容器

    查看容器

    查看正在运行的容器

    docker ps
    
    • 1

    查看所有容器

    docker ps -a
    
    • 1

    运行创建容器

    $ docker run httpd
    
    • 1

    如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

    docker run -t -i ubuntu:15.10 /bin/bash 
    
    • 1
    docker run -d -i --name=c1 ubuntu:15.10 /bin/bash 
    
    • 1

    参数说明:

    • i: 交互式操作。保持容器运行
    • t: 为容器分配一个伪输入终端,容器创建后自动进入容器,输入 exit 命令来退出这个容器。
    • -d:后台运行创建容器,需要使用docker exec进入容器,退出后容器不关闭
    • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 shell,因此用的是 /bin/bash。
    • –name: 指定容器的名字

    维护式进入容器

    在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

    推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

    docker exec 参数
    
    • 1
    docker exec -it 243c32535da7 /bin/bash
    
    • 1

    启动已经停止运行的容器

    docker start 容器名
    
    • 1

    停止容器

    docker stop 容器名
    
    • 1

    删除容器

    docker rm 容器名
    
    • 1

    查看容器信息

    docker inspect 容器名
    
    • 1

    Docker数据管理

    数据卷

    数据卷的特点

    数据卷是宿主机中的一个文件或目录,
    当容器和数据卷目录绑定后,对方的修改会立即同步
    一个数据卷可以被多个容器同时挂载
    一个容器也可以被挂载多个数据卷

    数据卷作用

    容器数据持久化
    外部机器和容器间接通信
    容器之间数据交换

    创建一个数据卷

    与绑定挂载不同,可以在任何容器范围之外创建和管理卷。

    $ docker volume create my-vol
    
    • 1
    $ docker volume 
    
    DRIVER              VOLUME NAME
    local               my-vol
    
    • 1
    • 2
    • 3
    • 4

    在主机里使用以下命令可以查看指定 数据卷 的信息

    $ docker volume inspect my-vol
    [
        {
            "Driver": "local",
            "Labels": {},
            "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
            "Name": "my-vol",
            "Options": {},
            "Scope": "local"
        }
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    删除数据卷

    Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

    $ docker volume rm my-vol
    
    • 1

    清理无主的数据卷

    $ docker volume prune
    
    • 1

    挂载主机目录

    挂载主机目录有几种方式,其中volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上
    如果你用一个尚不存在的卷启动一个容器,Docker 会为你创建该卷。下面的示例将卷 my-vol2 挂载到容器中的 /app/。
    下面的 -v 和 --mount 示例产生相同的结果。

    –mount

    docker run -d \
      --name devtest \
      --mount source=myvol2,target=/app \
      nginx:latest
    
    • 1
    • 2
    • 3
    • 4

    -v

    docker run -d \
      --name devtest \
      -v myvol2:/app \
      nginx:latest
    
    • 1
    • 2
    • 3
    • 4

    注意:

    • 目录必须是绝对路径
    • 如果目录不存在,会自动创建
    • 可以挂载多个数据卷
      如:
    docker run -d \
      --name devtest \
      -v :/data1:/root/data1 \
      -v :/data2:/root/data2 \
      nginx:latest
    
    • 1
    • 2
    • 3
    • 4
    • 5

    一般来说,–mount 更明确、更详细。最大的区别在于,-v 语法将所有选项合并在一个字段中,而 --mount 语法则将它们分开。下面是每种标记的语法比较。
    如果需要指定卷驱动程序选项,必须使用 --mount。

    1. -v或–volume:

    由三个字段组成,以冒号字符(:)分隔。这些字段的顺序必须正确,而且每个字段的含义并不是一目了然的。

    • 对于已命名加密卷,第一个字段是加密卷的名称,在指定主机上是唯一的。对于匿名加密卷,第一个字段可以省略。
    • 第二个字段是文件或目录挂载在容器中的路径。
    • 第三个字段是可选的,是一个以逗号分隔的选项列表,如 ro。下面将讨论这些选项。
    1. -mount:

    由多个键值对组成,以逗号分隔,每个键值对由 = 元组组成。–mount语法比-v或–volume更冗长,但键值的顺序
    并不重要,标志的值也更容易理解。

    • type,可以是绑定、卷或 tmpfs。本主题讨论的是卷,因此类型总是卷。
    • source。对于已命名的加密卷,这是加密卷的名称。对于匿名卷,则省略此字段。可指定为源或 src。
    • destination的值是文件或目录在容器中挂载的路径。可以指定为 destination、dst 或 target。
    • 如果存在readonly选项,绑定挂载会以只读方式挂载到容器中。可以指定为 readonly 或 ro。
  • 相关阅读:
    Linux杀掉僵尸进程方法
    【Linux】计算机的软硬件体系结构
    IMBroker —— 基于FaaS的跨平台群消息工具
    springboot 启动原理、启动过程、启动机制的介绍
    台风来袭!建筑工地该如何防范台风!
    数学建模笔记-第十四讲-主成分分析
    【一文带你详细学习RocketMQ存储设计方案、RocketMQ中消息文件存储结构、过期文件删除机制、零拷贝与MMAP内存映射】
    银河麒麟服务器系统中intel-x710网卡丢包问题
    visual studio 2022 上传c++项目至github
    YOLOv8-Seg改进:Backbone改进 |Next-ViT堆栈NCB和NTB 构建先进的CNN-Transformer混合架构
  • 原文地址:https://blog.csdn.net/weixin_43399263/article/details/132694034