docker基础知识

Docker架构

1、什么是docker

是一个平台,是构建、测试、部署和发布容器化应用的平台。Docker 是一个开 源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的 容器中,然后发布到任何流行的linux机器或Windows 机器上,也可以实现虚拟 化,容器是完全使用沙箱机制,相互之间不会有任何接口

2、基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。Docker 镜像是用于创建 Docker 容器的模板

  • 容器(Container):容器是独立运行的一个或一组应用,是镜像运行时的实体

  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

  • docker客户端:Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信

  • docker namespace:docker通过命名空间实现资源容器与容器,与宿主机间的隔离。

  • 网络:docker 提供四种不同的网络模式,Host、Container、None 和 Bridge

    • 默认网络设置Bridge.在这种模式下,除了分配隔离的网络命名空间之外,Docker 还会为所有的容器设置 IP 地址。当 Docker 服务器在主机上启动之后会创建新的虚拟网桥 docker0,随后在该主机上启动的全部服务在默认情况下都与该网桥相连。在默认情况下,每一个容器在创建时都会创建一对虚拟网卡,两个虚拟网卡组成了数据的通道,其中一个会放在创建的容器中,会加入到名为 docker0 网桥中。查看brctl show


      image.png
  • 挂载点

3、docker工作原理

  • docker使软件开发者无需担心配置和依赖性,在任何地方打包,发送和运行他们的应用程序。

  • image.png
  • Cgroups(Control Groups): 实现资源限制

  • 工作原理简单来说就是它的架构形式,client -- dockerhost -- docker daemon - registry

4、docker架构

  • Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器
  • Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信
  • docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
  • image.png

docker与VMware对比

  • image.png
  • VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用;

    Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。

    Docker在宿主机器的操作系统上创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源

docker常用命令

命令 描述 语法 常用选项
docker run 创建一个新的容器并运行一个命令 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用,-t: 为容器重新分配一个伪输入终端;
-P:随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="nginx-lb": 为容器指定一个名称;
更多选项参考:https://www.runoob.com/docker/docker-run-command.html
docker start
/stop
/restart
启动/停止/重启一个容器 docker start/
stop/restart
[OPTIONS] CONTAINER [CONTAINER...]
docker kill 杀掉一个运行中的容器 docker kill [OPTIONS] CONTAINER [CONTAINER...] -s :向容器发送一个信号
docker rm 删除一个或多个容器 docker rm [OPTIONS] CONTAINER [CONTAINER...] -f :通过 SIGKILL 信号强制删除一个运行中的容器。
-v :删除与容器关联的卷
docker pause/uppause 暂停或恢复容器中所有的进程
docker create 创建一个新的容器但不启动它 docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 用法同docker run
docker exec 在运行的容器中执行命令 docker exec [OPTIONS] CONTAINER COMMAND [ARG...] -i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
eg :docker exec -i -t mynginx /bin/bash
docker ps 列出容器 docker ps [OPTIONS] -a :显示所有的容器,包括未运行的。
-q :静默模式,只显示容器编号。
-n :列出最近创建的n个容器。
-l :显示最近创建的容器。
docker inspect 获取容器/镜像的元数据。 docker inspect [OPTIONS] NAME|ID [NAME|ID...]
docker top 查看容器中运行的进程信息,支持 ps 命令参数 docker top [OPTIONS] CONTAINER [ps OPTIONS]
docker attach 连接到正在运行中的容器 docker attach [OPTIONS] CONTAINER
docker events 从服务器获取实时事件 docker events [OPTIONS]
docekr logs 获取容器的日志 docker logs [OPTIONS] CONTAINER -f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
eg: docker logs --since="2016-07-01" --tail=10 mynginx
docker export 将文件系统作为一个tar归档文件导出到STDOUT docker export [OPTIONS] CONTAINER -o :将输入内容写到文件
docker port 列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
docker commit 从容器创建一个新的镜像 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker cp 用于容器与主机之间的数据拷贝 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
-L :保持源目标中的链接
docker diff 检查容器里文件结构的更改
docker login/logout 登陆到一个Docker镜像仓库
docker pull/push/search
docker images 列出本地镜像 docker images [OPTIONS] [REPOSITORY[:TAG]] -a :列出本地所有的镜像
-f :显示满足条件的镜像
-q :只显示镜像ID。
docker rmi 删除本地一个或多少镜像 docker rmi [OPTIONS] IMAGE [IMAGE...] -f :强制删除;
docker tag 标记本地镜像,将其归入某一仓库 ocker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker build 命令用于使用 Dockerfile 创建镜像 docker build [OPTIONS] PATH | URL | - -f :指定要使用的Dockerfile路径
--tag, -t: 镜像的名字及标签
其他限制选项参考:https://www.runoob.com/docker/docker-build-command.html
docker history 查看指定镜像的创建历史
docker save 将指定镜像保存成 tar 归档文件
docker load 导入使用docker save 命令导出的镜像 docker load [OPTIONS] -i : 指定导入的文件
docker import 从归档文件中创建镜像 docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]] -c :应用docker 指令创建镜像;
-m :提交时的说明文字;
docker info 显示 Docker 系统信息,包括镜像和容器数
docker version 显示 Docker 版本信息

Dockerfile

1、什么是dockerfile

  • Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
  • Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。

2、Dockerfile 常用语法

语法 描述
FROM 镜像制作的基镜像,必须为第一个命令
MAINTAINER 维护者信息
RUN 用于在镜像容器中执行命令
ADD 将本地文件添加到容器中,tar类型文件会自动压,可访问网络文件,不能用于多阶段构建中
COPY 将本地文件添加到容器中,但不会自动解压文件,也不能访问网络文件,能用于多阶段构建中mutli-stage
CMD ["","",...] 容器运行时运行的命令
ENV= ... 给容器设置环境变量
EXPOSE 指定于外界交互的端口
VOLUME 用于指定持久化目录
user : 指定运行容器时的用户,组

docker-compos

1、docker-compos是什么

docker compose 是 docker 提供的一个命令行工具,用来定义和运行由多个容器组成的应用,我们可以通过 YAML 文件声明式的定义应用程序的各个服务,并由单个命令完成应用的创建和启动。

#linux安装docker-compos
* curl -L https://github.com/docker/compose/releases/download/1.20.0/docker-compose-`uname -s`-`uname -m` -o  /usr/local/bin/docker-compose
* chmod +x /usr/local/bin/docker-compose

2、docker-compose与k8s, swarm容器编排工具

swarm
  swarm 是Docker公司自行研发的一款用来管理多主机上的Docker容器的工具,可以负责启动容器,监控容器状态,也   提供服务之间的负载均衡。
  特点: 更快速的运行速度  快速简单的配置 容器间低耦合  版本控制与组件重用
  缺点: 跨平台支持效果差  不提供存储选项 监控信息不足
  
#kubernetes
  kubernetes Google 开元容器编排引擎,支持自动化部署,大规模可伸缩,应用容器化管理,能做到零停机的情况下进行更新。
  优点:运行速度快  遵循不可变基础架构的原则(利于回滚)  提供声明式配置 大规模部署和更新软件 处理应用程序的可用性   提供存储卷管理
  缺点: 进程初始化时间较长 迁移到无状态需要很多工作 
  
#docker-compose
  基于Docker的单主机容器编排工具。

3、docker-compose语法

(1)语法格式: yaml 文件

​ 使用compose 3个步骤

  • 使用Dockerfile 定义应用程序环境,以便在任何地方重现该环境
  • 在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离环境中一起运行
  • 运行docker-compose up命令,启动运行整个应用程序。

(2)docker-compose.yml结构:services、networks、volumes

  • services主要用来定义各个容器

    version: '3'
    services:         #services模块
      euraka:         #指明服务名称
        build: .      #指明Dockerfile所在路径
        ports:            #指明映射的端口
         - "8761:8761"
    

    services模块下其他命令,与build同级

    • command:覆盖容器启动后默认执行的命令(Dockerfile定义的CMD)。
    • dns
    • dns_search
    • environment:环境变量设置,可使用属组或字典两种方式。定义的变量会覆盖.env文件中定义的重名环境变量
    • entrypoint:可以覆盖Dockerfile中定义的entrypoint命令
    • env_file:从文件中获取环境变量,可指定一个文件或多个文件路径列表。
    • expose:暴露端口,只将端口暴露给连接的服务器。而不是暴露给宿主机
    • external_links:连接到docker-compose.yml外部的容器
    • iamges:指定运行容器使用的镜像
    • links:连接到其他服务的容器 SERVICES:ALIAS
  • networks定义需要使用到的network ,与services平级

    • 默认情况下,compose为应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,该容器还能以服务名称作为hostname被其他容器访问。
    • networks模块自定义网络
    • 详细可参考《spring cloud 与docker》一书 p286-p289
  • volumes定义services使用到的volume,与services平级

    volumes:卷挂载路径设置(HOST:CONTAINER 或HOST:CONTAINER:ro)

docker 与微服务 --待学习整理

1、什么叫微服务

...

你可能感兴趣的:(docker基础知识)