docker基础入门

安装docker

ubuntu版本

  1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 安装 apt 依赖包,用于通过HTTPS来获取仓库:
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
  1. 添加 Docker 的官方 GPG 密钥:
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
  1. 将Docker的源添加到 /etc/apt/sources.list
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"
  1. 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 设置docker加速方法配置
//进入自己的阿里云容器,找到页面中的容器加速配置并执行脚本

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

容器技术

  • 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无须任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

容器与虚拟机

  • 虚拟化目标是创建完整的虚拟机,为了运行应用,除了部署应用本身及其依赖(通常几十MB),还得安装整个操作系统。
  • 容器由两部分组成:
    1. 应用程序本身;
    2. 依赖:比如应用程序需要的库或其他软件容器在Host操作系统的用户空间中运行,与操作系统的其他进程隔离。
    3. 所有的容器共享同一个Host OS,容器在体积上要比虚拟机小很多。
    4. 启动容器不需要启动整个操作系统,所以容器部署和启动速度更快、开销更小,也更容易迁移。
    5. 容器使软件具备了超强的可移植能力。
      在这里插入图片描述

docker特性

  1. 打包对象:任何软件及其依赖
  2. 硬件依赖:容器无需修改便可以运行在几乎所有的平台-虚拟机,物理机,公有云,私有云。
  3. 隔离性:资源,网络,库都是隔离的。
  4. 自动化:提供run,start,stop等标准化操作
  5. 高效:轻量级,快速启动或迁移

docker架构

  1. Docker客户端:Client
  2. Docker服务器:Docker daemon
  3. Docker镜像:Image
  4. Docker仓库:Registry
  5. Docker容器:Container
    在这里插入图片描述
  • docker采用的C/S架构,客户端想服务器发送请求,服务器负责构建,运行,分发容器。客户端可以和容器运行在一个宿主机上也可以通过socket或者rest api与远程的docker服务器进行通信。

docker客户端常用命令

attach daemon help inspect logs ps rm service tag volume build diff
history kill  network pull rmi start stop wait commit events images load node
push run stats unpause cp exec import login pause rename save stop update
create export info logout port restart search swarm version

docker服务器

  • 默认配置下,Docker daemon只能响应来自本地Host的客户端请求。
  • 允许远程客户端请求,需要在配置文件中打开TCP监听:
    1. 编辑配置文件 /etc/systemd/system/multi-user.target.wants/docker.service,在环境变量ExecStart后面添加 -H tcp://0.0.0.0,允许来自任意IP的客户端连接
      在这里插入图片描述

    2. 重启重启Docker daemon

    systemctl daemon-reload
    systemctl restart docker.service
    
    1. 客户端在命令行里加上 -H参数,即可与远程服务器通信(服务器ip: 192.168.56.122)。
    // 查看docker服务器的信息
    docker -H 192.168.56.122 info
    

docker镜像

  • 将Docker镜像看成只读模板,通过它可以创建Docker容器,镜像是软件生命周期的构建和打包阶段。

docker容器

  • Docker容器就是Docker镜像的运行实例,容器是镜像启动和运行阶段。

docker仓库

  • Registry是存放Docker镜像的仓库,Registry分私有和公有两种。
  • Docker Hubhttps://hub.docker.com/是默认的Registry。
  • 用户也可以创建自己的私有Registry。

docker镜像

  • 我们希望镜像能提供一个基本的操作系统环境,用户可以根据需要安装和配置软件。这样的镜像我们称作base镜像。
  • base镜像有两层含义:
    1. 不依赖其他镜像,从scratch构建;
    2. 其他镜像可以以之为基础进行扩展。
  • 能称作base镜像的通常都是各种Linux发行版的Docker镜像:Ubuntu、Debian、CentOS等。
  • base镜像比传统操作系统小得多,其原因是其共用了宿主机的内核,自己只实现了用户空间的文件系统。
  • 所有容器都共用host的kernel,在容器中没办法对kernel升级。
  • 如果容器对kernel版本有要求(比如应用只能在某个kernel版本下运行),则不建议用容器,这种场景虚拟机可能更合适。

镜像分层

  • Docker支持通过扩展现有镜像,创建新的镜像。
  • 新镜像是从base镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层,这样可以共享资源。
  • 容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
  • 所有对容器的改动,无论添加、删除,还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
  • 镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。
  • 只有当需要修改时才复制一份数据,这种特性被称作Copy-on-Write。
    • 添加文件。在容器中创建文件时,新文件被添加到容器层中。
    • 读取文件。在容器中读取某个文件时,Docker会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。
    • 修改文件。在容器中修改已存在的文件时,Docker会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
    • 删除文件。在容器中删除文件时,Docker也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。
  • 容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

构建镜像

  • Docker提供了两种构建镜像的方法:
    • docker commit命令
    • Dockerfile构建文件。
  • docker commit命令是创建新镜像最直观的方法,包含三个步骤:
    1. 运行容器。
    2. 修改容器。
    3. 将容器保存为新的镜像。
  • docker commit不推荐使用:
    • 一种手工创建镜像的方式,容易出错,效率低且可重复性弱
    • 使用者并不知道镜像是如何创建出来的,里面是否有恶意程序。无法对镜像进行审计,存在安全隐患。
  • dockerfile(推荐使用):
    • 底层使用docker commit一层一层构建新镜像。

DockerFile

  • Dockerfile是一个文本文件,记录了镜像构建的所有步骤。
  • 构建一个镜像:
    • 生成Dockerfile文件
    FROM ubuntu
    RUN apt-get update && apt-get install -y vim
    
    • 确认与Dockerfile处于统一目录下执行docker build
    /**
    -t将新镜像命名为ubuntu-vim-dockerfile
    .指明build context为当前目录
    也可以通过-f指定Dockerfile文件名,默认找当前路径下Dockerfile文件
     */
    
    docker build -t ubuntu-vim-dockerfile .
    
  • 镜像缓存
    1. Docker会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无须重新创建。
    2. 构建镜像时不使用缓存,可以在docker build命令中加上–no-cache参数。
    3. Dockerfile中每一个指令都会创建一个镜像层,上层是依赖于下层的。无论什么时候,只要某一层发生变化,其上面所有层的缓存都会失效,也就是说修改dockerfile中指令的顺序也会使缓存失效。
    4. 除了构建时使用缓存,Docker在下载镜像时也会使用缓存。
  • dockerfile生成镜像的过程
    1. 从base镜像运行一个容器。
    2. 执行一条指令,对容器做修改。
    3. 执行类似docker commit的操作,生成一个新的镜像层。
    4. Docker再基于刚刚提交的镜像运行一个新容器。
    5. 重复2~4步,直到Dockerfile中的所有指令执行完毕。
  • 所以,如果Dockerfile由于某种原因执行到某个指令失败了,我们也将能够得到前一个指令成功执行构建出的镜像,这可以帮助我们运行最新的这个镜像定位指令失败的原因进而调试Dockerfile。
  • dockerfile常用指令:
  1. FROM:指定base镜像。
  2. MAINTAINER:设置镜像的作者,可以是任意字符串。
  3. COPY:将文件从build context复制到镜像,COPY支持两种形式: COPY src dest与COPY [“src”, “dest”],src只能指定build context中的文件或目录。
  4. ADD:与COPY类似,从build context复制文件到镜像。不同的是,如果src是归档文件(tar、zip、tgz、xz等),文件会被自动解压到dest。
  5. ENV: 设置环境变量,环境变量可被后面的指令使用。
  6. EXPOSE: 指定容器中的进程会监听某个端口,Docker可以将该端口暴露出来。
  7. VOLUME:将文件或目录声明为volume。
  8. WORKDIR:为后面的RUN、CMD、ENTRYPOINT、ADD或COPY指令设置镜像中的当前工作目录,进入容器时,当前目录即为WORKDIR,如果WORKDIR不存在,Docker会自动为我们创建。
  9. RUN:在容器中运行指定的命令。
  10. CMD:容器启动时运行指定的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效。CMD可以被docker run之后的参数替换。
  11. ENTRYPOINT:设置容器启动时运行的命令,Dockerfile中可以有多个ENTRYPOINT指令,但只有最后一个生效。CMD或docker run之后的参数会被当作参数传递给ENTRYPOINT。
  12. Dockerfile支持以“#”开头的注释。

RUN&CMD&ENTRYPOINT

  • RUN、CMD和ENTRYPOINT这三个Dockerfile指令看上去很类似
    1. RUN:执行命令并创建新的镜像层,RUN经常用于安装软件包。
    2. CMD:设置容器启动后默认执行的命令及其参数,但CMD能够被docker run后面跟的命令行参数替换。
    3. ENTRYPOINT:配置容器启动时运行的命令。
  • 两种方式指定RUN、CMD和ENTRYPOINT要运行的命令(shell格式底层会调用 /bin/sh -c [command]。):
    1. Shell格式:
      RUN apt-get install python3
      CMD echo "Hello world"
      ENTRYPOINT echo "Hello world"
      #例如
      ENV name Cloud Man ENTRYPOINT echo "Hello, $name"
      #输出
      Hello, Cloud Man
    
    1. Exec格式(当指令执行时,会直接调用 [command],不会被shell解析):
      RUN ["apt-get", "install", "python3"]
      CMD ["/bin/echo", "Hello world"]
      ENTRYPOINT ["/bin/echo", "Hello world"]
      # 例如
      ENV name Cloud Man ENTRYPOINT ["/bin/echo", "Hello, $name"]
      # 输出
      Hello, $name
      # 如果想解析
      ENV name Cloud Man ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $name"]
    
  • 推荐使用Exec格式。

RUN有两种格式:

  1. Shell格式:RUN
  2. Exec格式:RUN [“executable”, “param1”, “param2”]
RUN apt-get update && apt-get install-y\bzr\cvs\git\mercurial\subversion
  • 单独使用一次run会生成一个新的镜像层。

CMD指令允许用户指定容器的默认执行的命令,此命令会在容器启动且docker run没有指定其他命令时运行。

  1. 如果docker run指定了其他命令,CMD指定的默认命令将被忽略。
  2. 如果Dockerfile中有多个CMD指令,只有最后一个CMD有效。
  • CMD有三种格式:
    1. Exec格式:CMD [“executable”, “param1”, “param2”]
    2. CMD[“param1”, “param2”]为ENTRYPOINT提供额外的参数,此时ENTRYPOINT必须使用Exec格式。
    3. Shell格式:CMD command param1 param2

ENTRYPOINT

  • ENTRYPOINT有两种格式:
    1. Exec格式:ENTRYPOINT [“executable”, “param1”, “param2”]这是ENTRYPOINT的推荐格式。
    • ENTRYPOINT的Exec格式用于设置要执行的命令及其参数,同时可通过CMD提供额外的参数。
    • ENTRYPOINT中的参数始终会被使用,而CMD的额外参数可以在容器启动时动态替换掉。
    1. Shell格式:ENTRYPOINT command param1 param2。
    • ENTRYPOINT的Shell格式会忽略任何CMD或docker run提供的参数。

分发镜像

  • 在多个Docker Host上使用镜像:
  1. 用相同的Dockerfile在其他host构建镜像。
  2. 将镜像上传到公共Registry(比如Docker Hub), Host直接下载使用。
  3. 搭建私有的Registry供本地Host使用。
  • 镜像命名:
    1. 镜像的名字由两部分组成:repository和tag
    2. 如果执行docker build时没有指定tag,会使用默认值latest。

搭建私有仓库

docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
  • 参数说明
    1. -d:后台启动容器。
    2. 将容器的5000端口映射到Host的5000端口。5000是registry服务端口。
    3. -v:将容器 /var/lib/registry目录映射到Host的 /myregistry,用于存放镜像数据。

docker容器

  • CONTAINER ID是容器的“短ID”,前面启动容器时返回的是“长ID”。短ID是长ID的前12个字符。
  • NAMES字段显示容器的名字,在启动容器时可以通过 --name参数显式地为容器命名,如果不指定,docker会自动为容器分配名字。

进入容器

  1. docker attach:
  • 通过docker attach可以attach到容器启动命令的终端
  • 通过Ctrl+p,然后Ctrl+q组合键退出attach终端
  1. docker exec:
  • docker exec进入容器
  • -it以交互模式打开pseudo-TTY,执行bash,其结果就是打开了一个bash终端。
  • 进入到容器中,容器的hostname就是其“短ID”
  • 可以像在普通Linux中一样执行命令。ps -elf显示了容器启动进程while以及当前的bash进程
  • 执行exit退出容器,回到docker host。
  1. attach&exec
  2. attach直接进入容器启动命令的终端,不会启动新的进程。
  3. exec则是在容器中打开新的终端,并且可以启动新的进程。
  4. 如果想直接在终端中查看启动命令的输出,用attach;其他情况使用exec。

容器生命周期

在这里插入图片描述

资源限制

内存限额

  • 容器可使用的内存包括两部分:物理内存和swap。
  • Docker两组参数控制容器内存的使用量:
    1. -m或 --memory:设置内存的使用限额,例如100MB,2GB。
    2. –memory-swap:设置内存+swap的使用限额。
//两组参数为 -1,即对容器内存和swap的使用没有限制
// 在启动容器时只指定 -m而不指定 --memory-swap,那么 --memory-swap默认为 -m的两倍
docker run -m 200M --memory-swap=300M ubuntu
  • –vm 1:启动1个内存工作线程。
  • –vm-bytes 280M:每个线程分配280MB内存。
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

CPU限额

  • 默认设置下,所有容器可以平等地使用host CPU资源并且没有限制。
  • Docker可以通过 -c或 --cpu-shares设置容器使用CPU的权重。如果不指定,默认值为1024。
  • 按权重分配CPU只会发生在CPU资源紧张的情况下

Block io带宽限额

  • Block IO指的是磁盘的读写
  • docker可通过设置权重、限制bps和iops的方式控制容器读写磁盘的带宽
  • bps是byte per second,每秒读写的数据量
  • iops是io per second,每秒IO的次数。
  • 默认情况下,所有容器能平等地读写磁盘,可以通过设置 --blkio-weight参数来改变容器block IO的优先级, 设置的是相对权重值,默认为500。
  • –device-read-bps:限制读某个设备的bps。
  • –device-write-bps:限制写某个设备的bps。
  • –device-read-iops:限制读某个设备的iops。
  • –device-write-iops:限制写某个设备的iops。
//限制容器写 /dev/sda的速率为30 MB/s
docker run -it --device-write-bps /dev/sda:30MB ubuntu

cgroup

  • cgroup实现资源限额。
  • Linux操作系统通过cgroup可以设置进程使用CPU、内存和IO资源的限额,–cpu-shares、-m、–device-write-bps实际上就是在配置cgroup。
  • /sys/fs/cgroup/cpu/docker目录中,Linux会为每个容器创建一个cgroup目录,以容器长ID命名,目录中包含所有与cpu相关的cgroup配置,文件cpu.shares保存的就是 --cpu-shares的配置
  • /sys/fs/cgroup/memory/docker和 /sys/fs/cgroup/blkio/docker中保存的是内存以及Block IO的cgroup配置。

namespace

  • namespace管理着host中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。
  • Linux使用了6种namespace,分别对应6种资源:Mount、UTS、IPC、PID、Network和User。
    1. Mount namespace让容器看上去拥有整个文件系统。
    2. UTS namespace让容器有自己的hostname。
    3. IPC namespace让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信。
    4. Network namespace让容器拥有自己独立的网卡、IP、路由
    5. User namespace让容器能够管理自己的用户,host不能看到容器中创建的用户。
    6. PID namespace让容器拥有自己独立的一套PID。

docker网络

  • Docker网络从覆盖范围可分为单个host上的容器网络和跨多个host的网络。
  • Docker安装时会自动在host上创建三个网络,docker network ls命令查看网络。

none网络

  • none网络就是什么都没有的网络,容器除了lo,没有其他任何网卡。容器创建时通过 --network=none指定使用none网络。
  • 一些对安全性要求高并且不需要联网的应用可以使用none网络。

host网络

  • host网络的容器共享Docker host的网络栈,容器的网络配置与host完全一样。可以通过 --network=host指定使用host网络。
  • 容器对网络传输效率有较高要求,选择host网络。但是要考虑端口冲突问题,host上已经使用的端口不能再用。

bridge网络

  • Docker安装时会创建一个命名为docker0的Linux bridge。如果不指定–network,创建的容器默认都会挂到docker0上。

user-defined网络

  • 除了none、host、bridge这三个自动创建的网络,用户也可以根据业务需要创建user-defined网络。
  • Docker提供三种user-defined网络驱动:
    1. bridge
    • bridge驱动创建类似前面默认的bridge网络
    • 挂载在同一网络下的容器可以互通
    1. overlay
    • 跨主机网络
    1. macvla
    • 跨主机网络

容器间通信

  • 两个容器要能通信,必须要有属于同一个网络的网卡,通过ip通信。
  • docker daemon实现了一个内嵌的DNS server, 启动时用 --name为容器命名就可以使用容器名进行通信。
  • docker DNS有个限制:只能在user-defined网络中使用。默认的bridge网络无法使用DNS。

joined容器

  • joined容器是另一种实现容器间通信的方式
  • joined可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined容器之间可以通过127.0.0.1直接通信。
  • 通过 --network=container:xxx指定joined容器,指定后容器共享网络配置。

外部通信

  • 容器默认能访问外网。
  • 外网通过端口映射访问到容器。
  • docker可将容器对外提供服务的端口映射到host的某个端口,外网通过该端口访问容器
    在这里插入图片描述

docker存储

  • Docker为容器提供了两种存放数据的资源:
    1. 由storage driver管理的镜像层和容器层。
    2. Data Volume。

storage driver

  • Docker支持多种storage driver,有AUFS、Device Mapper、Btrfs、OverlayFS、VFS和ZFS。
  • 优先使用Linux发行版默认的storage driver。
  • Docker安装时会根据当前系统的配置选择默认的driver。默认driver具有最好的稳定性。
  • docker info查看Ubuntu的默认driver

在这里插入图片描述

  • 对于某些容器,直接将数据放在由storage driver维护的层中是很好的选择,比如无状态应用。无状态意味着容器没有需要持久化的数据,随时可以从镜像直接创建。

Data Volume

  • Data Volume本质上是Docker Host文件系统中的目录或文件,能够直接被mount到容器的文件系统中。
    • Data Volume是目录或文件,而非没有格式化的磁盘(块设备)
    • 容器可以读写volume中的数据。
    • volume数据可以被永久地保存,即使使用它的容器已经销毁。
  • docker提供了两种类型的volume:bind mount和docker managed volume:

bind mount

  • bind mount是将host上已存在的目录或文件mount到容器,通过-v将其mount到容器。
  • bind mount可以让host与容器共享数据,容器没有了,bind mount也还在,bind mount时还可以指定数据的读写权限,默认是可读可写。
  • 挂载文件注意:host中的源文件必须要存在,不然会当作一个新目录bind mount给容器。
  • bind mount的使用直观高效,易于理解。但是需要指定host文件系统的特定路径,这就限制了容器的可移植性,当需要将容器迁移到其他host,而该host没有要mount的数据或者数据不在相同的路径时,操作会失败。

docker managed volume

  • docker managed volume与bind mount在使用上的最大区别是不需要指定mount源,指明mount point即可。
  • 通过-v告诉docker需要一个data volume,并将其mount到容器目录,host目录会在/var/lib/docker/volumes下生成一个目录,这个目录就是mount源,如果mount point指向的是已有目录,原有数据会被复制到volume中。
  • 只能为目录。

数据共享

容器与host共享数据

  • 两种类型的data volume,均可实现在容器与host之间共享数据。
    1. bind mount是非常明确的:直接将要共享的目录mount到容器
    2. docker managed volume位于host中的目录,是在容器启动时才生成,所以需要将共享数据复制到volume中。

容器之间共享数据

  • 将共享数据放在bind mount中,然后将其mount到多个容器。
  • 使用volume container。
    • volume container是专门为其他容器提供volume的容器, 容器命名为vc_data, volume container的作用只是提供数据,它本身不需要处于运行状态。
    docker create --name my_data \
    -v ~/data:/usr/data \
    -v /other/data \
    busybox
    
  • 其他容器可以通过–volumes-from使用vc_data这个volume container

data-packed volume container

  • 将数据完全放到volume container中,同时又能与其他容器共享。
  • 原理是将数据打包到镜像中,然后通过docker managed volume共享。

Data Volume生命周期管理

  • 备份: volume实际上是host文件系统中的目录和文件,所以volume的备份实际上是对文件系统的备份。所有的本地镜像都保存在host的/myregistry目录中,我们要做的就是定期备份这个目录。
  • 恢复:如果数据损坏了,直接用之前备份的数据复制到/myregistry。
  • 迁移:
    • docker stop当前Registry容器。
    • 启动新版本容器并mount原有volume。
  • 销毁:
    • 删除不再需要的volume,docker不会销毁bind mount,删除数据的工作只能由host负责。
    • docker rm删除容器时可以带上 -v参数,docker会将容器使用到的volume一并删除,但前提是没有其他容器mount该volume。

docker命令详情

  • docker pull: 从仓库下载docker镜像

  • docker push: 推送docker镜像至远程仓库

  • docker run: 如果本地没有镜像则下载,然后启动容器

    • -d: 后台运行容器
    • –restart: 设置重启规则
    • –network: 指定网络
    • –ip: 指定静态ip,不指定自动分配,只有使用 --subnet创建的网络才能指定静态IP。
    • -p:参数映射端口。
    • -v:挂载文件/文件夹。
  • docker images: 查看本地镜像

  • docker ps: 查看正在运行的容器

    • -a: 查看所有容器
  • docker container ls: 查看正在运行的容器

  • docker build: 构建docker镜像

    • -t: 容器命名
  • docker commit: 构建docker镜像

  • docker history: 显示镜像的构建历史(Dockerfile的执行过程)

  • docker tag:为镜像打tag

  • docker login: 登录docker仓库

  • docker stop: 停止一个容器

  • docker start: 启动容器

  • docker restart: 重启容器

  • docker logs: 查看日志

    • -f: 实时查看日志
  • docker pause: 暂停容器执行

  • docker unpause: 恢复运行容器

  • docker rm:删除容器

    //删除退出的容器
    docker rm -v $(docker ps -aq -f status=exited)
    
  • docker rmi: 删除镜像

  • docker create: 创建容器处于Created状态

  • docker network ls:查看网络列表

  • brctl show: 查看bridge网络列表

  • docker network inspect bridge: 查看bridge网络详情

  • docker network create --driver bridge xxx: 创建bridge网络

    • –subnet:指定网段
    • –gateway:指定网关
  • docker network connect: 容器添加网卡

  • docker info:查看docker详情

  • docker volume:查看挂在卷,只能查看docker managed volume,还看不到bind mount。

  • docker cp:在容器和host之间复制数据

  • docker volume rm $(docker volume ls -q):批量删除挂在卷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值