DOCKER 部分指令

DOCKER CLI

        自己翻译的,如果有错误,麻烦写评论通知

docker pull

Docker pull指令用于从一个docker仓库中获取一个或者多个images。
命令简介
用法
docker pull [options] NAME[:TAG | @DIGEST]
OPTIONS
--all-tags     -a          下载镜像的所有标签版
--disable-content-trust   跳过校验
--platform
  
 docker pull依赖基本指令docker
命令实例
常规使用
docker pull debian
从Docker Hub上下载一个镜像
Docker Hub是目前最大的注册服务器,注册服务器是Docker的仓库,docker仓库是同一类镜像的一个集合
Docker pull指令可以下载某一或者某一系列的镜像。如果没有指定下载时使用的标签,默认使用latest,即docker pull debian 等同于 docker pull debian:latest
注:此处会有镜像资源下载超时的问题
建议指令:
sudo docker pull daocloud.io/debian
daocloud.io是国内常用的docker仓库
查看本地docker镜像指令:
docker images
$ docker images
REPOSITORY   TAG      IMAGE ID        CREATED      SIZE
debian       jessie   f50f9524513f    5 days ago   125.1 MB
debian       latest   f50f9524513f    5 days ago   125.1 MB
Docker采用内容镜像寻址。其IMAGE ID是SHA256计算的一个摘要值,具有唯一性,tag是镜像的标签。如上所示的debian镜像,在本地只存在一个副本,但有两个标签名。
中断镜像下载
在docker pull下载时,可以使用ctrl c直接中断下载流程
根据镜像摘要下载docker镜像
通常情况下我们使用镜像名和标签一起下载镜像,如docker pull ubuntu:14.04会下载一个最新的ubuntu 14.04的镜像文件。该指令虽然会下载镜像,但会因为ubuntu 14.04本身的更新,而使镜像在不同时间点上存在细微差别。有时候用户可能需要的正是某一时间点上的docker 镜像,这时该指令就无法做到了。这时我们可以使用文件摘要作为docker pull的标签参数来解决这个问题,这样就能保证每次得到的docker镜像完全一致。
首先我们使用docker pull下载一个最新的ubuntu 14.04的镜像。
$ docker pull ubuntu:14.04
14.04: Pulling from library/ubuntu
5a132a7e7af1: Pull completefd2731e4c50c: Pull complete28a2f68d1120: Pull completea3ed95caeb02: Pull completeDigest: sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
Status: Downloaded newer image for ubuntu:14.04
Docker会在镜像下载结束后,将镜像摘要打印出来,如上镜像摘要是:
sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
当我们需要下载此时刻的固定镜像时,可以这样使用docker pull:
docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
该方法支持在dockerfile中使用。
从指定仓库中下载docker镜像
默认情况下docker pull指令会从docker hub上下载镜像。docker 支持指定路径下载,路径指定方式与url相似,仅仅是没有url的协议头(如https://)。
以下是一个简单的实例,指定了下载地址和端口:
docker pull myregistry.local:5000/testing/test-image
Docker仓库会使用docker login验证身份。
从仓库中下载所有镜像:
默认情况下docker pull仅从仓库中下载一个镜像(即标签为lastest的镜像)。但是docker仓库往往存在多个镜像,为了下载全部的镜像,可以使用-a(或者--all-tags)选项。
如以下从docker hub下载所有的fedora镜像
docker pull --all-tags fedora
注意;
虽然会下载多个fedora的镜像,但是由于镜像是由docker layer组成的,因此它实际的大小会比下载多个fedora镜像小,因为docker layer会记录这些镜像的共有layer和自己不同其它镜像的layer。

Docker images

docker images命令可以列出本地主机上已有的镜像。
命令简介
用法
docker images [options]  [REPOSITORY[:TAG]]
OPTIONS
--all-tags     -a          显示所有镜像(默认不显示中间镜像)
--digests                 显示摘要
--filter , -f                 根据条件过滤输出
--format                  使用pretty_print模式输出
--no-trunc                显示完整的image信息
--quiet , -q                仅列出镜像id
  
docker pull依赖基本指令docker
扩展描述:
默认情况下,docker images仅仅显示image的最上层layers信息,包括仓库,标签和大小。
docker的镜像,存在很多中间层文件,这些中间层文件可以被多个镜像重复利用,并减少硬盘消耗,同时增加docker build指令的速度,默认情况下,不显示中间层信息。
docker的size信息包括了该镜像的所有层的总大小,它的大小等于使用docker save指令保存时生成的tar文件大小。
使用docker images时,一个镜像可能会因为出现在多个仓库,或者拥有多个标签而显示多次,但通常IMAGE ID才是标识一个镜像占用空间的单位,即一个IMAGE ID表示实际占用了一次磁盘空间。
命令实例
常规使用
docker images
列出最近创建或者添加的镜像
根据名字和标签显示镜像
docker images java
docker images java:8
如果没有匹配项显示为空
完整显示镜像的image ID
docker images --no-trunc
显示镜像摘要
Docker的镜像在v2版本之后,支持一个内容地址标示,称为摘要。与摘要算法类似,只要镜像不变,摘要值不会变化。
docker images --digests
摘要可以做为参数出现在docker push或者docker pull等指令中。
镜像过滤条件
docker images支持使用过滤条件选择目标镜像,过滤参数为-f或者--filter。后面可跟形如”key=value”的参数,如果条件比较多,可以多次使用,如:docker image --filter “foo=bar”  --filter “bif=baz”
常用的过滤条件:
  • Dangling(布尔属性,为true或者false)
  • Label标签(label=<key> 或者 label=<key>=<value>)
  • Before( <image-name>[:<tag>], <image id> or <image@digest>)选择创建时间在给定镜像前的镜像
  • since( <image-name>[:<tag>], <image id> or <image@digest>)选择镜像创建在给定镜像后的镜像
  • reference(pattern of an image reference)
获取没有标签的镜像
docker images --filter “dangling=true”
REPOSITORY   TAG           IMAGE ID            CREATED         SIZE
<none>       <none>       8abc22fbb042        4 weeks ago     0 B
<none>       <none>       48e5f45168b9        4 weeks ago     2.489 MB
<none>       <none>       bf747efa0e2f         4 weeks ago      0 B
<none>       <none>       980fe10e5736        12 weeks ago    101.4 MB
<none>       <none>       dea752e4e117        12 weeks ago    101.4 MB
<none>       <none>       511136ea3c5a        8 months ago     0 B
无标签结点是镜像树上的叶子结点,这些镜像大多是在生成时,将repo:tag标签从iamge ID中取走,导致自动生成<none>:<none>或者untagged标签。在一个正在运行的容器使用无标签镜像会产生警告。
我们可以配置docker rmi 指令一次将所有无标签镜像删除。如:
docker rmi $(docker images -f “dangling=true” -q)
8abc22fbb042
48e5f45168b9
bf747efa0e2f
980fe10e5736
dea752e4e117
511136ea3c5a

Docker search

从docker hub上搜寻镜像
命令简介
用法
docker search [options]  TERM
OPTIONS
--automated              仅仅显示自动编译
--filter , -f                 根据条件过滤输出
--format                  使用pretty_print模式输出
--limit           25       最大的搜寻结果
--no-trunc                显示完整的image信息
--start , -s                仅仅显示至少x个starts
  
docker pull依赖基本指令docker
命令实例
常规使用
docker search busybox
根据镜像名搜寻镜像
完整显示镜像信息,要其至少3starts
docker search --stars=3 --no-trunc busybox

Docker push

上传镜像
命令简介
用法
docker push

Docker rmi

删除一个或者多个镜像
命令简介
用法
docker rmi [options]  IMAGE [ IMAGE ... ]
OPTIONS
--force , -f                强制删除镜像
--no-prune               不删除没有标签的parents镜像  
docker pull依赖基本指令docker
命令实例
用户可以根据ID,tag,digest删除一个镜像。
如果某一仓库中的一个镜像存在多个tag标签,只有删除了所有tag标签,镜像才会从存储中删除。
如果某一镜像同时存在多个仓库中,在删除时必须指定其仓库才能删除镜像,虽然使用-f可以强制删除,但是不建议这么做。
当开始真正删除存储中的镜像记录,而并非删除tag时,指令会显示所有docker layer删除记录。
同一仓库删除:
$ docker images
REPOSITORY   TAG     IMAGE ID         CREATED          SIZE
test           latest1    fd484f19954f    23 seconds ago    7 B
test           latest2    fd484f19954f    23 seconds ago      7 B
test           latest3    fd484f19954f    23 seconds ago      7 B
$ docker rmi latest1
Untagged: test:latest1
$ docker rmi latest2
Untagged: test:latest2
$ docker rmi latest3
Untagged: test:latest3
Deleted: fdssssdadsadasdasdas
Deleted: dasfsdewwqer21
仅当最后一个标签被删除时,docker rmi才会彻底删除该镜像
同一镜像多仓库:
$ docker images
REPOSITORY   TAG     IMAGE ID         CREATED          SIZE
test1           latest    fd484f19954f    23 seconds ago    7 B
test2           latest    fd484f19954f    23 seconds ago    7 B
test3           latest    fd484f19954f    23 seconds ago    7 B
$ docker rmi fd484f19954f
Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force
2013/12/11 05:47:16 Error: failed to remove one or more images
$ docker rmi test1
Untagged: test1:latest
$ docker rmi test2
Untagged: test2:latest
$ docker images
REPOSITORY     TAG    IMAGE ID        CREATED             SIZE
test3            latest   fd484f19954f   23 seconds ago       7 B
 $ docker rmi test3
Untagged: test3:latest
Deleted: fdssssdadsadasdasdas
Deleted: dasfsdewwqer21
使用IMAGE ID删除镜像
如果同时使用-f和IMAGE ID,docker会将所有tag标签引用全部删除,直至删除文件系统中的镜像。
$ docker images
REPOSITORY      TAG         IMAGE ID       CREATED             SIZE
test1             latest        fd484f19954f   23 seconds ago      7 B
test              latest        fd484f19954f   23 seconds ago      7 B
test2             latest        fd484f19954f   23 seconds ago      7 B
$ docker rmi -f fd484f19954f
Untagged: test1:latest
Untagged: test:latest
Untagged: test2:latest
Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
根据摘要删除无标签的镜像
$ docker rmi localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
Untagged: localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
Deleted: 4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125
Deleted: ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2
Deleted: df7546f9f060a2268024c8a230d8639878585defcc1bc6f79d2728a13957871b
 

Docker commit

根据镜像的容器创建镜像
命令简介
用法
docker commit [options]  CONTAINER [ REPOSITORY[:TAG] ]
OPTIONS
--author , -a              作者信息
--change, -c              使用dockerfile指令创建镜像
--message, -m            提交消息
--pause, -p                在提交时暂停容器
--no-prune               不删除没有标签的parents镜像  
docker pull依赖基本指令docker
命令实例
常规使用:
通常在启动镜像的容器后,一旦在容器中做了更改,比如安装了软件,需要重新commit一个镜像,否则下回重新启动该镜像的容器时,会发现之前的操作全部丢失。此时只有启动上回新生成的镜像才能看到之前的更改
docker commit -m “新安装了软件”  -a  “lsl” abcdefghijklm test
指令运行结束后,会返回新生存镜像的ID
 

Docker ps

显示所有的容器(默认仅显示运行的容器)
命令简介
用法
docker ps [options]
OPTIONS
--all,     -a               显示所有容器(默认仅显示运行的容器)
--filter , -f                 根据条件过滤输出
--format                  使用pretty_print模式输出
--last, -n                  显示最近创建的那个容器,默认最近1个
--lastest, -l               显示最近创建的容器
--no-trunc                显示完整的image信息
--quiet , -q                仅列出镜像id
--size, -s                  显示文件的总大小
  
docker pull依赖基本指令docker
命令实例
常规使用:
$docker ps
仅显示运行中的容器
显示所有状态的容器:
$docker ps -a
对于拥有同样配置的容器,如果仅仅只是端口不一样,在显示时会将他们列在一行中。
容器过滤条件
docker ps支持使用过滤条件选择目标容器,过滤参数为-f或者--filter。后面可跟形如”key=value”的参数,如果条件比较多,可以多次使用,如:docker ps --filter “foo=bar”  --filter “bif=baz”
常用的过滤条件:
id
 

Docker run

基于镜像新建一个容器,并运行指令(启动容器)
命令简介
Docker run执行时会基于一个镜像创建一个可写的容器层,然后使用命令启动容器。因此一般常说,docker run指令等价于先执行docker create,再执行docker start命令。
用法
docker run [options]  IMAGE [ COMMAND ] [ARG ...]
OPTIONS
docker run的选项比较多,这里仅仅列出一些常用的,更多请参照官方文档。
--interactive , -i        令镜像的标准输入一直保持打开(多和-t一起使用)
--tty , -t                     分配一个终端用于控制镜像(多和-i一起使用)
--rm                           当容器运行结束时,自动删除容器
--privileged               使用该指令后,连接容器时会有额外的权限
--detach, -d               以后台守护模式运行容器,并打印容器ID
--add-host                增加通用主机ip映射
--attach, -a
--blkio-weight
--blkio-weight-device
--cap-add
--cap-drop
--cgroup-parent
--cidfile
--cpu-count
--cpu-percent
--env, -e            设置环境变量
--name            指定镜像运行后的容器名,容器名必须唯一
--net="host"   docker与物理主机共用网络
--link             该参数指令了一种将两个容器连接在一起的方式。
                      通常两个隔离的容器,可以通过预先分配的容器ip地址和端口来访问(存在自动分配Ip端口,导致不可达)
                      还可以通过容器所在的主机的ip和端口(提前做好映射)间接访问另一个容器。
                      该参数提供了第三个方式访问,通过link参数指定两个容器后,就算不配置ip和端口,这两个容器可以实现如同在同一个操作系统。
--user, -u         指定运行用户名,或者uid 
--volume, -v    挂载外部卷到docker
--workdir, -w   指定容器运行时的工作目录
 
docker pull依赖基本指令docker
命令实例
指定docker容器名,并分配一个控制台
$ docker run --name test -it debian(iamge id)
root@d6c0fe130dba:/# exit 13
$ echo $?
13
$ docker ps -a | grep testd6c0fe130dba       
debian:7   "/bin/bash"   26 seconds ago  Exited (13) 17 seconds ago                         test
实例使用--name为容器指定了名字为test,-it选项为容器创建了一个控制台,it后面的debian是iamgeid,紧接着的下面会有一个类虚拟机的窗口,注意运行后的主机名换成docker随即分配的字符串。如上随后用exit退出了容器。
Docker container ID (--cidfile)
$ docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
指定执行后会创建一个容器并打印出test随后退出容器。--cidfile选项,会让容器在运行时创建一个文件,并将容器id写入文件,如果文件存在则会报错。另外,一旦容器退出运行,该文件也会消失。
为运行的docker容器分配一个数据卷
默认情况下,docker无法存储数据,容器关闭启动后,之前运行保存的数据,比如mysql数据,文进修改等,都无法保留,必须将需要保留和修改的数据放在外部数据卷,才可以达到保留和修改的目的。
如:
docker run -v /src/webapp:/opt/webapp -it ubuntu bash
以上指定执行后,会将主机上的/src/webapp目录,挂载到容器的/opt/webapp
若指定的主机目录不存在,docker run指令会负责创建
如:
docker run -v /webapp -it ubuntu bash
以上指令执行后,会自动生成一个数据文件夹,并挂载到容器的/webapp目录下
假如指令没有直接规定使用本机那个目录,挂载到容器的那个目录,则可以通过使用”docker inspect 容器id“命令查看卷是如何故在的。Source  和 destination分别代表本机和容器目录

Docker start

启动一个或者多个停止的容器
命令简介
docker start 可以用于启动处于终止态,已经被docker stop或者docker pause的容器。
用法
docker start [options]  CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
OPTIONS
--attach, -a
docker start依赖基本指令docker
命令实例
                    docker start my_container

Docker stop

                    使用SIGTERM停止一个或者多个正在运行的容器
用法
docker stop [options]  CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID(容器名)
OPTIONS
--time, -t    发送SIGKILL的超时时间,docker stop默认为10s
docker stop依赖基本指令docker
命令实例
                    docker stop my_container

Docker exec

                    在正在运行的容器中运行指令
命令简介
Docker exec用于在一个正在运行的容器中运行命令,默认使用容器的工作目录运行指令,用户也可以修改容器默认的工作目录。
 
用法
docker exec [options]  CONTAINER  COMMAND [ ARG ...]
CONTAINER:即CONTAINER ID
OPTIONS
--detach, -d          以后台守护形式运行指令
--interactive , -i      令镜像的标准输入一直保持打开(多和-t一起使用)
--tty , -t              分配一个终端用于控制镜像(多和-i一起使用)
--env, -e             设置环境变量
--workdir, -w         设置指令在容器中的工作目录
docker exec 依赖基本指令docker
命令实例
exec简单实例
控制台1运行一个容器:
        docker run --name ubuntu_bash --rm -i -t ubuntu bash
控制台2运行exec:
        docker exec -d ubuntu_bash touch /tmp/execWorks
使用exec与容器之间建立控制台:
        docker exec -it  ubuntu_bash bash

Docker kill

        使用SIGKILL信号,立即停止一个或者多个正在运行的容器。
命令简介
                    docker kill要求容器在接收到信号后立刻终止容器,而docker stop允许容器在一定时间内,按照正常流程结束容器的运行,二者还有一个区别是,docker stop的信号是可以被屏蔽的,而docker kill不允许。
                    使用-s选项后,docker kill可以如同linux下的kill指令一般给指定容器发送各种信号。
用法
docker stop [options]  CONTAINER [ CONTAINER ...]
CONTAINER:即CONTAINER ID
OPTIONS
--signale, -s    docker kill指令运行用户发送linux允许的信号机制
docker kill依赖基本指令docker
命令实例
                    docker kill my_container
发送信号:
                    docker kill --signal=SIGHUP my_container

Docker stats

                    显示正在运行的容器资源数据使用统计
命令简介
               docker stats可以获取一个或者多个容器的资源利用(类似linux top),只需要在指令后一一列出容器名或者容器ID,它们之间用空格隔开即可。处于终止态的容器也可以,只是没有信息返回而已。
用法
docker stats [OPTIONS] [CONTAINER ..]
OPTIONS
--all, -a            显示所有容器的资源使用情况
--format           格式化显示
--no-stream
--no-trunc         完整显示每条内容
docker statsl依赖基本指令docker
命令实例
$ docker stats
CONTAINER ID        NAME                                    CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b95a83497c91        awesome_brattain                        0.28%               5.629MiB / 1.952GiB   0.28%               916B / 0B           147kB / 0B          9
67b2525d8ad1        foobar                                  0.00%               1.727MiB / 1.952GiB   0.09%               2.48kB / 0B         4.11MB / 0B         2
e5c383697914        test-1951.1.kay7x1lh1twk9c0oig50sd5tr   0.00%               196KiB / 1.952GiB     0.01%               71.2kB / 0B         770kB / 0B          1
4bda148efbc0        random.1.vnc8on831idyr42slu578u3cr      0.00%               1.672MiB / 1.952GiB   0.08%               110kB / 0B          578kB / 0B          2
CONTAINER ID ,NAME   表示容器名和容器ID
CPU% MEM%             容器的主机CPU和内存使用率
MEM USAGE / LIMIT       容器允许使用的最大内存和已经使用的内存
NET I/O                   容器通过网络接收和发送的数据量
BLOCK I/O                容器从主机块设备上读写的数据量
PIDS                      容器创建的进程或者线程数
 
 

Docker pause

暂停容器中所有的进程
命令简介
用法
               docker pause   CONTAINER [ CONTAINER ...]
               CONTAINER:即CONTAINER ID
               docker pause 依赖基本指令docker
命令实例
docker pause my_container

Docker unpause

恢复容器中所有的进程,为docker pause的逆过程

Docker wait

阻塞运行容器,直到容器运行结束,打印容器退出代码
命令简介
用法
               docker wait   CONTAINER [ CONTAINER ...]
               CONTAINER:即CONTAINER ID
               docker wait 依赖基本指令docker
命令实例
启动一个容器:
               docker run -dit --name=my_container ubuntu bash
执行docker wait:
               docker wait my_container
在另一个控制台中终止容器
               docker stop my_container
在前一控制台中获取结果
               docker wait my_container
0

Docker rename

               容器重命名
命令简介
用法
               docker rename   CONTAINER NEW_NAME
               docker rename 依赖基本指令docker
命令实例
               docker rename my_container my_new_container

Docker inspect

    可用于查看镜像的详细信息,查看容器的运行信息,比如挂载点。

Docker cp

用于在docker容器和本地文件系统中复制文件或者文件夹
用法
               docker cp [options] CONTAINER:SRC_PATH DEST_PATH
               docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
命令实例
  将本机文件复制到docker容器中            
      docker cp MessageComlib/  45c2942716d5:/lovelsl
      45c2942716d5 是docker容器ID
      /lovelsl  是docker容器文件夹

Docker load

               从标准输入或者指定压缩包,导入一个docker镜像
               压缩包支持:gzip,bzip2,xz
               与docker save同用
用法:
               Docker load [options]
Options
               --input  -i    指定要读取压缩包,取代默认的标准输入
               --quiet  -q  
命令实例
方式一:
               docker load <  xxx.tar.gz
方式二:
               docker load -i xxx.tar
导入完毕后使用docker images查看导入的镜像

Docker save

               将一个docker镜像保存到压缩包中,(默认导入到标准输出流)
用法:
               docker save [options] IMAGE [IMAGE ...]
Options
               --output  -o
命令实例
方式一:
               docker save busybox > busybox.tar
方式二:
               docker save -o busybox.tar  busybox(image id)
               docker save -o fedora-latest.tar fedora:latest
               docker save myimage:lastes | gzip > myimage.tar.gz

Docker build

               使用Dockerfile构建一个镜像
用法:
               docker build [options] PATH | URL | -
Options
               --tag  -t  指定构建的镜像名和标签,格式为:镜像名:标签名
 
命令实例
方式一:
Docker build .
方式二:
Docker build -t xxx .
 
posted @ 2020-12-19 23:52  dos_hello_world  阅读(223)  评论(0)    收藏  举报