Docker 笔记 1:Docker 基础与搭建第一个 Docker 应用栈

摘自《Docker 容器与容器云(第2版)》
点击查看我的博客原文

《Docker 容器与容器云(第2版)》

1. 从容器到容器云

1.1 云计算平台

经典云计算架构包括 IaaS(Infrastructure as a Service,基础设施即服务)、PaaS(Platform as a Service,平台即服务)、SaaS(Software as a Service,软件即服务)三层服务,如下图所示。

云平台经典架构

1.2 容器技术生态系统

容器技术生态系统

可以看出,容器技术生态系统自上而下分别覆盖了 IaaS 层PaaS 层所涉及的各类问题,包括资源调度、编排、部署、监控、配置管理、存储网络管理、安全、容器化应用支撑平台等。容器技术主要带来了以下几点好处:

  • 持续部署与测试:容器消除了线上线下的环境差异,保证了应用生命周期的环境一致性标准化
  • 跨云平台支持:越来越多的云平台都已支持容器,用户无需担心受到云平台的捆绑。
  • 环境标准化和版本控制:可使用 Git 等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比以前的虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
  • 高资源利用率与隔离:容器没有管理程序的额外开销,与底层共享操作系统,性能更优,负载更低。同时,容器拥有不错的资源隔离与限制能力,可以精确的对应用分配 CPU、内存等资源,保证应用之间不会相互影响。
  • 容器跨平台性与镜像:容器在原有 Linux 容器的基础上进行大胆革新,为容器设定了一整套标准化的配置方法,将应用及其依赖的运行环境打包成镜像,大大提高了容器的跨平台性
  • 易于理解且易用Docker 的英文原意是处理集装箱的码头工人,标志是鲸鱼运送一大堆集装箱,集装箱就是容器。容器的易用性加速了容器标准化的步伐。
  • 应用镜像仓库:Docker 官方构建了一个镜像仓库,已经累积了成千上万的镜像,所有人都可以自由的下载微服务组件,为开发者提供了巨大便利。

1.3 从容器到容器云

容器云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台。

  • 当容器云专注于资源共享与隔离、容器编排与部署时,它更接近传统的 IaaS
  • 当容器云渗透到应用支撑与运行时环境时,它更接近传统的 PaaS

容器云并不仅限于 Docker,基于 rkt 容器的 CoreOS 项目也是容器云。Docker 最初发布时只是一个单机下的容器管理工具,随后 Docker 公司发布了 Compose、Machine、Swarm编排部署工具,并收购了 Socketplane 解决集群化后的网络问题

除了 Docker 公司之外,业界许多云计算厂商也对基于 Docker 的容器云做了巨大的投入。例如 Fleet、Flynn、Deis 以及目前成为事实主流标准的 Kubernetes,都是基于 Docker 技术构建的广为人知的容器云。

2. Docker 基础

2.1 Docker 的安装

安装 Docker基本要求如下:

  • 只支持 64 位 CPU 架构的计算机,目前不支持 32 位 CPU
  • 建议系统的 Linux 内核版本3.10及以上
  • Linux 内核需开启 cgroupsnamespace 功能

安装过程可参考 CentOS 7 安装 Docker CE

2.2 Docker 操作参数解读

docker命令的执行一般都需要 root 权限,因为 Docker 的命令行工具dockerDocker daemon 是同一个二进制文件,而 Docker daemon 负责接收并执行来自docker的命令,它的运行需要 root 权限。同时,从 Docker 0.5.2 版本开始,Docker daemon 默认绑定一个 UNIX Socket 来代替原有的 TCP 端口,该 UNIX Socket 默认是属于 root 用户的。

用户在使用 Docker 时,需要使用 Docker 命令行工具dockerDocker daemon 建立通信。Docker daemon 是 Docker 守护进程,负责接收并分发执行 Docker 命令。可以使用dockerdocker help命令获取docker的命令清单:

> docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  config      Manage Docker configs
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

例如可以使用docker start --help命令来获取子命令start的详细信息:

> docker start --help

Usage:  docker start [OPTIONS] CONTAINER [CONTAINER...]

Start one or more stopped containers

Options:
  -a, --attach               Attach STDOUT/STDERR and forward signals
      --detach-keys string   Override the key sequence for detaching a container
  -i, --interactive          Attach container's STDIN

推荐阅读:

  1. docker专题(2):docker常用管理命令(上)| Sean’s Notes
  2. docker专题(2):docker常用管理命令(下)| Sean’s Notes

根据命令的用途,可将 Docker 子命令进行如下分类

Docker 子命令分类

docker命令的使用出发,可以梳理出如下的命令结构图

Docker 命令结构图

下面选择每个功能分类中常用的子命令进行用法和操作参数的解读。

1. Docker 环境信息

docker info命令用于检查 Docker 是否正确安装。如果 Docker 正确安装,该命令会输出 Docker 的配置信息

> docker info
Containers: 33
 Running: 20
 Paused: 0
 Stopped: 13
Images: 23
Server Version: 18.06.1-ce
Storage Driver: overlay2
...
Kernel Version: 4.15.0-38-generic
Operating System: Ubuntu 18.04.1 LTS
...

docker info命令一般结合docker version命令使用,两者结合能够提取到足够详细的 Docker 环境信息

> docker version
Client:
 Version:           18.06.1-ce
 API version:       1.38
 Go version:        go1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:24:56 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:23:21 2018
  OS/Arch:          linux/amd64
  Experimental:     false
2. 容器生命周期管理

容器生命周期管理涉及容器启动、停止等功能。

docker run 命令

docker run命令使用方法如下:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker run命令用来基于特定的镜像创建一个容器,并依据选项来控制该容器:

> docker run ubuntu echo "Hello Docker"
Hello Docker

该命令从 ubuntu 镜像启动一个容器,并执行echo命令打印 Hello Docker。执行完echo命令后,容器将停止运行docker run命令启动的容器会随机分配一个容器 IDCONTAINER ID,用以标识该容器。

root@ubuntu:~> docker run -i -t --name mytest ubuntu:latest /bin/bash
root@eb9dda25b0fe:/>

上例中,docker run命令启动一个容器,并为它分配一个伪终端执行/bin/bash命令,用户可以在该伪终端与容器进行交互。其中:

  • -i:表示使用交互模式,始终保持输入流开放
  • -t:表示分配一个伪终端,一般两个参数结合时使用-it
  • --name:可以指定启动的容器的名字。若无此选项,Docker 将为容器随机分配一个名字
  • -c:用于给运行在容器中的所有进程分配 CPUshares 值,这是一个相对权重,实际处理速度还与宿主机的 CPU 有关
  • -m:用于限制为容器中所有进程分配的内存总量,以 B、K、M、G 为单位
  • -v:用于挂载一个 volume,可以用多个-v参数同时挂载多个 volume。volume 的格式为[host-dir]:[container-dir]:[rw|ro]
  • -p:用于将容器的端口暴露给宿主机的端口,其常用格式为hostPort:containerPort。这样外部主机就可以通过宿主机暴露的端口来访问容器内的应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值