设为首页 收藏本站
查看: 1892|回复: 1

[经验分享] Docker从入门到实战(四)

[复制链接]

尚未签到

发表于 2019-2-22 09:15:13 | 显示全部楼层 |阅读模式
  一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待!
Docker从入门到实战(四)
Docker基础
一:Docker基本操作
  一般情况安装Docker之后系统会自动创建一个Docker的用户组,如果没有创建可以手动创建
groupadd docker
把当前非root用户加入group内,然后退出重新登陆就生效了(本例是新建了一个用户cheng)
gpasswd -a cheng docker
service docker restart

切换当前会话到新group或者重启X会话
newgrp – docker 或者 pkill X
注意这一步是必须的,否则因为groups命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以docker images 执行时同样有错,然后在终端中运行docker后按回车键,可以看到输出的关于docker的使用基本说明。

Docker命令分为管理命令、镜像命令、容器命令、仓库命令、网路命令、数据卷命令、编排命令等,命令的分类在每次版本发布时都有调整,不过大同小异(下面以26个英文字母排序,帮助文档请-h或者—help查看)

  • 依附容器的docker attach命令
    中文意思是附加、贴上、系上等意思,所以dokcer attach主要的作用就是进入容器,这个容器和后面的docker exec类似但是完全不一样。
    使用exit命令或者ctrl+C命令是停止容器,退出容器命令可使用ctrl+P,然后使用ctrl+Q命令,即可退出容器的虚拟终端,此时容器还在运行。
    官方不推荐使用docker attach命令进入开启了交互模式的容器,docker attach的主要功能是查看信息,容器内部操作有更加方便的docker exec命令,将在稍后介绍。
  • 构建镜像的docker build 命令
    -c :控制cpu使用
    -f :选择dockerfile名称
    -m:设置构建内存上限
    -q:不显示构建过程的一些信息
    -t:为构建的镜像打上标签
  • 提交容器的docker commit命令
    -a:添加作者信息,方便维护
    -c:修改dockerfile指令,目前支持的有以下指令
    CMD |ENTRYPOINT |ENV |EXPOSE |LABEL |ONBUILD |USER |VOLUME |WORKDIR
    -m:类似git commit -m这样,提交修改信息
    -p: 暂停正在commit的操作
  • 复制文件到宿主机的docker cp 命令
    命令解释如下:
    docker cp :/file/path/within/container /host/path/target
  • 创建容器的docker create 命令
    在docker容器状态中有一种是created,表示容器已经创建,但是没有启动,它和stop不同,stop通常都是手动或者外部操作容器停止的,而created有可能是手动创建但是没有成功启动,created状态的容器不占用内存和CPU资源。创建后的容器可以使用docker start containerID的方式启动容器。
  • 查看容器变化的docker diff命令
    docker diff 的语法如下:
    docker diff containerID
    docker diff命令主要用于显示当前运行容器和镜像的不同,docker diff的运行与容器的状态无关,只是显示文件差异
  • 查看事件的docker events命令
    docker events涵盖了几乎全部docker事件,通过-f指定参数,还可以过滤不必要的事件,得到更精简的事件信息
    使用说明如下:
    docker events -f container=
    docker events -f image=
    docker events -f volume=
    docker events -f network=
    docker events -f daemon=
    只有reload一个值,用于监控记录docker守护进程的状态
    其他还有
    docker events -f label= or label==
    docker events -f event=
    docker events -f type=
  • 进入容器的docker exec命令
    docker exec主要用于进入容器内部进行操作的一个重要命令,比attach功能更强大,通过docker exec可以像使用ssh登陆服务器一样操作容器,所以一般进入容器的命令都是使用docker exec而不是docker attach
    常用参数有以下几个:
    -d:分离模式,在后台运行的命令
    -i:交互模式
    -t:分配一个TTY
    -u:指定用户和用户组,格式:[:]
    使用exec命令进入容器内部就如同进入另一个机器一样,并且使用exit命令,不会像attach那样导致容器停止,所以非常适合容器内部操作
  • 导出容器的docker export命令
    docker export命令用于导出本地存储的容器和docker save类似(用于导出本地镜像),docker export导出的容器通常为tar包,方便传输到其他地方
    使用方法有两种:
    docker export -o containerName.tar containerName
    docker export containerName > containerName.tar
    使用docker export命令导出的容器并不会压缩容器大小
  • 查看镜像历史的docker history命令
    以ubuntu:14.04为例,查看镜像历史
    docker history ubuntu:14.04
  • 查看本地镜像的docker images命令
    docker images命令用于查看本地存储的docker镜像
    主要参数如下:
    -a:显示所有镜像,包括中间镜像(悬挂镜像),默认不显示
    -f:过滤显示,可选的值有
    docker images -f dangling=[true|false]
    docker images -f label=[=]
    docker images -f before=([:tag] | |)
    docker images -f since=([:tag] | |)
    -q:只显示ID
  • 导入容器的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
  • 查看docker信息得docker info命令
    这个大概是这么多命令中最简单易懂的命令了,-D参数显示docker system的debug信息
    docker info -D
  • 查看各项详细信息的docker inspect命令
    inspect有检阅,检查的意思,该命令的用途是检查容器或者镜像详细信息的一个命令
  • 杀死容器的docker kill命令
    stop和kill的区别在于docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill命令则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
  • 导入镜像的docker load命令
    docker load命令的作用是导入使用docker save导出的镜像,和export、import负责容器的导出导入类似,save、load负责镜像的导出导入。
    -i:指定导出文件
    例如: docker load -I ubuntu.tar
    -q:可以不显示导入的一些信息,在一些脚本中可有效减少输出干扰
    还可以通过符号导出镜像
    docker save ubuntu:14.04 > ubuntu.tar
  • 搜索镜像的docker search命令
    -f:可以定制返回信息,可选参数有以下三个
    is-automated=(true|false)
    is-official=(true|false)
    stars=
    例如:搜索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个结果
  • 管理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
  • 启动容器的docker start命令
    此命令是启动一个或多个停止状态的容器,docker start命令后边可以是容器名称也可以是容器ID
    -a:显示STDOUT/STDERR信息
    -i:显示STDIN信息
  • 查看容器的docker stats命令
    此命令可以查看任何状态下的容器状态,该命令输出的内容是实时更新的,取消查看时使用Ctrl+c即可
    不使用任何参数,会显示所有正在运行的容器状态,要显示全部(包括非运行状态)的容器状态,可以添加-a参数
    只想查看某一时刻的状态,可以使用--no-stream参数,这样终端输出结束后会自动返回可交互shell界面
    例:docker stats –-no-stream nginx
  • 停止容器的docker stop命令
    此命令会停止一个或者多个正在运行的容器,docker stop命令会向容器发送正常的信号,而docker kill命令会强制终止容器进程,后者可能造成数据丢失
  • 管理集群的docker swarm命令
    docker swarm与前面的docker node,docker service命令共同组成集群管理编排的“三剑客”
    操作  详细说明
    init    初始化集群
    join    以node(worker)或者manager的身份加入集群
    join-token  管理join-token
    update  更新集群
    leave   退出集群
  • 设置镜像标签的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
  • 查看容器进程的docker top命令
    此命令与linux下的top命令一样,使用docker top 可以查看指定容器内正在运行的进程
  • 恢复暂停容器的docker unpause命令
    这个与前面的docker pause命令是相对的
  • 更新容器的docker update命令
    对容器的是指额更新时可以使用docker update命令,使用时容器不需要停止或者重启。需要注意的是,这里说的容器设置是指容器启动时添加的参数,例如:使用docker run命令时设置cpu限制,可以使用docker update命令取消
    在docker update命令的参数中,大部分与docker run命令的参数相同,唯一不同的是—restart参数,添加该参数是不会立刻修改容器配置,而是在未来容器重启时生效
  • 查看docker版本的docker version命令
    查看docker版本,使用-f参数可以格式化输出,例如:docker version -f '{{.Server}}'
    常用的是docker version
  • 管理数据卷的docker volume命令
    此命令是用来管理数据卷,数据卷是容器数据持久化的一个组件。
    ls:可以查看本机的全部数据卷
    rm:删除不需要的数据卷(数据卷与容器的生命周期完全独立,所以容器删除后数据卷并不会删除,时间久了数据卷就会越来越多)
    inspect:查看数据卷的详细信息
    create:创建一个数据卷
    prune:删除所有未使用的卷
  • 设置等待的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:

  • The Docker client contacted the Docker daemon.
  • The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
  • The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
  • 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
如此就完成了一个镜像的构建与运行





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675592-1-1.html 上篇帖子: 使用国内Docker镜像源 下篇帖子: Docker Swarm集群初探
累计签到:1948 天
连续签到:44 天
发表于 2019-2-23 08:10:02 | 显示全部楼层
感谢楼主的分享!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表