zoukankan      html  css  js  c++  java
  • Docker从入门到实战(四)

    Docker基础

    一:Docker基本操作

    一般情况安装Docker之后系统会自动创建一个Docker的用户组,如果没有创建可以手动创建
    groupadd docker
    把当前非root用户加入group内,然后退出重新登陆就生效了(本例是新建了一个用户cheng)
    gpasswd -a cheng docker
    service docker restart
    Docker从入门到实战(四)
    切换当前会话到新group或者重启X会话
    newgrp – docker 或者 pkill X
    注意这一步是必须的,否则因为groups命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以docker images 执行时同样有错,然后在终端中运行docker后按回车键,可以看到输出的关于docker的使用基本说明。
    Docker从入门到实战(四)
    Docker命令分为管理命令、镜像命令、容器命令、仓库命令、网路命令、数据卷命令、编排命令等,命令的分类在每次版本发布时都有调整,不过大同小异(下面以26个英文字母排序,帮助文档请-h或者—help查看)

    1. 依附容器的docker attach命令
      中文意思是附加、贴上、系上等意思,所以dokcer attach主要的作用就是进入容器,这个容器和后面的docker exec类似但是完全不一样。
      使用exit命令或者ctrl+C命令是停止容器,退出容器命令可使用ctrl+P,然后使用ctrl+Q命令,即可退出容器的虚拟终端,此时容器还在运行。
      官方不推荐使用docker attach命令进入开启了交互模式的容器,docker attach的主要功能是查看信息,容器内部操作有更加方便的docker exec命令,将在稍后介绍。
    2. 构建镜像的docker build 命令
      -c :控制cpu使用
      -f :选择dockerfile名称
      -m:设置构建内存上限
      -q:不显示构建过程的一些信息
      -t:为构建的镜像打上标签
    3. 提交容器的docker commit命令
      -a:添加作者信息,方便维护
      -c:修改dockerfile指令,目前支持的有以下指令
      CMD |ENTRYPOINT |ENV |EXPOSE |LABEL |ONBUILD |USER |VOLUME |WORKDIR
      -m:类似git commit -m这样,提交修改信息
      -p: 暂停正在commit的操作
    4. 复制文件到宿主机的docker cp 命令
      命令解释如下:
      docker cp <containerID>:/file/path/within/container /host/path/target
    5. 创建容器的docker create 命令
      在docker容器状态中有一种是created,表示容器已经创建,但是没有启动,它和stop不同,stop通常都是手动或者外部操作容器停止的,而created有可能是手动创建但是没有成功启动,created状态的容器不占用内存和CPU资源。创建后的容器可以使用docker start containerID的方式启动容器。
    6. 查看容器变化的docker diff命令
      docker diff 的语法如下:
      docker diff containerID
      docker diff命令主要用于显示当前运行容器和镜像的不同,docker diff的运行与容器的状态无关,只是显示文件差异
    7. 查看事件的docker events命令
      docker events涵盖了几乎全部docker事件,通过-f指定参数,还可以过滤不必要的事件,得到更精简的事件信息
      使用说明如下:
      docker events -f container=<name or id>
      docker events -f image=<tag or id >
      docker events -f volume=<name or id>
      docker events -f network=<name or id>
      docker events -f daemon=<name or id>
      只有reload一个值,用于监控记录docker守护进程的状态
      其他还有
      docker events -f label=<key> or label=<key>=<value>
      docker events -f event=<event action>
      docker events -f type=<container or image or volume or network r daemon>
    8. 进入容器的docker exec命令
      docker exec主要用于进入容器内部进行操作的一个重要命令,比attach功能更强大,通过docker exec可以像使用ssh登陆服务器一样操作容器,所以一般进入容器的命令都是使用docker exec而不是docker attach
      常用参数有以下几个:
      -d:分离模式,在后台运行的命令
      -i:交互模式
      -t:分配一个TTY
      -u:指定用户和用户组,格式:<name|uid>[:<group|gid>]
      使用exec命令进入容器内部就如同进入另一个机器一样,并且使用exit命令,不会像attach那样导致容器停止,所以非常适合容器内部操作
    9. 导出容器的docker export命令
      docker export命令用于导出本地存储的容器和docker save类似(用于导出本地镜像),docker export导出的容器通常为tar包,方便传输到其他地方
      使用方法有两种:
      docker export -o containerName.tar containerName
      docker export containerName > containerName.tar
      使用docker export命令导出的容器并不会压缩容器大小
    10. 查看镜像历史的docker history命令
      以ubuntu:14.04为例,查看镜像历史
      docker history ubuntu:14.04
    11. 查看本地镜像的docker images命令
      docker images命令用于查看本地存储的docker镜像
      主要参数如下:
      -a:显示所有镜像,包括中间镜像(悬挂镜像),默认不显示
      -f:过滤显示,可选的值有
      docker images -f dangling=[true|false]
      docker images -f label=<key>[=<=value>]
      docker images -f before=(<image-name>[:tag] |<image-id> |<image@digest>)
      docker images -f since=(<image-name>[:tag] |<image-id> |<image@digest>)
      -q:只显示ID
    12. 导入容器的docker import命令
      docker import命令和docker export命令相对,用于导入容器,导入后会变成镜像,用法和docker export命令相似
      使用网络地址导入
      docker import https;//example.com/container.tar
      通过管道导入
      cat exampleContainer.tgz |Docker import –message “New image imported from tarball”- exampleContainerlocal:newtag
      还可以直接导入本地tar包
      docker import /path/to/exapmpleContainer.tgz
      甚至可以从目录导入
      sudo tar -c . |docker import – exampleContainerdir
    13. 查看docker信息得docker info命令
      这个大概是这么多命令中最简单易懂的命令了,-D参数显示docker system的debug信息
      docker info -D
    14. 查看各项详细信息的docker inspect命令
      inspect有检阅,检查的意思,该命令的用途是检查容器或者镜像详细信息的一个命令
    15. 杀死容器的docker kill命令
      stop和kill的区别在于docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill命令则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
    16. 导入镜像的docker load命令
      docker load命令的作用是导入使用docker save导出的镜像,和export、import负责容器的导出导入类似,save、load负责镜像的导出导入。
      -i:指定导出文件 
      例如: docker load -I ubuntu.tar
      -q:可以不显示导入的一些信息,在一些脚本中可有效减少输出干扰
      还可以通过<符号导入,下面以一个之前导出的镜像busybox为例
      docker load < busybox.tar.gz
    17. 登陆仓库的docker login命令
      docker login命令时 一个登陆到Registry的命令,Registry是docker公司为了更方便镜像流通而设计的一种镜像仓库,像手机上的应用商店一样,用户可以在上面发布镜像和拉取镜像,官方的docker hub还提供更高级的企业服务
      使用docker login命令直接登陆到docker hub
      使用docker login localhost:8080的方式可以登录到第三方仓库
      登陆信息均会保存在$HOME/.docker/config.json目录下
      D-Bus Secret Service网址为https://github.com/docker/docker-credential-helpers/releases
      Apple OS X keychain网址为https://github.com/docker/docker-credential-helpers/releases
      Microsoft Windows Credential Manager网址为https://github.com/docker/docker-credential-helpers/releases
      在config.json中修改
      {
      “credStore”:“osxkeychain”
      }
    18. 登出仓库的docker logout命令
      docker logout命令是登出命令,使用该命令可以登出仓库,如果使用第三方证书存储,只需要删除证书文件以及config.json即可。
    19. 查看容器日志的docker logs命令
      docker logs用于显示容器的日志,这一点和attach有点类似,不同的地方在于attach可以相对输出更自由,用户可以定制输出内容,而logs则是根据容器命令输出信息,是无交互的
      主要参数如下
      --details:显示更详细的日志
      -f:持续输出日志
      --since<string>:显示某字符串开始的日志
      --tail<string>:显示某字符串之前的日志
      -t:显示时间戳
    20. 管理网路的docker network命令
      docker network命令说明
      命令 说明
      network connect 连接一个容器到指定网路
      network create 创建一个网路
      network disconnect 指定一个网路断开一个容器
      network inspect 显示指定网络详细信息
      network ls 显示全部docker网络
      network rm 删除指定网络
      例如:docker netowork ls
    21. 管理节点的docker node命令
      docker node命令
      命令 说明
      node demote 将集群中的指定manager节点降权
      node inspect 显示节点的详细信息
      node update 更新节点属性
      node ps 显示正在运行的节点
      node ls 显示集群的全部节点
      node rm 从集群中删除指定节点
    22. 暂停容器的docker pause命令
      docker pause命令会暂停容器内的所有进程,此时,通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f 也观察不到日志的进一步输出
      命令格式如下:
      docker pause <container>
    23. 查看容器端口的docker port命令
      docker port命令用来输出容器的端口信息,与docker ps 的显示不同,该命令只会显示”暴露”的端口,对于未指定的暴露端口不会显示
    24. 查看本地容器信息的docker ps命令
      docker ps命令显示当前正在运行的容器
      主要参数如下
      -a:显示全部容器,包括各种状态的容器,只要存在就显示
      -f:添加过滤条件
      -n:显示最近创建的几个容器(包括所有状态的容器,-l显示最近创建的一个,遇到持续输出的信息还可以使用—no-trunc进行追加)
      -q:只显示ID
      -s:显示容器大小
      例:删除所有已经停止的容器
      docker rm $(docker ps -a -q)
      删除所有容器(包括运行中的容器)
      docker kill $(docker ps -q);docker rm $(docker ps -a -q)
      杀死所有正在运行的容器
      docker kill $(docker ps -a -q)
    25. 拉取镜像的docker pull命令
      docker pull命令为拉取镜像的命令,通过该命令不仅可以拉取docker hub的镜像,还可以通过指定仓库地址拉取私有仓库镜像
      使用docker pull -a 会把所有标签都拉取到本地,使用—disable-content-trust=false会在拉取时校验镜像,保证传输安全,默认是关闭的
    26. 推送镜像的docker push命令
      docker push命令的作用是把本地的镜像推送到镜像仓库,和docker pull一样,使用—disable-content-trust=false会在拉取时校验镜像,保证传输安全,默认是关闭的
      使用此命令时,如果不指定tag会默认把该镜像的全部镜像都推送到仓库。例如本地存在ubuntu:14.04和ubuntu:16.04两个镜像,如果使用docker push ubuntu命令推送会把这两个镜像都推送到仓库
    27. 重命名容器的docker rename命令
      该命令可以在不改变容器状态的情况下重命名容器,格式为:docker rename<旧容器名><新容器名>,该命令一次只能更改一个容器名称
      该命令只能更改容器名称,镜像重命名会用docker tag命令
    28. 重启容器的docker restart命令
      此命令用来重启容器(不是重启docker,重启docker可以使用systemctl restart docker命令或者service docker restart命令重启docker),使用docker restart <Contailner1> <Contailner2>命令可以重启多个容器
      -t参数可以在重启设置等待容器停止的时间,如果容器在指定秒数之内没有停止,docker就会执行docker kill操作杀死容器,以便完成重启操作
    29. 删除容器的docker rm 命令
      docker rm <Container Name / Container ID>命令可以删除已经停止的容器,可以删除一个或多个容器
      -f:直接删除一个正在运行的容器
      -l:删除容器与其他容器的关联,但是会保留容器
      -v:删除容器的数据卷
    30. 删除镜像的docker rmi命令
      此命令时删除镜像的命令,删除镜像时最好指定镜像的tag,如果不指定会默认删除镜像的latest标签。该命令同样可以在后面接上多个镜像名称,删除多个镜像
      使用docker rmi命令删除镜像时,要确保没有容器使用该镜像也就是没有容器是使用该镜像启动的,才可以删除,否则会报错
      -f:强制删除镜像,即便有容器正在使用该镜像,但是这样只会删除镜像标签,不会影响正在运行的容器,实际上只有容器还在运行,镜像就不会被真正删除,用户使用docker commit操作提交容器为镜像,可以恢复镜像。
    31. 运行容器的docker run命令
      此命令参数超级多,可docker run –help查看
    32. 导出镜像的docker save命令
      此命令是用来导出镜像的,后面可以连接多个镜像,默认输出是STDOUT,意味着需要指定一个目标文件,可以通过-o参数来指定
      例:导出一个镜像
      docker save -o ubuntu.tar ubuntu:14.04
      导出多个容器
      docker save -o nginx_php.tar nginx:1.9 php:7.0-fpm
      除了-o参数,还可以使用>符号导出镜像
      docker save ubuntu:14.04 > ubuntu.tar
    33. 搜索镜像的docker search命令
      -f:可以定制返回信息,可选参数有以下三个
      is-automated=(true|false)
      is-official=(true|false)
      stars=<number>
      例如:搜索ubuntu的官方镜像
      搜索stars超过20并且是官方构建的ubuntu镜像
      docker search -f stars=20 -f is-official=true ubuntu
      搜索stars超过20并且是自动构建的ubuntu镜像
      docker search -f stars=20 -f is-automated=true ubuntu
      还有如—limit int这样的参数用来限制显示数量,默认是返回25个结果
    34. 管理docker service命令
      docker service命令的作用是管理集群中的服务,需要与docker swarm配合使用。使用docker service时,主机必须是swarm的manager
      命令 说明
      service create 创建service
      service inspect 取得service的详细信息
      service ps 取得service的任务信息
      service ls 取得service的列表信息
      service rm 删除service
      service scale 调整service的replicas
      service update 更新service
    35. 启动容器的docker start命令
      此命令是启动一个或多个停止状态的容器,docker start命令后边可以是容器名称也可以是容器ID
      -a:显示STDOUT/STDERR信息
      -i:显示STDIN信息
    36. 查看容器的docker stats命令
      此命令可以查看任何状态下的容器状态,该命令输出的内容是实时更新的,取消查看时使用Ctrl+c即可
      不使用任何参数,会显示所有正在运行的容器状态,要显示全部(包括非运行状态)的容器状态,可以添加-a参数
      只想查看某一时刻的状态,可以使用--no-stream参数,这样终端输出结束后会自动返回可交互shell界面
      例:docker stats –-no-stream nginx
    37. 停止容器的docker stop命令
      此命令会停止一个或者多个正在运行的容器,docker stop命令会向容器发送正常的信号,而docker kill命令会强制终止容器进程,后者可能造成数据丢失
    38. 管理集群的docker swarm命令
      docker swarm与前面的docker node,docker service命令共同组成集群管理编排的“三剑客”
      操作 详细说明
      init 初始化集群
      join 以node(worker)或者manager的身份加入集群
      join-token 管理join-token
      update 更新集群
      leave 退出集群
    39. 设置镜像标签的docker tag命令
      docker tag命令可以给镜像重命名,在docker中镜像、容器、网路、数据卷等组件在运行时都会获取一个ID,这个ID是独一无二的,但是这个ID太长了,不容易记忆,所以有了tag的概念,给镜像打上标签
      例如:给一个没有打标签的镜像打上标签
      docker tag a70c7fad1812 myusername/images:default
      还可以只修改镜像标签,不改动名称
      docker tag myusername/images:default myusername/images:new
      常用的情况还有修改名称以及标签
      docker tagmyusername/images:default myusername/images-new:latest
    40. 查看容器进程的docker top命令
      此命令与linux下的top命令一样,使用docker top <Container ID/Name>可以查看指定容器内正在运行的进程
    41. 恢复暂停容器的docker unpause命令
      这个与前面的docker pause命令是相对的
    42. 更新容器的docker update命令
      对容器的是指额更新时可以使用docker update命令,使用时容器不需要停止或者重启。需要注意的是,这里说的容器设置是指容器启动时添加的参数,例如:使用docker run命令时设置cpu限制,可以使用docker update命令取消
      在docker update命令的参数中,大部分与docker run命令的参数相同,唯一不同的是—restart参数,添加该参数是不会立刻修改容器配置,而是在未来容器重启时生效
    43. 查看docker版本的docker version命令
      查看docker版本,使用-f参数可以格式化输出,例如:docker version -f '{{.Server}}'
      常用的是docker version
    44. 管理数据卷的docker volume命令
      此命令是用来管理数据卷,数据卷是容器数据持久化的一个组件。
      ls:可以查看本机的全部数据卷
      rm:删除不需要的数据卷(数据卷与容器的生命周期完全独立,所以容器删除后数据卷并不会删除,时间久了数据卷就会越来越多)
      inspect:查看数据卷的详细信息
      create:创建一个数据卷
      prune:删除所有未使用的卷
    45. 设置等待的docker wait命令
      执行docker wait命令后,该命令会“hang”在当前终端,直到容器停止,此时会打印出容器的退出码。该命令一般会用在容器监控、异常捕捉方面。

      二:启动第一个容器

      第一件事就是打印Hello World,就像我们学Python一样,先开是学写Hello World,下面直接运行hello-world镜像,使用docker run命令是如果本地没有该镜像,那么会自动从Docker Hub中拉取镜像
      docker run --rm hello-world
      这里使用的—rm表示容器退出后自动删除该容器
      运行后信息如下
      Hello from Docker!
      This message shows that your installation appears to be working correctly.

    To generate this message, Docker took the following steps:

    1. The Docker client contacted the Docker daemon.
    2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
      (amd64)
    3. The Docker daemon created a new container from that image which runs the
      executable that produces the output you are currently reading.
    4. The Docker daemon streamed that output to the Docker client, which sent it
      to your terminal.

    To try something more ambitious, you can run an Ubuntu container with:
    $ docker run -it ubuntu bash

    Share images, automate workflows, and more with a free Docker ID:
    https://cloud.docker.com/

    For more examples and ideas, visit:
    https://docs.docker.com/engine/userguide/
    这就是hello-world输出的内容,显示这些信息则说明docker运行正常了

    三:构建第一个docker镜像

    vi Dockerfile
    FROM alpine
    CMD "echo" "Hello World !”
    保存文件,打开终端,使用docker build命令构建第一个镜像
    docker build -t hello .
    -t 参数表示给构建的镜像打上名为hello的标签,构建完成后直接运行
    docker run –-rm hello
    如此就完成了一个镜像的构建与运行
    Docker从入门到实战(四)

  • 相关阅读:
    Java之Map遍历方式性能分析:ketSet与entrySet
    Java之null保留字
    Java之&0xff用法解析以及原码、反码、补码相关知识
    Android之使用apt编写编译时注解
    Android之ViewPager.PageTransformer
    Android Studio利用javac导出Api文档
    06_Java多线程、线程间通信
    05_Java异常(Exception)
    04_Java面向对象特征之继承与多态
    03_Java面向对象特征: 封装性
  • 原文地址:https://www.cnblogs.com/zgq123456/p/9861524.html
Copyright © 2011-2022 走看看