未经博主允许,禁止转载本博客任何内容,如需转载或内容雷同请留言,谢谢合作,不胜感激!

Docker系列(三)管理命令大全

docker 毛竹、 1147℃ 0评论
常用命令图示,圆形表示docker运行状态,长方形表示执行的操作


OOM:程序申请内存过大,虚拟机无法满足我们,然后自杀了。这个现象通常出现在大图片的APP开发,或者需要用到很多图片的时候。
通俗来讲就是我们的APP需要申请一块内存来存放图片的时候,系统认为我们的程序需要的内存过大,即使系统有充分的内存,比如1G,
但是系统也不会分配给我们的APP,故而抛出OOM异常,程序没有捕捉异常,故而弹窗崩溃了

docker命令总结:

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
容器rootfs命令 — docker [commit|cp|diff]
镜像仓库 — docker [login|pull|push|search]
本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]
容器的状态:
created:
    runing:
    paused:
    stopped:
    deleted
container管理命令:

格式:docker container COMMAND;container可以省略
COMMAND:
    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
    exec        Run a command in a running container
    info        Display system-wide information
    inspect     Return low-level information on Docker objects
    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
    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
说几个常用或重要的:
ls:查看容器
    docker container ls/ps -a
run:
    Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]----创建容器并运行
    docker run --name duanx -it --network bridge httpd:2.4.37-alpine busybox-----it表示前台运行,启动后如果输入exit(退出容器后进程就会关闭处于Exited状态),也可以-d表示后台运行再次进入容器用exec命令
    当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
        1、检查本地是否存在指定的镜像,不存在就从公有仓库下载
        2、利用镜像创建并启动一个容器
        3、分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
        4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
        5、从地址池配置一个 ip 地址给容器
        6、执行用户指定的应用程序
        7、执行完毕后容器被终止
exec:----运行正在运行的容器的命令
    Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
        docker exec -it duanx httpd:2.4.37-alpine-----用了后台创建容器再前台运行
rm:
    Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]----删除容器,删除镜像用rmi,可加-f强制删除;
        docker container run --name duanx -it --rm httpd:2.4.37-alpine---exit后自动删除而不是Exited状态
inspect:
    Usage:  docker inspect [OPTIONS] CONTAINER----也可查image [CONTAINER...]-----查到容器的具体信息,很有用
        docker inspect duanx
prune:
    docker container prune [OPTIONS]----也可清除image
        docker container prune-----清除所有的容器
commit:
    创建一个新的镜像,下面文章会详细介绍
image管理命令:

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
ls:查看镜像
    docker images/image ls
tag:
    docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]--------给镜像做标签便于区分
    [root@centos7b ~]# docker tag httpd:2.4.37-alpine httpd:duanx
        [root@centos7b ~]# docker images 
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        httpd               2.4.37-alpine       11fc0c2a2dfa        6 days ago          91.8MB
        httpd               duanx               11fc0c2a2dfa        6 days ago          91.8MB
inspect:
    Usage:  docker image inspect [OPTIONS] IMAGE [IMAGE...]
    docker inspect httpd:2.4.37-alpine
prune:
    Usage:  docker image prune [OPTIONS]----删除所有没在用的容器
    docker image prune httpd:2.4.37-alpine
pull:从docker hub上拖镜像到本地
push:从本地推镜像到仓库

注:至于其他没有提及到的命令和选项可用docker container/images COMMAND -h来查看使用

Docker默认网络

1、启动docker后,系统会自动生成一个虚拟桥docker0,IP:172.17.0.1/16,后续创建容器时,如果没有指定网络,默认为桥接模式,会自动创建一对虚拟网卡,连接容器和此桥
2、、启动容器,使用默认网络,连接至连接docker0,会分配一个172.17的地址'
3、默认生成iptables规则,自动生成ANET规则,将172.17段地址通过net桥都会伪装成host地址
    #iptables -nvL
        Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 MASQUERADE  all  --  *      !docker0  172.17.0.0/16        0.0.0.0/0
4、宿主机之外的网络想要访问容器中的httpd,需要做DNET配置,docker网络服务部分解释
自定义镜像

    每启动一个容器,就会生成专用的读写层,删除容器此层所有数据也会丢失,如果想要保存此层内容,就需要将此层保存为镜像,所以我们可以自定义镜像来保存我们想要的内容
命令格式
    docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
作用
    可以将属于此容器的专属可写层中所作出的所有修改保存为镜像层,只保存最上层,下层的可读层本来都存在,挂载镜像层后,所依赖的下层会自动挂载
选项
    -c:定义新的运行命令
    -a:作者
    -p:提交为镜像时,让容器暂停
示例1
    基于镜像busybox运行容器a1,在专属层中创建web目录
    [root@duanx2 ~]$docker container run --name a1 -it busybox
    # vi /data/web/htdocs/index.html
    保存容器a1的专属层
    [root@duanx2 ~]$docker container commit  a1
    查看保存的专属层镜像文件,此时没有标签
    [root@duanx2 ~]#docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    <none>              <none>              ad4299331aad        11 seconds ago      1.15MB
    busybox             latest              59788edf1f3e        2 months ago        1.15MB
    为镜像文件打标签
    [root@duanx2 ~]$docker image tag ad4299331aad  duanx:v0.0.1
    运行保存的镜像文件
    [root@duanx2 ~]$docker container run --name a1-1  -it duanx:v0.0.1
    / # cat /data/web/htdocs/index.html    <==可以看到原专属读写层的数据
示例2:自定义一个httpd镜像文件
    pull一个centos基础镜像
    [root@duanx3 ~]$docker pull centos:7
    基于基础镜像运行容器centos-base1,只要宿主机可以访问互联网,容器默认已经做了net,所以容器就可以访问
     '启动容器centos-base1'
    [root@duanx3 ~]$docker run --name centos-base1 -it  centos:7
    安装httpd服务,根据需要安装php、php-mysql、vim、net-tools网络基本工具
    [root@c507738061ff /]# yum install -y httpd php php-mysql vim net-tools
    [root@c507738061ff /]# vim /var/www/html/info.php
        <?php
                phpinfo();
        ?>
    将此容器读写层做成镜像,并取名为duanx1-httpd:v0.1-2.4,会自动添加标签
    [root@duanx3 ~]#docker commit centos-base1 duanx-httpd:v0.1-2.4
    sha256:cdfa041d9a05cca4b674862b4ace6659ddd5146afeec4c66047cf28727b3040f
    [root@duanx3 ~]#docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    duanx-httpd         v0.1-2.4            cdfa041d9a05        7 seconds ago       382MB
    centos              7                   1e1148e4cc2c        37 hours ago        202MB
    将定义的镜像文件修改为默认前台启动httpd,并起名duanx-httpd:v0.2-2.4
    [root@duanx3 ~]#docker commit -a "duanx@duanx.vip" -c 'CMD ["/usr/sbin/httpd","-DFOREGROUND"]' -p centos-base1 duanx-httpd:v0.2-2.4
    sha256:ec8afe1b95954ebe4f8588eac62fd18ad5b4919bdfb351f059ec07b04e746fd4
    '查看镜像文件详细信息'
    [root@duanx ~]$docker image inspect duanx-httpd:v0.2-2.4        
            "Cmd": [
                    "/usr/sbin/httpd",   <==默认启动信息确认修改
                    "-DFOREGROUND"
    '在宿主机上启动镜像,查看主页'
    [root@duanx ~]$docker run --name web1 duanx-httpd:v0.2-2.4
    sh-4.2# curl http://172.17.0.2/info.php即可查看php测试页面
推送镜像

阿里云镜像仓库登录地址:https://cr.console.aliyun.com/
1. 登录阿里云Docker Registry
    [root@duanx3 ~]#docker login --username=2579082440@qq.com registry.cn-hangzhou.aliyuncs.com
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在产品控制台首页修改登录密码。
2、将自定义的镜像文件,打标签为阿里云个人仓库标签格式(在镜像仓库->操作->管理中可查看格式)
    [root@duanx3 ~]#docker tag centos-httpd:v0.2-2.4 registry.cn-hangzhou.aliyuncs.com/v8/duanx:v0.2-2.4
3、使用push推镜像文件,推送成功后,在阿里云容器镜像仓库中管理->镜像版本可查看
    [root@duanx3 yum.repos.d]#docker images
        REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE
        centos-httpd                                 v0.2-2.4            ec8afe1b9595        2 hours ago         382MB
        registry.cn-hangzhou.aliyuncs.com/v8/duanx   v0.2-2.4            ec8afe1b9595        2 hours ago         382MB
    [root@duanx3 ~]#docker push registry.cn-hangzhou.aliyuncs.com/v8/duanx
    The push refers to repository [registry.cn-hangzhou.aliyuncs.com/v8/duanx]
    bd84c8a6e719: Pushed 
    071d8bd76517: Pushed 
    v0.2-2.4: digest: sha256:ae5919cc6afbbfe45b975beea0ac912f216b40af52a01c15e4f4c16e23c86347 size: 741
4、登出登录的阿里云仓库
    [root@duanx3 ~]#docker logout registry.cn-hangzhou.aliyuncs.com/
    Removing login credentials for registry.cn-hangzhou.aliyuncs.com

分发镜像

1、将镜像保存到本地磁盘
    [root@duanx3 ~]#docker image save centos-httpd:v0.2-2.4 duanx-httpd:v0.1-2.4 -o /data/centos-httpd.tar------>保存了这两个镜像
2、将保存的镜像发送给192.168.1.12上
    [root@duanx3 ~]#scp /data/centos-httpd.tar 192.168.1.12:/data------节点12没有/data文件需创建
3、192.168.1.12上查看分发的镜像
    [root@duanx2 ~]#docker load -i /data/centos-httpd.tar 
    071d8bd76517: Loading layer [==================================================>]  210.2MB/210.2MB
    bd84c8a6e719: Loading layer [==================================================>]  184.2MB/184.2MB
    Loaded image: centos-httpd:v0.2-2.4
    Loaded image: duanx-httpd:v0.1-2.4
    [root@duanx2 ~]#docker images 
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos-httpd        v0.2-2.4            ec8afe1b9595        2 hours ago         382MB
    duanx-httpd         v0.1-2.4            cdfa041d9a05        2 hours ago         382MB
docker网络
docker network原理图如下:


docker network分类:
    容器创建并启动时可用网络
    1)Closed container:封闭式容器
    只有lo接口(Loopback interface),例如本机备份程序,批处理层(只是做计算)
    2)Bridged container A:桥接式容器
    统称至少有2个网络接口, lo和虚拟以太网网卡
    3)Joined container A & B:联盟式容器
    kernel namespace的mount、PID、User相隔离,共享Network、IPC(本机间进程通信)、UTS(网络通信主机名解析)名称空间,两个容器看到相同的网络接口,至少2个网络接口,可以接桥接也可以直接加入宿主机,以先接入的容器为准
    4)Open container
    在容器中看到的所有网络,就是宿主机的物理网卡信息,相当于Host
docker network COMMAND:
    命令格式:
        docker network COMMAND
    COMMAND:
        connect     Connect a container to a network
        create      Create a network
        disconnect  Disconnect a container from a network
        inspect     Display detailed information on one or more networks
        ls          List networks---显示本机可用网络
        prune       Remove all unused networks---移除所有未被容器使用的网络
        rm          Remove one or more networks
    [root@duanx3 ~]#docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    fef1bad101e0        bridge              bridge              local
    4aeef0d4506a        host                host                local
    e3adb644490c        none                null                local
    这里重点说下create命令:
        -d:要创建和管理的网络使用的驱动(bridge(桥接)、host(共享宿主机网络)、macvlan(基于mac地址划分的vlan网络)、null(无网络)、overlay(叠加网络,隧道式网络,如VXLAN,jre)),使用桥接式网络的话
        --gateway strings:来指定网关是谁,网关指对应的子网网络配置给桥的地址;
        --ip-range strings:地址池,不指定将使用除网关外的所有地址;
        --ipam-driver string:获取地址的方式,建议使用默认的地址分配器(  default);
        --subnet strings:定义使用的子网,可以不指定,会使用默认的ip地址计算
    示例:
    创建网络mynet1,网关为11.0.0.1,网络ID为16位
        [root@duanx2 ~]#docker network create -d bridge --gateway 11.0.0.1 --subnet 11.0.0.0/16 mynet1
        8dc6b4b16475f3131de1fc146872548702ef285a655af16c0c0e58ff1b3211da
    查看网络,可以看到上面创建的网络
        [root@duanx2 ~]#ifconfig 
        br-8dc6b4b16475: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 11.0.0.1  netmask 255.255.0.0  broadcast 11.0.255.255
    支持修改网卡名,修改网络名,但会导致下面docker网络创建失败
        [root@duanx2 ~]$ifconfig  br-8dc6b4b16475 down  <==先禁用网络
        [root@duanx2 ~]$ip link set br-8dc6b4b16475 name  docker1  <==修改为docker1
    将指定容器加入到创建的网络mynet1中
        [root@duanx2 ~]#docker run --name net5 --network mynet1 -it --rm  busybox
    将指定容器加入到两个网络中,只有后面的网络生效
        [root@duanx2 ~]#docker run --name net6 --network mynet1 --network bridge  -it --rm  busybox
        / # ifconfig 
        eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:04  
                  inet addr:172.17.0.4  Bcast:172.17.255.255  Mask:255.255.0.0
    connect:
        可以实现一个容器接入多个网络
        启动一个容器并指定创建的网络mynet1
            [root@duanx2 ~]#docker run --name n1 --network mynet1 -it --rm busybox
        将网络(如bridge)加入到n1容器中
            [root@duanx2 ~]#docker network connect bridge n1     
    四种容器网络制定示例
        1、none网络接入
            [root@duanx2 ~]#docker run --name net1 -it --network none busybox
            / # ifconfig 
            lo        Link encap:Local Loopback  
                      inet addr:127.0.0.1  Mask:255.0.0.0
        2、bridge网络接入,默认不指定即为bridge类型
            [root@duanx2 ~]#docker run --name net2 -it --network bridge busybox
            / # ifconfig 
            eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  
                      inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
            lo        Link encap:Local Loopback  
            inet addr:127.0.0.1  Mask:255.0.0.0
        3、联盟式网络接入
            拿容器net2为例
               [root@duanx2 ~]#docker run --name net2 -it --network bridge busybox 
               / # mkdir /data
               / # vi /data/index.html    duanx.vip
               / # httpd -h /data/<==启动httpd服务,指定页面文件路径
            启动net3容器
                [root@duanx2 ~]#docker run --name net3 -it --network container:net2 busybox
                / # wget -O - -q localhost<==访问当前终端,-表示输入到当前终端
                duanx.vip<==看到b1的web页面,看上去与b1为同一个主机
        4、host网络接入
            [root@duanx2 ~]#docker run --name net4 -it --network host busybox----->能看到和宿主机一样的网络
外网如何访问docker容器内服务

端口映射的目的:
    1、容器内的ip都是基于本地系统的;
    2、非本地主机不能访问到容器的端口,即端口只能被本地主机访问;但是外网却不能访问容器内的服务,为了解决这一问题,就有了容器暴露端口的办法;
实现:
    外网可以访问主机IP地址和端口,主机又可以访问容器端口,所以只要做一个映射,把主机的ip地址和端口信息映射到容器的某个端口上,换句话说就是当访问主机的某个端口时候,等于访问容器的某个端口,容器在启动的时候就做好这样一个映射,那就实现了容器被外网所访问。
为docker run命令使用-p选项即可实现端口映射,无须手动添加规则
端口映射支持的格式有:
    container------------------------#未指定ip port、主机port,指定容器port
    hostport:container---------------#未指定ip port、指定主机port、指定容器port
    ip:hostport:containerport--------#指定ip、指定主机port、指定容器port
    ip::containerport----------------#指定ip、未指定主机port、指定容器port
这里以httpd容器(imgae:httpd:2.4.37-alpine)为例:
    1)将net1容器80端口暴露给某主机的一个随机端口,那么访问主机的这个随机端口即可访问到net1容器的80端口,即访问到net1容器网页内容
        [root@duanx3 ~]#docker run --name net1 --rm -p 80  httpd:2.4.37-alpine
        [root@duanx3 ~]#curl http://192.168.1.13:32774
            <html><body><h1>It works!</h1></body></html>
        [root@duanx3 ~]#docker port net1
            80/tcp -> 0.0.0.0:32774
    2)将net1容器80端口暴露某主机的8080端口,那么访问该主机的8080端口即可访问到net1容器的80端口,即访问到net1容器网页内容
        [root@duanx3 ~]#docker run --name net1 --rm -p 8080:80  httpd:2.4.37-alpine
        [root@duanx3 ~]#curl http://192.168.1.13:8080
            <html><body><h1>It works!</h1></body></html>
        [root@duanx3 ~]#docker port net1
            80/tcp -> 0.0.0.0:8080
    3)将net1容器80端口暴露给指定的192.168.1.13的8080端口,那么访问该主机的8080端口即可访问到net1容器的80端口,即访问到net1容器网页内容
        [root@duanx3 ~]#docker run --name net1 --rm -p 8080:80  httpd:2.4.37-alpine
        [root@duanx3 ~]#curl http://192.168.1.13:8080
            <html><body><h1>It works!</h1></body></html>
        [root@duanx3 ~]#docker port net1
        [root@duanx3 ~]#docker port net1
            80/tcp -> 192.168.1.13:8080
    4)将net1容器80端口暴露给指定的192.168.1.13的一个随机端口,那么访问该主机的这个随机端口即可访问到net1容器的80端口,即访问到net1容器网页内容
        [root@duanx3 ~]#docker run --name net1 --rm -p 192.168.1.13::80  httpd:2.4.37-alpine
        [root@duanx3 ~]#curl http://192.168.1.13:32770
            <html><body><h1>It works!</h1></body></html>
        [root@duanx3 ~]#docker port net1
            80/tcp -> 192.168.1.13:32770
docker volume

写时复制
docker镜像使用了写时复制(copy-on-write)的策略,在多个容器之间共享镜像,每个容器在启动的时候并不需要单独复制一份镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,再在上面覆盖一个可读写的容器层。在未更改文件内容时,所有容器共享同一份数据,只有在docker容器运行过程中文件系统发生变化时,才会把变化的文件内容写到可读写层,并隐藏只读层中的老版本文件。写时复制配合分层机制减少了镜像对磁盘空间的占用和容器启动时间。

什么是存储卷volume
为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的。Docker镜像被存储在一系列的只读层。当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部。如果正在运行的容器修改了现有的文件,该文件将拷贝底层的只读层到最顶层的读写层。在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下。当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失。此只读层及在顶部的读写层的组合被Docker称为Union File System(联合文件系统)。
为了能够保存(持久)数据以及共享容器间的数据,Docker提出了Volumes的概念。很简单,volumes是目录(或者文件),它们是外部默认的联合文件系统或者是存在于宿主文件系统正常的目录和文件。
2.为什么使用数据卷volume
Docker的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。
(1)容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问
(2)多个容器之间的数据无法共享
(3)当删除容器时,容器产生的数据将丢失
为了解决这些问题,Docker引入了数据卷(volume)机制。volume是存在一个或多个容器中的特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下便利。
(1)volume在容器创建时就初始化,在容器运行时就可以使用其中的文件
(2)volume能在不同的容器之间共享和重用
(3)对volume中的数据的操作会马上生效
(4)对volume中数据操作不会影响到镜像本身
(5)volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除

DOCKER中存储卷类型
    Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同;
Bind mount volume(绑定挂载卷)
    需要指定容器上使用的目录,也需要指定宿主机上使用的目录,将两者建立映射关系
Docker-managed volume(由docker管理的卷)
    动态,指定容器使用哪个目录作为卷,在宿主机上使用哪个目录作为后端存储不能手动指定,由docker 守护进程在固定路径下创建一个子目录,此目录事先是不存在的
如何使用存储卷
    1)Bind-mount Volume绑定卷(由宿主机管理的卷)
        [root@duanx3 ~]#docker run --name v1 -it -v /data/volume/:/data busybox
        / # cd /data/
        在宿主机的/data/volume/下创建a文件,那么容器v1的/data/下也会同步有a文件;宿主机--->容器的映射
    2)Docker-managed volume(由docker管理的卷)
        [root@duanx3 ~]#docker run --name v1 -it -v /data/ busybox
        / # cd /data/
        /data # touch a
        [root@duanx3 ~]#docker inspect v1
            "Mounts": [
                {
                    "Type": "volume",------容器挂载的类型
                    "Name": "fedbf648b716c0f512adb173403dc3e846cdef7e82affbbf6915798e9505d6c3",------存储卷名
                    "Source": "/var/lib/docker/volumes/fedbf648b716c0f512adb173403dc3e846cdef7e82affbbf6915798e9505d6c3/_data",------源,容器挂载映射到宿主机上的路径
                    "Destination": "/data",-----容器内路径
                    "Driver": "local",--------使用本地文件系统
                    "Mode": "",
                    "RW": true,
                    "Propagation": ""
                }
            ]
        [root@duanx3 ~]#ls /var/lib/docker/volumes/fedbf648b716c0f512adb173403dc3e846cdef7e82affbbf6915798e9505d6c3/_data即可看到a文件
    3)共享卷
    多个容器的卷使用同一个宿主机的目录,例如v1和v2容器,都使用/data/volumes/目录
        [root@duanx3 ~]#docker run --name v1 -it -v /data/volume:/data/ busybox
        [root@duanx3 ~]#docker run --name v2 -it -v /data/volume:/data/ busybox
        在宿主机/data/volume/下创建a文件,则在容器v1和v2的/data/下都可以看到a文件,相当于宿主机---->v1和v2的映射
    复制使用其它容器的卷,为docker run命令使用--volumes-from选项
        [root@duanx3 ~]#docker run --name v1 -it -v /data/volume/:/data busybox-----为容器v1创建存储卷/data/volume
        [root@duanx3 ~]#docker run --name v2 -it --volumes-from v1 busybox------在容器v2中应用v1的存储卷
        相当于宿主机----->v1------>v2的映射,v1创建了b文件则在v2也能看到b文件
管理存储卷命令
    格式
        docker volume COMMAND
    COMMAND:
        ls---列出所有的卷
            [root@duanx3 ~]#docker volume ls
            DRIVER              VOLUME NAME
            local               d80e7705de3c994085e9a943b6bfd802f6eddf0efc1c8e94afdd15c0e19c3f80
        inspect:列出指定容器VOLUME NAME的详细信息
            [root@duanx3 ~]#docker volume inspect d80e7705de3c994085e9a943b6bfd802f6eddf0efc1c8e94afdd15c0e19c3f80
                "CreatedAt": "2018-12-08T18:15:33+08:00",
                "Driver": "local",
                "Labels": null,
                "Mountpoint": "/var/lib/docker/volumes/d80e7705de3c994085e9a943b6bfd802f6eddf0efc1c8e94afdd15c0e19c3f80/_data",--------动态存储卷在宿主机上存放的目录
                "Name": "d80e7705de3c994085e9a943b6bfd802f6eddf0efc1c8e94afdd15c0e19c3f80",
                "Options": null,
                "Scope": "local"
        rm:删除存储卷
             [root@duanx3 ~]#docker rm -vf v1----v就是逻辑卷,f强制删除

转载请注明:黑夜 » Docker系列(三)管理命令大全

喜欢 (8)or分享 (0)

您必须 登录 才能发表评论!