Docker学习

Posted Wss0130

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker学习相关的知识,希望对你有一定的参考价值。

Docker

简介

  • Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源。
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
  • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

命令

info|version
info
version

常见问题

  1. Docker与LXC(Linux Container)有何不同?
    LXC利用Linux上相关技术实现容器,Docker则在如下的几个方面进行了改进:
  • 移植性:通过抽象容器配置,容器可以实现一个平台移植到另一个平台;
  • 镜像系统:基于AUFS的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储;
  • 版本管理:类似于GIT的版本管理理念,用户可以更方面的创建、管理镜像文件; 仓库系统:仓库系统大大降低了镜像的分发和管理的成本;
  • 周边工具:各种现有的工具(配置管理、云平台)对Docker的支持,以及基于Docker的Pass、CI等系统,让Docker的应用更加方便和多样化。
  1. Docker与Vagrant有何不同?
    两者的定位完全不同:
  • Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境,Vagrant可以在多种系统上和虚拟机软件中运行,可以在Windows。Mac等非Linux平台上为Docker支持,自身具有较好的包装性和移植性。
  • 原生Docker自身只能运行在Linux平台上,但启动和运行的性能都比虚拟机要快,往往更适合快速开发和部署应用的场景。
  1. 开发环境中Docker与Vagrant该如何选择?
    Docker不是虚拟机,而是进程隔离,对于资源的消耗很少,单一开发环境下Vagrant是虚拟机上的封装,虚拟机本身会消耗资源。

容器

命令

  1. 容器生命周期管理
    run
    start/stop/restart
    kill
    rm
    pause/unpause
    create
    exec

  2. 容器操作
    ps
    inspect
    top
    attach
    events
    logs
    wait
    export
    port

  3. 容器rootfs命令
    commit
    cp
    diff

常见问题

  1. 容器退出后,通过docker ps 命令查看不到,数据会丢失么?
    容器退出后会处于终止(exited)状态,此时可以通过 docker ps -a 查看,其中数据不会丢失,还可以通过docker start 来启动,只有删除容器才会清除数据。
  2. 如何停止所有正在运行的容器?
    使用docker kill $(sudo docker ps -q)
  3. 如何清理批量后台停止的容器?
    使用docker rm $(sudo docker ps -a -q)
  4. 如何临时退出一个正在交互的容器的终端,而不终止它?
    按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。
  5. 很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?
    使用docker logs,后面跟容器的名称或者ID信息
  6. 使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思?
    创建镜像时Dockerfile要指定正确的EXPOSE的端口,容器启动时指定PublishAllport=true
  7. 可以在一个容器中同时运行多个应用进程吗?
    一般不推荐在同一个容器内运行多个应用进程,如果有类似需求,可以通过额外的进程管理机制,比如supervisord来管理所运行的进程
  8. 如何控制容器占用系统资源(CPU,内存)的份额?
    在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|–cpu-shares[=0]参数来调整同期使用CPU的权重,使用-m|–memory参数来调整容器使用内存的大小。

镜像

命令

本地镜像管理
images
rmi
tag
build
history
save
load
import

常见问题

  1. 如何批量清理临时镜像文件?
    可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令
  2. 如何查看镜像支持的环境变量?
    使用sudo docker run IMAGE env
  3. 本地的镜像文件都存放在哪里
    于Docker相关的本地资源存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。
  4. 构建Docker镜像应该遵循哪些原则?
    整体远侧上,尽量保持镜像功能的明确和内容的精简,要点包括:
    • 尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小
    • 清理编译生成文件、安装包的缓存等临时文件
    • 安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖
    • 从安全的角度考虑,应用尽量使用系统的库和依赖
    • 使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录

容器连接

  1. 网络端口映射
  2. 容器互联
  3. 配置DNS
    详见:https://www.runoob.com/docker/docker-container-connection.html

仓库管理

镜像仓库
login
pull
push
search

Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

定制镜像命令

FROM
RUN
COPY
ADD
CMD
ENTRYPOINT
ENV
ARG
VOLUME
EXPOSE
WORKDIR
USER
HEALTHCHECK
ONBUILD

Compose

使用步骤

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

示例

version: '2'
services:
	matrix:
    	build: ./matrix
    	volumes:
        	- ~/ke-code-os:/data0/www/htdocs-os:cached
        	- ~/applogs:/data0/www/applogs
        	- ~/logs:/data0/www/logs
        	- ./matrix/php-fpm.conf:/usr/local/matrix/etc/php-fpm.conf
       		- ./matrix/php.ini:/usr/local/matrix/lib/php.ini
       	 	- ./matrix/tengine.conf:/usr/local/matrix/etc/tengine.conf
        	- ./matrix/virtualhost:/usr/local/matrix/etc/virtualhost
        	- ./matrix/fpm.d:/usr/local/matrix/etc/fpm.d
    	ports:
        	- "80:80"

yml配置常用命令

  • version
    指定本 yml 依从的 compose 哪个版本制定的。
  • build
    指定为构建镜像上下文路径
  • volumes
    将主机的数据卷或着文件挂载到容器里。(本机文件:容器文件)
  • ports
    本机与docker容器的端口映射(本机端口:容器端口)

Machine

简介

  • Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。
  • Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker。
  • Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean。
  • 使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker 客户端和守护程序,以及配置 Docker 客户端与您的主机进行通信。

命令

  • active:查看当前激活状态的 Docker 主机。
  • config:查看当前激活状态 Docker 主机的连接信息。
  • creat:创建 Docker 主机
  • env:显示连接到某个主机需要的环境变量
  • inspect: 以 json 格式输出指定Docker的详细信息
  • ip: 获取指定 Docker 主机的地址
  • kill: 直接杀死指定的 Docker 主机
  • ls: 列出所有的管理主机
  • provision: 重新配置指定主机
  • regenerate-certs: 为某个主机重新生成 TLS 信息
  • restart: 重启指定的主机
  • rm: 删除某台 Docker 主机,对应的虚拟机也会被删除
  • ssh: 通过 SSH 连接到主机上,执行命令
  • scp: 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
  • mount: 使用 SSHFS 从计算机装载或卸载目录
  • start: 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
  • status: 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
  • stop: 停止一个指定的 Docker 主机
  • upgrade: 将一个指定主机的 Docker 版本更新为最新
  • url: 获取指定 Docker 主机的监听 URL
  • version: 显示 Docker Machine 的版本或者主机 Docker 版本
  • help: 显示帮助信息

Swarm集群管理

简介

Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。

原理

如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。

  • swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
  • work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)。

    参考:https://www.runoob.com/docker/docker-tutorial.html

以上是关于Docker学习的主要内容,如果未能解决你的问题,请参考以下文章

云原生|Docker系列7Docker Machine 使用详解

测试必会 Docker 实战:掌握高频命令,夯实内功基础

使用docker创建静态网站应用-多种方式

多种方法创建docker registry

结合Docker运行Spring Cloud微服务的多种方式

14Docker监控方案(Prometheus+cAdvisor+Grafana)