Docker从入门到实战(四)

一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待!php

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查看)node

  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.linux

To generate this message, Docker took the following steps:nginx

  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 bashgit

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

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

三:构建第一个docker镜像

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

相关文章
相关标签/搜索