docker

常用指令

帮助指令

docker version

用于查询docker的客户端和服务器端版本。

以下是执行过程和查询到的结果:

C:\Users\yw>docker version
Client: Docker Engine - Community
 Azure integration  0.1.15
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:43:18 2020
 OS/Arch:           windows/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:49:27 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker info

显示 Docker 系统信息,包括镜像和容器数。

docker --help

用于查询docker使用帮助

镜像命令

docker images 列出主机上的镜像

语法:docker images [OPTIONS] [REPOSITORY[:TAG]]

[REPOSITORY[:TAG]] 为具体镜像名

options:

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);

    C:\Users\yw>docker images -a
    REPOSITORY                          TAG                 IMAGE ID            CREATED           SIZE
    grafana/grafana                     latest              68f75fcab5a9        4 weeks ago      186MB
    prom/prometheus                     latest              7cc97b58fb0e        5 weeks ago      168MB
    nacos/nacos-server                  latest              a81222848024        2 months ago     921MB
    tomcat                              latest              f796d3d2c195        3 months ago     647MB
    
  • --digests :显示镜像的摘要信息;

    C:\Users\yw>docker images --digests
    REPOSITORY           TAG       DIGEST                       IMAGE ID       CREATED        SIZE
    grafana/grafana      latest    sha256:d581a6f431b53515c64   68f75fcab5a9   4 weeks ago    186MB
    prom/prometheus      latest    sha256:b899dbd1b9017b9a379   7cc97b58fb0e   5 weeks ago    168MB
    nacos/nacos-server   latest    sha256:c2f6fee129ed53381ab   a81222848024   2 months ago   921MB
    tomcat               latest    sha256:1bab37d5d97bd8c74a4   f796d3d2c195   3 months ago   647MB
    
  • -f :显示满足条件的镜像;

    • dangling:显示标记为空的镜像,值只有true和false

      C:\Users\yw>docker images -f "dangling=true"
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      
      C:\Users\yw>docker images -f "dangling=false"
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      grafana/grafana     latest              68f75fcab5a9        4 weeks ago         186MB
      prom/prometheus     latest              7cc97b58fb0e        5 weeks ago         168MB
      nacos/nacos-server  latest              a81222848024        2 months ago        921MB
      tomcat              latest              f796d3d2c195        3 months ago        647MB
      
    • label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的( label=<key> or label=<key>=<value>

      $ docker images --filter "label=com.example.version"
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      match-me-1          latest              eeae25ada2aa        About a minute ago   188.3 MB
      match-me-2          latest              dea752e4e117        About a minute ago   188.3 MB
      
      $ docker images --filter "label=com.example.version=1.0"
      REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
      match-me            latest              511136ea3c5a        About a minute ago   188.3 MB
      
    • before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表(<image-name>[:<tag>], <image id> 或 image@digest

      C:\Users\yw>docker images -f "before=prom/prometheus"
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      nacos/nacos-server  latest              a81222848024        2 months ago        921MB
      tomcat              latest              f796d3d2c195        3 months ago        647MB
      
    • since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像

      C:\Users\yw>docker images -f "before=prom/prometheus"
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      nacos/nacos-server  latest              a81222848024        2 months ago        921MB
      tomcat              latest              f796d3d2c195        3 months ago        647MB
      
    • reference:这个是添加正则进行匹配

      以下是官网给的示例,自己试验却无法匹配到

      $ docker images --filter=reference='busy*:*libc'
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      busybox             uclibc              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             glibc               21c16b6787c6        5 weeks ago         4.19 MB
      
      $ docker images --filter=reference='busy*:uclibc' --filter=reference='busy*:glibc'
      REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
      busybox             uclibc              e02e811dd08f        5 weeks ago         1.09 MB
      busybox             glibc               21c16b6787c6        5 weeks ago         4.19 MB
      
  • --format :指定返回值的模板文件;

    Placeholder Description
    .ID Image ID
    .Repository Image repository
    .Tag Image tag
    .Digest Image digest
    .CreatedSince Elapsed time since the image was created
    .CreatedAt Time when the image was created
    .Size Image disk size
    C:\Users\yw>docker images --format "{{.ID}}: {{.Repository}}"
    68f75fcab5a9: grafana/grafana
    7cc97b58fb0e: prom/prometheus
    a81222848024: nacos/nacos-server
    f796d3d2c195: tomcat
    
    C:\Users\yw>docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
    IMAGE ID            REPOSITORY                          TAG
    68f75fcab5a9        grafana/grafana                     latest
    7cc97b58fb0e        prom/prometheus                     latest
    a81222848024        nacos/nacos-server                  latest
    f796d3d2c195        tomcat                              latest
    
  • --no-trunc :显示完整的镜像信息;(image id进行了部分裁剪)

    C:\Users\yw>docker images --no-trunc
    REPOSITORY          TAG                 IMAGE ID                  CREATED             SIZE
    grafana/grafana     latest              sha256:68f75fcab5a9372fb  4 weeks ago         186MB
    prom/prometheus     latest              sha256:7cc97b58fb0e2e893  5 weeks ago         168MB
    nacos/nacos-server  latest              sha256:a81222848024f406b  2 months ago        921MB
    tomcat              latest              sha256:f796d3d2c1954864e  3 months ago        647MB
    
  • -q :只显示镜像ID。

C:\Users\yw>docker images -q
68f75fcab5a9
7cc97b58fb0e
a81222848024
f796d3d2c195
e1d7dc9731da

docker search 查找镜像

查找某个镜像(在dockerHub中)

格式:docker search [OPTIONS] 镜像名字

1608108036478.png

options:

  • --no-trunc : 显示完整的镜像描述
1608108477460.png
  • -s : 列出收藏数不小于指定值的镜像。

    C:\Users\yw>docker search -s 84  tomcat
    Flag --stars has been deprecated, use --filter=stars=3 instead
    NAME                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    tomcat              Apache Tomcat is an open source implementati…   2900      [OK]
    tomee               Apache TomEE is an all-Apache Java EE certif…   85        [OK]
    
  • --automated : 只列出 automated build类型的镜像;

    自动化构建,就是使用Docker Hub连接一个包含Dockerfile文件的GitHub仓库或者BitBucket仓库,Docker Hub则会自动构建镜像,通过这种方式构建出来的镜像会被标记为Automated Build,也称之为授信构建(Trusted Build),这种构建方式构建出来的镜像,其他人在使用时可以自由的查看Dockerfile内容,知道该镜像是怎么来的,同时,由于构建过程是自动的,所以能够确保仓库中的镜像都是最新的。

1608108738694.png

docker pull 下载镜像

从仓库中下载镜像

格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]

可以通过以下方式来拉取镜像:

# 默认拉取最新版本
docker pull tomcat
# 根据TAG拉取指定版本
docker pull tomcat:9.0.41
# 根据DIGEST拉取指定版本
# 常使用于锁定某版本,DIGEST在pull时可以获得
docker pull tomcat:sha256:XXXXXXXX

docker rmi 删除镜像

删除一个或多个镜像

格式:docker rmi [OPTIONS] IMAGE [IMAGE...]

options:

  • -f 或 --force: 强制删除,(想要删除创建了容器(或有容器在运行也可以)的镜像,此时只是删除了镜像,容器并没有删除,容器对应的镜像名变成镜像对应的DIGEST)
  • --no-prune : 不删除镜像无命名的父镜像

样例:

# 删除一个
docker rmi -f image-id
# 删除多个
docker rmi -f image-name1:tag image-name2:tag
# 删除全部
docker rmi -f $(docker image -qa)

容器命令

docker run 创建容器

运行一个命令在新的容器中。镜像是属于只读的,dockers

格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明(常用):有些是一个减号,有些是两个减号

  • --name="容器新名字": 为容器指定一个名称;不指定的话,会随机一个名字

    C:\Users\yw>docker run --name ywhello hello-world
    C:\Users\yw>docker ps -a
    CONTAINER ID  IMAGE         COMMAND     CREATED          STATUS                    NAMES
    e64796877a41  hello-world   "/hello"    5 seconds ago    Exited (0) 3 seconds ago  ywhello
    72be7c2e1f1b  hello-world   "/hello"    57 seconds ago   Exited (0) 55 seconds ago angry_gauss
    
1608196074013.png
  • -d: 后台运行容器,并返回容器ID,也即启动守护式容器;也就是隐藏在后台运行,docker ps 不可见,docker ps -a可见

  • -i:以交互模式运行容器,通常与 -t 同时使用;

  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • -P: 随机端口映射;

  • -p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort

  • --env , -e : 设置环境变量

docker ps 列出当前容器

列出当前正在运行的容器

格式:docker ps [OPTIONS]

OPTIONS说明(常用):

  • -a :列出当前所有正在运行的容器+历史上运行过的
  • -l :显示最近创建的容器。
  • -n:显示最近n个创建的容器。
  • -q :静默模式,只显示容器编号。
  • --no-trunc :不截断输出。

退出容器方式

有两种方式:

  • 输入exit,退出容器,容器停止运行
  • ctrl+P+Q,退出容器,容器不停止

docker start 启动容器

格式:docker start [OPTIONS] CONTAINER [CONTAINER...]

docker start 容器id或容器名

docker restart 重启容器

格式:docker restart [OPTIONS] CONTAINER [CONTAINER...]

options:

  • --time , -t : 延时重启,默认值10s

docker stop 停止容器

格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]

options:

  • --time , -t : 延时关闭,默认值10s

docker kill 强制停止容器

格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]

docker rm 删除已停止的容器

格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]

options:

  • -f : 强制删除正在运行中的容器

  • -v : 删除容器关联的挂载卷

    $ docker rm -v redis
    

一次性删除多个容器:

# 第一种
docker rm -f $(docker ps -a -q)
# 第二种
docker ps -a -q | xargs docker rm

查看容器日志

docker logs [OPTIONS] CONTAINER

options:

  • -t 是加入时间戳

  • -f 跟随最新的日志打印

  • --tail 数字 :从日志末尾开始显示的行数

  • --since : 显示自时间戳记以来的日志(例如2013-01-02T13:23:37Z)或相对记录(例如42m的42分钟)

  • --until : 在时间戳(例如2013-01-02T13:23:37Z)或相对(例如42m持续42分钟)之前显示日志

  • docker logs -f --until=2s test
    

docker top 查看容器内运行的进程

docker top CONTAINER [ps OPTIONS]

docker inspect 查看容器内部细节

格式:docker inspect [OPTIONS] NAME|ID [NAME|ID...]

options:

  • --format, -f : 使用给定的Go模板格式化输出

    # 获取实例的IP地址
    docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID
    # 获取实例的MAC地址
    docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID
    # 获取实例的日志路径
    docker inspect --format='{{.LogPath}}' $INSTANCE_ID
    # 获取实例的image名称
    docker inspect --format='{{.Config.Image}}' $INSTANCE_ID
    # 列出所有端口绑定
    docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
    # 查找特定的端口映射
    docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID
    
  • --type: 返回指定类型的JSON

  • --size , -s : 如果类型为容器,则显示文件总大小

进入正在运行的容器并以命令行交互

# exec 是在容器中打开新的终端,并且可以启动新的进程
docker exec -it 容器ID bashShell
# 重新进入 attach 直接进入容器启动命令的终端,不会启动新的进程
docker attach 容器ID

从容器内拷贝文件到主机上

docker cp  容器ID:容器内路径 目的主机路径

docker commit提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

容器数据卷

宿主机和容器之间的数据交互,当容器停止运行时,宿主机向数据卷中添加文件或修改文件,容器启动后依旧可以进行同步。

命令行添加

# 直接添加
 docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名
 # 带权限添加
  docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

数据卷容器

容器与容器间的数据交互。 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器 。容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

当已有容器A启动时,运行一个容器B依赖容器A中容器卷。

docker run -it --name 容器B --volumes-from 容器A zzyy/centos

docker file

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本.

基础知识

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • 表示注释

  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

保留字

  1. FROM:基础镜像,当前新镜像是基于哪个镜像的
  2. MAINTAINER:镜像维护者的姓名和邮箱地址
  3. RUN:容器构建时需要运行的命令
  4. EXPOSE:当前容器对外暴露出的端口
  5. WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  6. ENV : 用来在构建镜像过程中设置环境变量. ENV MY_PATH /usr/mytest这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量, 比如:WORKDIR $MY_PATH
  7. ADD :将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  8. COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。COPY src dest 或 COPY ["src", "dest"]
  9. VOLUME:容器数据卷,用于数据保存和持久化工作
  10. CMD:指定一个容器启动时要运行的命令。Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  11. ENTRYPOINT :指定一个容器启动时要运行的命令。ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
  12. ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容