docker

docker从入门到精(fang)通(qi)(一)

2017-03-06  本文已影响149人  摩诃迦葉

导语:一篇我自己的docker学习总结,重在基础,如有错误,欢迎各种讨论、建议、批评、指正。

1、docker是什么

docker是一种Linux容器(LXC,即linux container)引擎,它与传统的虚拟化技术的区别在于容器本身不做硬件层级的虚拟化,而是一种操作系统级的虚拟化技术,通过Linux内核的一些特性(namespace、control group)实现容器与容器、容器与宿主机之间的隔离,它是一种半虚拟化技术。
docker的特点有:

2、docker有什么

在docker官网上有这么几款开源工具:

docker由哪几部分组成呢?

3、docker怎么装

安装前的检查

docker依赖条件极少,各平台安装包发行较为完善,安装过程也非常简单。安装之前首先要检查以下先决条件:

docker安装

具体安装ubuntu使用apt-get安装docker-engine包,redhat/centos 6.X中需先添加epel源后使用yum安装docker-io包。
P.S. Ubuntu中如果使用了UFW,需要修改/etc/default/ufw文件中的配置并重新加载:
DEFAULT_FORWARD_POLICY="ACCEPT"(默认是DROP)
$ sudo ufw reload

docker服务器启动

redhat/centos 6.X中:
$ sudo service docker start
redhat/centos 7.X中:
$ sudo systemctl start docker

4、docker怎么玩

启动docker服务器:docker daemon

要想创建运行容器,首先要运行docker守护进程,docker daemon命令在1.16版本开始被dockerd命令代替。以下是一些启动docker守护进程时的可选参数:

$ dockerd --help

Usage:  dockerd COMMAND

A self-sufficient runtime for containers.

Options:
  -b, --bridge string            [指定守护进程使用的网桥接口,默认是docker0] Attach containers to a network bridge
  -D, --debug                    [启用调试模式] Enable debug mode
  -g, --graph string             [设置守护进程运行时根目录] Root of the Docker runtime (default "/var/lib/docker")
  -G, --group string             [设置unix socket的属组] Group for the unix socket (default "docker")
  -H, --host list                [指定守护进程的通信接口,可以是一个unix socket、IP、域名] Daemon socket(s) to connect to (default [])
  -l, --log-level string         [设置日志等级] Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
  -p, --pidfile string           [指定守护进程PID文件地址] Path to use for daemon PID file (default "/var/run/docker.pid")
  -s, --storage-driver string    [设置存储驱动] Storage driver to use
  -v, --version                  [查看docker版本] Print version information and quit

创建并运行一个容器

docker守护进程也启动好了,不管别的,先运行一个容器尝尝:
docker run -i -t ubunt /bin/bash
稍等片刻,我们会发现shell发生了变化:

第一个容器 我们登陆到了ID为ed7751d079c3的容器中,一个基于官方ubuntu镜像的容器已经摆在面前。可以像操作一个ubuntu虚拟机那样折腾这个容器了。

那么这个命令运行过程中发生了什么?

docker命令

docker从1.13开始对现有的40多个顶级命令进行组织整理,形成一组管理命令,让用户使用和理解命令更方便更容易。
现有管理命令如下:

  container   Manage containers(容器管理)
  image       Manage images(镜像管理)
  network     Manage networks(docker内部网络管理)
  node        Manage Swarm nodes(swarm节点管理)
  plugin      Manage plugins(插件管理)
  secret      Manage Docker secrets(密钥管理)
  service     Manage services(docker 服务管理,负责
  让运行在docker中的应用保持一个理想可用的状态。此处理解不到位,待深入)
  stack       Manage Docker stacks(docker捆绑包管理,即docker compose创建的一组容器。此处理解不到位,待深入)
  swarm       Manage Swarm(Swarm集群管理)
  system      Manage Docker(docker服务器管理)
  volume      Manage volumes(卷管理)

管理命令展开

1.容器命令:docker container

该命令包括与docker容器相关的操作
docker container attach|commit|cp|create|diff|exec|export|inspect|kill|logs|ls| pause|port|prune|rename|restart|rm|run|start|stats|stop|top|unpause|update|wait
常用子命令如下:

  ls          列出容器
  logs        获取容器日志
  inspect     显示容器详细信息
  diff        显示容器变化(A-add 新增,C-change 改变,D-delete 删除)
  stats       实时显示容器的物理资源资源占用情况
  top         显示容器中正在运行的进程
  port        列出容器与宿主机所有端口映射
  exec        在一个正在运行的容器中执行一条命令
  attach      连接至容器的stdout、stdin、stderr
  cp          在容器用宿主机之间复制文件
  create      从镜像创建一个新容器
  run         新建一个容器并执行一条命令
  rm          删除容器
  prune       删除所有停止容器
  rename      重命名一个容器
  start       启动容器
  stop        停止容器(发送SIGTERM后再发送SIGKILL)
  restart     重启容器
  kill        强行停止容器(直接发送SIGKILL)
  pause       使用cgroup的freezer顺序挂起/解挂容器中所有进程
  unpause     解除容器挂起
  update      更新容器自身的配置参数(如容器CPU、内存的分配参数等)
  commit      将容器的变化创建为一个新的镜像(就是把在容器内执行的一些命令写到一个新的镜像层商)
  export      将容器导出为镜像,生成一个tar包(export导出的镜像会丢失镜像层结构,无法回滚)
  wait        阻塞指定容器直到容器停止,并返回退出码

2、镜像命令:docker image

该命令包括与docker镜像相关的操作
docker image build|history|import|inspect|load|ls|prune|pull|push|rm|save|tag
常用子命令如下:

  build       从Dockerfile创建一个镜像
  history     显示一个镜像的创建历史
  inspect     显示镜像详细信息
  ls          列出本地镜像
  prune       删除所有没有使用的镜像
  pull        从仓库拉去一个镜像(默认是从docker hub)
  push        向仓库上传一个镜像(默认是从docker hub)
  rm          删除一个镜像
  save        将镜像导出,如果不指定文件,将直接输出至STDOUT
  load        对应docker image save,将save导出的tar包导入成镜像,或者从STDIN直接输入
  import      对应docker container export,将export导出的tar包导入成镜像
  tag         为镜像添加TAG,便于镜像管理

补充一个命令:
docker search [OPTIONS] TERM
该命令用于搜索仓库中的镜像(默认还是在docker hub中搜索)。

3、docker服务器命令:docker system

该命令包括整个docker的一些相关操作
docker system df|events|info|prune
常用子命令有:

  df          显示本机docker占用的硬盘空间,包括镜像、容器还有卷
  events      实时显示docker服务器的事件
  info        显示整个docker服务器信息,比如容器数量,镜像数量等等等等
  prune       删除所有没有使用的数据,比如停止的容器,没用到的镜像等待

4、还有一些顶级命令。。。。

这个我也不知道是啥的东西已经被我写成一个纯粹的命令堆叠了。。。无所谓了。。。。当成是个命令查询手册吧。。。
docker login|logout|search
这三个命令没有对应的管理命令子命令,其实就是docker仓库的登陆、注销、查询(默认当然还是对docker hub的),其他的顶级命令都有对应的管理命令子命令。

剩下的管理命令子命令诸如volume、network、stack、service之类的怎么不介绍?看多了你也吐,写多了我也恶心。当然最重要的是我还没研究明白。以上这些对于docker最基本使用已经足够了,可以折腾一会了。

下一期,我写一下docker的一些简单的使用场景,以及怎么写dockerfile然后创建镜像并运行容器。

上一篇下一篇

猜你喜欢

热点阅读