美文网首页
Docker入门笔记

Docker入门笔记

作者: 憩在河岸上的鱼丶 | 来源:发表于2019-10-12 16:38 被阅读0次

    Docker入门

    Docker的目标 - 一次构建,处处运行

    Docker
    1. 提供简单轻量的建模方式,项目docker化非常简单,性能优秀,一台宿主机中可运行更多的容器
    2. 职责的逻辑分离,保证开发环境与生产环境一致性,开发人员只关心应用程序,运维人员只关心如何管理容器
    3. 快速高效的开发生命周期,缩短代码开发、测试、部署的周期,使用相同的环境,避免环境带来的额外开销
    4. 使用面向服务的架构,单个容器只运行一个程序,应用程序或服务都可以表示为一系列内部互联的容器,从而使分布式部署、扩展、调试更容易,高内聚,避免不同服务间的互相影响,方便定位问题

    Docker使用场景

    1. 使用Docker容器开发、测试、部署服务

    2. 创建隔离的运行环境

    3. 搭建测试环境

    4. 构建 平台即服务PaaS基础设施

    5. 提供软件即服务SaaS应用程序

    6. 高性能、超大规模宿主机部署

    Docker的五要素

    Docker Image镜像

    • 容器的基石,容器基于镜像启动和运行,镜像-类,容器-对象
    • 层叠的只读文件系统
    • 联合加载(union mount)
    • Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

    Docker Container 容器

    • Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。

    • 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

    • 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    • 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

    Docker Repository 仓库

    是集中存放镜像文件的场所。
    仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

    Docker Registry 注册服务器

    类似于Maven的中央仓库,包含所有官方镜像

    Docker 组成

    Docker运行原理

    Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

    为什么Docker比VM快?

    1. docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

    2. docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。故避免了引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

    Docker的安装

    Docker安装-菜鸟教程

    docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

    runoob@runoob:~# docker
    

    可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

    例如我们要查看 docker stats 指令的具体使用方法:

    runoob@runoob:~# docker stats --help
    

    配置阿里云镜像仓库加速服务

    容器的基本操作

    启动容器

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

      run 在新容器中执行命令,IMAGE表示启动容器所使用的操作系统镜像,COMMAND表示容器启动后使用的命令,ARG表示参数

      docker run ubuntu echo "hi tracer"表示使用最近的ubuntu 系统启动容器,执行echo命令,参数为“hi tracer”。等价于在ubuntu 系统的命令行中输入echo "hi tracer"

      C:\Users\mao>docker run ubuntu:15.10 echo "hi tracer"
      hi tracer
      
      • docker: Docker 的二进制执行文件。
      • run:与前面的 docker 组合来运行一个容器。
      • ubuntu:指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
      • /bin/echo "Hello world": 在启动的容器里执行的命令

    启动交互式容器

    • $ docker run -i -t IMAGE /bin/bash

      -i --interactive==true|false 默认是false,启动交互式容器,允许你对容器内的标准输入 (STDIN) 进行交互。

      -t --tty==true|false 默认是false 在新容器内指定一个伪终端或终端。
      -p 8090:8080 映射端口,前者为主机端口,后者为Docker容器端口

    docker run -d -p 8090:8080 tomcat 启动tomcat容器,访问主机 8090 端口即可

    docker run -i -t ubuntu /bin/bash 启动ubuntu 系统的命令行窗口

    查看容器

    • $ docker ps 查看正在运行的docker容器 -a表示显示所有容器

      C:\Users\mao>docker ps
      CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
      11511ff96b4e        ubuntu:15.10        "/bin/sh -c 'while t…"   14 seconds ago      Up 13 seconds                           con1
      
    • $ docker inspect [CONTAINER-ID|NAME] 查看容器详细信息,参数是容器ID或NAME

      重启容器

    • docker start -i [CONTAINER-ID|NAME] 启动已经停止的容器,参数是容器ID或NAME

      删除停止的容器

    • $docker rm [CONTAINER-ID|NAME] 删除已经停止的容器,参数是容器ID或NAME,无法删除运行中的容器

    守护式容器

    什么是守护式(后台)容器:

    • 能够长期运行
    • 没有交互式会话
    • 适合运行应用程序和服务

    启动守护式容器:

    • $ docker run -i -t ubuntu /bin/bash
    • Ctrl+Q+P 退出不使用exit,就能使容器后台运行
    • $ docker run -d IMAGE [COMMAND] [ARG...] 直接启动守护式容器,-d 表示以守护式启动容器

      docker run --name con1 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done;" 启动名称为con1 的ubuntu 镜像,执行shell脚本,内容为死循环输出helloworld,模拟脚本后台一直运行。

    进入守护式容器

    • $ docker attach [CONTAINER-ID|NAME] 进入守护式容器

      C:\Users\mao>docker attach 86dae4c6b492
      root@86dae4c6b492:/# exit
      

    查看容器日志

    • $ docker logs -f -t --tail n 容器ID/NAME

      -f --follows 跟踪log的变化并返回

      -t --timestamp 日志加上时间戳

      --tail n 返回n行日志,默认为all

    docker logs -ft --tail 10 11511ff96b4e 查看容器11511ff96b4e的最新的10行日志

    C:\Users\mao>docker logs -ft --tail 10 11511ff96b4e
    2019-09-04T15:22:55.638537200Z hello world
    2019-09-04T15:22:56.639011600Z hello world
    2019-09-04T15:22:57.639758900Z hello world
    

    查看容器内进程

    • $ docker top 容器ID/NAME

      C:\Users\mao>docker top 11511ff96b4e
      PID                 USER                TIME                COMMAND
      3288                root                0:00                /bin/sh -c while tru...
      3593                root                0:00                sleep 1
      

    在运行容器内启动新进程

    • $ docker exec -d -i -t 容器名 [COMMAND] [ARG...]
      进入容器的命令行,即可使用docker exec命令,如 rabbitMQ 容器也是依赖 linux,也可以使用该命令进入交互式命令行
      // 在运行容器11511ff96b4e中启动bash进程
      C:\Users\mao>docker exec -i -t  11511ff96b4e /bin/bash
      root@11511ff96b4e:/#
      // Ctrl+Q退出
      C:\Users\mao>docker top 11511ff96b4e
      PID                 USER                TIME                COMMAND
      3288                root                0:00                /bin/sh -c while t...
      4545                root                0:00                sleep 1
      4450                root                0:00                /bin/bash // 新启动的进程
      

    停止守护式容器

    • $ docker stop 容器名,发送一个信号给容器,等待容器停止
    • $ docker kill 容器名,直接停止容器

    镜像

    什么是镜像?

    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

    查看镜像

    • $ docker images [OPTIONS] [REPOSITORY]

      -a --all=false 显示所有镜像

      -f --filter=[]

      -q --quiet=false

    // 查看所有仓库镜像
    C:\Users\mao>docker images
      仓库名            标签名                镜像截断ID          创建时间                大小
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              latest              a2a15febcdf3        3 weeks ago         64.2MB
    hello-world         latest              fce289e99eb9        8 months ago        1.84kB
    ubuntu              15.10               9b9cb95443b5        3 years ago         137MB
    // 查看指定仓库ubuntu镜像
    C:\Users\mao>docker images ubuntu
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu              latest              a2a15febcdf3        3 weeks ago         64.2MB
    ubuntu              15.10               9b9cb95443b5        3 years ago         137MB
    
    • REPOSITORY 仓库,一系列类似镜像(IMAGES)的集合,比如ubuntu仓库,包含了很多版本的ubuntu镜像
    • REGISTRY 注册表,Docker镜像的存储服务
    • TAG 仓库名+标签名唯一指定一个镜像,如ubuntu:15.10。不指定标签默认使用latest

    删除镜像

    • $ docker rmi [OPTIONS] IMAGE [IMAGE...] 删除指定的镜像,尽量使用镜像ID删除,而非仓库名+标签,因为同一个镜像ID会有多个文件

    查找镜像

    • Docker Hub https://hub.docker.com DockerHub官方仓库查找镜像

    • $ docker search [OPTIONS] TERM 使用命令行查找镜像

      --automated=false 是否为自动构建的

      -s --stars=0 用来限制显示结果的星级

    拉取镜像

    • $ docker pull 镜像名

      docker pull ubuntu:14.04 拉取ubuntu:14.04镜像

    构建镜像

    构建镜像有以下作用

    • 保存对容器的修改,方便下次使用
    • 自定义镜像的能力
    • 以软件的形式打包并分发服务及其运行环境
    • $ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 通过容器构建镜像

    ​ -a --author 添加作者信息

    ​ -m --messgae 添加镜像信息

    • $ docker build 通过Dockerfile文件构建镜像

    推送镜像

    将自己构建的镜像上传到仓库

    • $ docker push

    问题

    1. docker直接利用宿主机操作系统的内核,那为什么windows上安装的docker可以启动 ubuntu容器?

    答:docker-win其实是安装在虚拟机中的,而虚拟机使用的linux内核。win7 win8操作系统中 docker安装在Oracle virtualBox虚拟机中,win10 docker装在Hyper-V生成的虚拟机中。

    1. 为什么Docker容器比虚拟机(VM)快那么多?

    答:docker有着比虚拟机更少的抽象层。由亍docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

    ​ docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。故避免了引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

    总计

    1. 该篇笔记结构不清晰,不完整,后面需要根据《尚硅谷_Docker核心技术》继续完善修改,补充Docker 底层原理,容器数据卷,DockerFile,安装Mysql软件映射端口,

    2. 做笔记还是尽量做原理性,概念性的笔记,多记自己的理解,把原理搞清楚,抓住最主要的。这类知识特点是难懂,需要自己去理解体会,重难点,同样是考点。

    3. 操作型笔记还是少记,具体使用时可以上网查(如菜鸟教程),这类知识特点是上手快,容易忘,需要勤加练习,记笔记意义不大。

    4. 编程和高中文化课一样,以为自己听懂了,做题时(上手编程)才发现没学会,所以一定要多做练习(多敲代码),才能查缺补漏,深入理解;做笔记,要记重难点(原理)、考点(面试点),笔记是自己复习用,不是查询手册,所以要精简。

    5. 记了笔记一定要利用起来,勤加复习,不要想着一劳永逸,温故而知新,对于笔记也要完善补充

    参考文档

    1. 尚硅谷_Docker核心技术 结构清晰,通俗易懂,深入浅出
    2. Docker核心技术笔记 - nbutluo
    3. 容器与镜像辨析
    4. docker思维导图 提纲挈领,结构清晰,复习巩固良药
    5. Docker教程 - 菜鸟教程 简洁明了,可当做操作手册使用

    相关文章

      网友评论

          本文标题:Docker入门笔记

          本文链接:https://www.haomeiwen.com/subject/uhxiyctx.html