Docker命令合集


  • docker常用命令
  1. 搜索镜像:docker search [OPTIONS] [镜像名]
    命令参数(OPTIONS):
    -f, --filter filter 根据提供的格式筛选结果,如 -f is-official=true
    –format string 利用Go语言的format格式化输出结果
    –limit int 展示最大的结果数,默认25个,优先级高于其他参数
    –no-trunc 描述全部显示

  2. 查看镜像:docker image ls \ docker images
    命令参数(OPTIONS):
    -a, --all 展示所有镜像 (默认隐藏底层的镜像)
    –no-trunc 不缩略显示
    -q, --quiet 只显示镜像ID
    可以使用正则,但是当匹配出两个一样NAME的镜像时会不显示此时需要加上版本号匹配
    如:docker images cent*:latest

  3. 拉取镜像:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    命令参数(OPTIONS):
    -a, --all-tags 下载所有符合给定tag的镜像

    1. 没有指定下载版本时默认下载最新的版本
    2. 通过Image ID判断是否下载(如当指定的镜像Image ID已存在,则不做拉取,如名称不一样则只是新增引用)
  4. 删除镜像:docker rmi / docker image rm [参数] 镜像名 [镜像名2…]
    命令参数(OPTIONS):
    -f, --force 强制删除,谨慎使用

  5. 导出镜像:docker save [参数] 镜像名 [镜像名2…]
    命令参数(OPTIONS):
    -o, --output string 指定写入的文件名和路径
    举栗:docker save hello-world fce2 hello-world:latest -o helloWorld.tar
    注意:在导出的时候一定要指定版本号,否则在导入的时候REPOSITORY和TAG会显示NONE

  6. 备份导入:docker load [参数]
    命令参数(OPTIONS):
    -i, --input string 指定要打入的文件,如没有指定,默认是STDIN
    -q, --quiet 不打印导入过程信息

  7. 镜像重命名(相当于增加一个引用):docker tag 源镜像名[:版本号] 新镜像名[:版本号]
    饭粒:docker tag hello-world:latest hello:latest

  8. 镜像详细信息:docker image inspect [OPTIONS] IMAGE [IMAGE…]
    或 docker inspect [OPTIONS] IMAGE [IMAGE…]
    命令参数(OPTIONS):
    -f, --format string 利用特定Go语言的format格式输出结果
    饭粒:docker inspect hello -f “{{json .ContainerConfig.Env}}”

  9. 镜像历史信息(可以查看镜像是由哪个镜像构建出来的):docker history [OPTIONS] IMAGE
    命令参数(OPTIONS):
    -H, --human 将创建时间、大小进行优化打印(默认为true)
    -q, --quiet 只显示镜像ID
    –no-trunc 不缩略显示
    镜像总结


  • docker 容器生命周期
    docker 容器生命周期
  1. 容器创建:docker create [OPTIONS] IMAGE [COMMAND] [ARG…]
    命令参数(OPTIONS):
    -t, --tty 分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive 即使没有连接,也要保持STDIN打开
    –name 为容器起名,如果没有指定将会随机产生一个名称
    待执行命令 / 参数(COMMAND\ARG):
    COMMAND 表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG 表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    饭粒:docker create --name centos-test centos ls -a

  2. 删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -f, --force 强制删除,在running、paused状态下适用

  3. 容器启动:docker start [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上
    -i, --interactive 将当前shell的 STDIN连接到容器上
    注意:当运行的容器有长连接等待输入的时候(如执行python)需要在容器创建的时候就加上-ti参数,启动的时候加上-ai参数
    饭粒:docker create --name python2 -ti centos python
    docker start -ai python2

  4. 容器创建并启动:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
    命令参数(OPTIONS):
    -t, --tty:分配一个伪TTY,也就是分配虚拟终端
    -i, --interactive:即使没有连接,也要保持STDIN打开
    –name:为容器起名,如果没有指定将会随机产生一个名称
    -d, --detach:在后台运行容器并打印出容器ID
    –rm:当容器退出运行后,自动删除容器
    待执行命令/参数(COMMAND\ARG):
    COMMAND:表示容器启动后,需要在容器中执行的命令,如ps、ls 等命令
    ARG:表示执行 COMMAND 时需要提供的一些参数,如ps 命令的 aux、ls命令的-a等等
    docker run 相当于 docker create + docker start –a 前台模式
    docker run -d 相当于 docker create + docker start 后台模式

  5. 停止容器:docker stop [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -t, --time int:停止容器等待时间,单位秒(默认 10s)(尽管在这段时间内执行Ctrl + C 也无法中止stop命令)
    stop命令是先发送SIGTERM信号,一段时间后再发送SIGKILL信号

  6. 容器终止 :docker kill [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -s, --signal string:指定发送给容器的关闭信号 (默认“KILL”信号)
    kill命令直接发送SIGKILL信号

  7. 容器暂停:docker pause CONTAINER [CONTAINER…]
    在这里插入图片描述

  8. 容器取消暂停(恢复运行):docker unpause CONTAINER [CONTAINER…]

  9. 容器重启:docker restart [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -t, --time int :重启前,等待的时间,单位秒(默认 10s) 即关闭前等待的时间

  10. 容器详细信息:docker container inspect [OPTIONS] CONTAINER [CONTAINER…]
    或者 docker inspect [OPTIONS] CONTAINER [CONTAINER…]
    命令参数(OPTIONS):
    -f, --format string:利用特定Go语言的format格式输出结果
    -s, --size:显示总大小

  11. 容器日志信息:docker logs [OPTIONS] CONTAINER
    命令参数(OPTIONS):
    –details:显示日志的额外信息
    -f, --follow:动态跟踪显示日志信息
    –since string:只显示某事时间节点之后的
    –tail string:显示倒数的行数(默认全部)
    -t, --timestamps:显示timestamps时间
    –until string:只显示某事时间节点之前的
    注意:容器日志中记录的是容器主进程的输出STDOUT\STDERR

  12. 容器重命名:docker rename CONTAINER NEW_NAME

  13. 容器连接:docker attach [OPTIONS] CONTAINER
    将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接(退出以后容器也跟着停止)
    命令参数(OPTIONS):
    –no-stdin:不绑定STDIN

  14. 容器中执行新命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG…]
    命令参数(OPTIONS):
    -d, --detach:后台运行命令
    -i, --interactive:即使没连接容器,也将当前的STDIN绑定上
    -t, --tty:分配一个虚拟终端
    -w, --workdir string:指定在容器中的工作目录
    -e, --env list:设置容器中运行时的环境变量
    执行的命令(子进程)不影响主进程运行,其中的标准输出不会记录到logs中(即docker logs无法查看exec的输出)

  15. 查看容器资源使用情况:docker stats [OPTIONS] [CONTAINER…]


  • Docker 容器与镜像之间的关系
    在这里插入图片描述
  1. 根据容器生成一个新的镜像:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    命令参数(OPTIONS):
    -a, --author string:作者
    -c, --change list:为创建的镜像加入Dockerfile命令
    -m, --message string:提交信息,类似git commit -m
    -p, --pause:提交时暂停容器 (default true)

  2. 容器导出:docker export [OPTIONS] CONTAINER
    命令参数(OPTIONS):
    -o, --output string:指定写入的文件,默认是STDOUT

  3. 容器包的导入:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
    命令参数(OPTIONS):
    -c, --change list:为创建的镜像加入Dockerfile命令
    -m, --message string:导入时,添加提交信息

  4. commit与import的区别

    1. commit生成的镜像通过history可以看到继承关系,而import生成的镜像是独立生成一个新的镜像(没有继承关系)
      在这里插入图片描述
    2. commit生成的镜像会保留所有父镜像的数据,利用import方法会丢失所有父镜像的元数据(docker inspect查看Config信息)

  • Docker镜像的底层实现(联合文件系统)
    在这里插入图片描述
    • docker inspect -f “{{json .RootFS.Layers}}” IMAGE查看Layer继承镜像信息
    • 只读文件系统,只能看到最后一层。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

  • Docker 网络管理
  1. 查看网络:docker network ls [OPTIONS]
    命令参数(OPTIONS):
    -f, --filter filter 过滤条件(如 'driver=bridge’)
    –format string 格式化打印结果
    –no-trunc 不缩略显示
    -q, --quiet 只显示网络对象的ID
    注意:默认情况下,docker安装完成后,会自动创建bridge、host、none三种网络驱动

  2. 创建网络:docker network create [OPTIONS] NETWORK
    命令参数(OPTIONS):
    -d, --driver string:指定网络的驱动(默认 “bridge”)
    –subnet strings:指定子网网段(如192.168.0.0/16、172.88.0.0/24)
    –ip-range strings:执行容器的IP范围,格式同subnet参数
    –gateway strings:子网的IPv4 or IPv6网关,如(192.168.0.1)
    注意:

    1. host和none模式网络只能存在一个
    2. docker自带的overlay 网络创建依赖于docker swarm(集群负载均衡)服务
    3. 192.168.0.0/16 等于 192.168.0.0~192.168.255.255 192.168.8.0/24
    4. 172.88.0.0/24 等于 172.88.0.0~172.88.0.255
    5. host和bridge都可以链接外网,none无法链接外网
  3. 网络删除:docker network rm NETWORK [NETWORK…]

  4. 网络详细信息:docker network inspect [OPTIONS] NETWORK [NETWORK…]
    或者 docker inspect [OPTIONS] NETWORK [NETWORK…]
    命令参数(OPTIONS):
    -f, --format string:根据format输出结果

  5. 使用网络:docker run/create --network NETWORK
    注意:默认情况下,docker创建或启动容器时,会默认使用名为bridge的网络

  6. 网络连接与断开:docker network connect [OPTIONS] NETWORK CONTAINER
    docker network disconnect [OPTIONS] NETWORK CONTAINER
    命令参数(OPTIONS):
    -f, --force 强制断开连接(用于disconnect)
    注意:

    1. host模式不能使用该命令
    2. 同一容器不能同时存在两种及以上网络模式
    3. 同一容器可以拥有多个bridge网络

  • docker 网络模式
    • bridge 模式(基于IP做转发):
      • 特点:
    1. 宿主机上需要单独的bridge网卡,如默认docker默认创建的docker0。
    2. 容器之间、容器与主机之间的网络通信,是借助为每一个容器生成的一对veth pair虚拟网络设备对,进行通信的。一个在容器上,另一个在宿主机上。
    3. 每创建一个基于bridge网络的容器,都会自动在宿主机上创建一个veth**虚拟网络设备。
    4. 外部无法直接访问容器。需要建立端口映射才能访问。
    5. 容器借由veth虚拟设备通过如docker0这种bridge网络设备进行通信。
    6. 每一容器具有单独的IP
      在这里插入图片描述
    • 端口映射:在容器创建或启动时指定端口映射
      docker run/create -P …或者 docker run/create –p …
      命令参数(OPTIONS):
      -P, --publish-all:将容器内部所有暴露端口进行随机映射
      -p, --publish list:手动指定端口映射
      饭粒:-p [HOST_IP]:[HOST_PORT]:CONTAINER_PORT
      如:-p ::80 将容器的80端口随机(端口)映射到宿主机任意IP
      -p :8000:6379 将容器的6379端口映射到宿主机任意IP的8000端口
      -p 192.168.5.1::3306 将容器的3306端口随机(端口)映射到宿主机的192.168.5.1 IP上
      在这里插入图片描述
    • host模式:网络性能最佳
      特点:
    1. 容器完全共享宿主机的网络。网络没有隔离。宿主机的网络就是容器的网络。
    2. 容器、主机上的应用所使用的端口不能重复。例如:如果宿主机已经占用了8090端口,那么任何一个host模式的容器都不可以使用8090端口了;反之同理。
    3. 外部可以直接访问容器,不需要端口映射。
    4. 容器的IP就是宿主机的IP
      在这里插入图片描述
    • Container模式:一个容器共享其他容器的网络
      相当于该容器在网络层面上,将其他容器作为“主机”。它们之间的网络没有隔离。这些容器之间的特性同host模式。
      使用方法:
      Docker run/create --network container:CONTAINER …
      举栗:docker run -itd --rm --network container:5e28 mongo
      在这里插入图片描述

    • none模式:
      特点:容器上没有网络,也无任何网络设备。如果需要使用网络,需要用户自行安装与配置。
      应用场景:该模式适合需要高度定制(隔离)网络的用户使用。

    • overlay模式:也称为覆盖网络

    1. Overlay 网络的实现方式和方案有多种。Docker自身集成了一种,基于VXLAN隧道技术实现。
      Overlay 网络主要用于实现跨主机容器之间的通信。
    2. 应用场景:需要管理成百上千个跨主机的容器集群的网络时。
    3. TCP/IP协议工作流程:
      TCP/IP协议工作流程
    4. IP隧道网络原理(数据包从c1到c2)
      IP隧道网络原理
    • macvlan 网络模式:
      最主要的特征就是他们的通信会直接基于mac地址进行转发
    1. 这时宿主机其实充当一个二层交换机。Docker会维护着一个MAC地址表,当宿主机网络收到一个数据包后,直接根据mac地址找到对应的容器,再把数据交给对应的容器。
    2. 容器之间可以直接通过IP互通,通过宿主机上内建的虚拟网络设备(创建macvlan网络时自动创建),但与主机无法直接利用IP互通。
    3. 应用场景:由于每个外来的数据包的目的mac地址就是容器的mac地址,这时每个容器对于外面网络来说就相当于一个真实的物理网络设备。因此当需要让容器来的网络看起来是一个真实的物理机时,使用macvlan模式
      在这里插入图片描述

  • docker数据卷

    • 容器数据弊端:
    1. 宿主机无法直接访问容器中的文件
    2. 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
    3. 容器之间也无法直接访问互相的文件
    • 为解决以上问题,docker加入了数据卷(volumes)机制,以实现:
    1. 容器与主机之间、容器与容器之间共享文件
    2. 容器中数据的持久化
    3. 将容器中的数据备份、迁移、恢复
    • 数据卷的特点
    1. 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
    2. 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
    3. 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
    4. 容器对数据卷的修改是实时进行的。
    5. 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。
    • Docker挂载容器数据卷的三种方式
    1. bind mounts:将宿主机上的一个文件或目录被挂载到容器上。
    2. volumes:由Docker创建和管理。使用docker volume命令管理
    3. tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上
      在这里插入图片描述
    • bind mounts方式挂载数据卷:挂载数据卷都是利用docker run/create的参数为容器挂载数据卷
    1. 方式一: -v, --volume参数
      -v 宿主机文件或文件夹路径:容器中的文件或者文件夹路径
      饭粒:docker run -itd -v /root/volume_dir:/root/v1_dir centos
    2. 方式二:–mount参数
      –mount type=bind,src=宿主机文件或文件夹路径,dst=容器中的文件或者文件夹路径
      注意:src指定的文件和路径必须提前创建或存在;type/src/dst之间不能存在空格
      饭粒:docker run -itd --mount type=bind,src=/root/mount_dir,dst=/root/v2_dir centos
    • volumes方式挂载数据卷
    1. 方式一: -v, --volume参数
      -v [VOLUME-NAME:]容器中的文件或者文件夹路径
    2. 方式二:–mount 参数
      –mount type=volume,src=VOLUME-NAME,dst=容器中的文件或者文件夹路径
    3. volume对象管理
      docker volume:命令管理volume数据卷对象
      docker volume create:创建数据卷对象
      docker volume inspect:查看数据卷详细信息
      docker volume ls:查看已创建的数据卷对象
      docker volume prune:删除未被使用的数据卷对象
      docker volume rm:删除一个或多个数据卷对象
    • tmpfs mount方式挂载数据卷:挂载/存到内存
      用法:
      –mount type=tmpfs, dst=PATH
      饭粒:docker run -itd --mount type=tmpfs,dst=/root/mount_dir centos

    • 共享其他容器的数据卷
      用法:docker run/create --volumes-from CONTAINER
      饭粒:docker run -itd --volumes-from ce3a centos

    • Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意

    1. 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
    2. 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉。
    3. 这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

  • docker私有仓库(应用比较小众,目前都在云端创建仓库)
    • Docker仓库就是存放docker镜像并有docker pull方法下载的云环境
    • Docker仓库分为公有仓库和私有仓库
      • 公有仓库指Docker Hub(官方)等开放给用户使用、允许用户管理镜像。
      • 私有仓库指由用户自行搭建的存放镜像的云环境。
    • 搭建无认证私有仓库
    1. 第一步:在需要搭建仓库的服务器上安装docker。
    2. 第二步:在服务器上,从docker hub下载registry仓库
      docker pull registry
    3. 第三步:在服务器上,启动仓库
      docker run -d -ti --restart always --name my-registry -p 8000:5000 -v /my-registry/registry:/var/lib/registry registry
      注意:registry内部对外开放端口是5000。默认情况下,镜像会存放于容器内的/var/lib/registry(官网Dockerfile中查看)目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失。
    4. 本地(或浏览器)利用curl 服务器IP:8000/v2/_catalog 查看当前仓库中的存放的镜像列表。(注意防火墙打开8000端口访问)
      在这里插入图片描述
    • 上传私有镜像到无认证私有仓库
    1. 第一步:利用docker tag重命名需要上传的镜像
      docker tag IMAGE 服务器IP:端口/IMAGE_NAME
      饭粒:docker tag centos-net 192.168.33.6:8000/centos-net
    2. 第二步:利用docker push上传刚刚重命名的镜像
      docker push 服务器IP:端口/centos
      饭粒:docker push 192.168.33.6:8000/centos-net
    3. 注意:
      必须重命名为 服务器IP:端口/IMAGE_NAME
      如果push出现了类似https的错误,那么需要往配置文件/etc/docker/daemon.json里添加:“insecure-registries”:[“服务器IP:端口”]
      然后重启docker再上传镜像即可。
    4. 查看镜像是否上传成功:curl 服务器IP:端口/v2/_catalog
      在这里插入图片描述
    • 无认证私有仓库镜像下载:docker pull 服务器IP:端口/IMAGE_NAME

    • 搭建带认证的私有仓库

    1. 第一步:删除先前创建的无认证的仓库容器(这步可省略)
      docker rm -f my-registry
    2. 第二步:创建存放认证用户名和密码的文件:
      mkdir /auth-registry/auth -p
    3. 第三步:创建密码验证文件。注意将USERNAME和PASSWORD替换为设置的用户名和密码
      docker run --entrypoint htpasswd registry -Bbn USERNAME PASSWORD > /auth-registry/auth/htpasswd
    4. 第四步:重新启动仓库镜像
      docker run -d -p 8000:5000 --restart=always --name docker-registry
      -v /auth-registry/registry:/var/lib/registry
      -v /auth-registry/auth:/auth
      -e “REGISTRY_AUTH=htpasswd”
      -e “REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm”
      -e “REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd”
      registry
    • 带认证的私有仓库上传、下载镜像
      在认证仓库机器上:
    1. 第一步:首先登录到服务器
      docker login -u username -p password 仓库IP:端口
    2. 第二步:然后执行pull或者push命令
    3. 第三步:操作完毕后,可以退出登录
      docker logout 仓库IP:端口
      在这里插入图片描述
    • 如果想查看仓库中已有的镜像,需要进行http验证才可以。可以直接借助浏览器访问 仓库IP:端口/v2/_catalog
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值