• Docker:官网文档 Get Started 笔记


    本文是 Docker 官网文档中 Get Started 的阅读笔记。官方文档地址 https://docs.docker.com/get-started/

    1 概览

    根据使用的操作系统安装 docker 服务,我这里用的是 CentOS 7,官方安装文档十分详尽,用 yum 命令即可简单安装成功,然后用 systemctl start docker 启动 docker 服务。

    然后使用 docker run 启动 hello world 容器。

    docker 中两个重要的基础概念:容器 和 镜像。

    容器 container :是一个运行在宿主机中的一个沙盒进程,且此进程和其他进行相互隔离。这种隔离是利用了内核的 namespaces 和 cgroups。通过内核的 namespaces 和 cgroups 进行隔离的技术在 Linux 上很早就有了,但 docker 使这种技术和功能更加易用。

    镜像 image:当容器运行时,它使用的是隔离的文件系统(filesystem),这种自定义的文件系统正是由镜像提供的。镜像中包含了容器运行时所需要的依赖、配置、脚本、二进制文件等等。

    镜像和容器关系类似于 Java 中的类和实例的关系。一个类可以创建多个实例,同样,基于一个镜像,也可以运行多个容器。

    2 简单项目

    官方提供了一个简单的 nodejs 项目,此项目是一个简单的 web 项目,按照传统的部署方式可以先在服务器上安装 nodejs 环境,然后运行项目即可。

    如何通过容器化方式运行呢?

    首先编写 Dockerfile 文件,Dockerfile 是用来描述镜像的构建方式的文件。编写完成后才用 docker build 命令创建镜像,然后用 docker run 命令基于镜像运行容器。

    3 更新项目

    当修改了 web 项目中的源码后,需要重新使用 docker build 创建新的镜像,然后用 docker run 基于新的镜像运行容器。这样服务就更新了。

    4 共享镜像

    当一个镜像构建完成后,如何分发出去?当然是放在中央仓库中。这里可以类比 maven,当用户要添加 jar 包,只需要知道 jar 包的坐标,然后从 maven 中央仓库中下载。

    docker 也是类似的原理,docker 有一个名为 docker hub 的中央仓库,其中包含了各种镜像,用户只需要只要镜像的名称,然后用 docker pull 命令,就可以从中央仓库 docker hub下载镜像。

    推送自己的镜像到 docker hub 步骤如下:

    1. 注册 docker hub 的账号
    2. 在 docker hub 创建一个空的目录,目录名即为镜像名。
    3. 在本地通过 docker login 命令进行登录
    4. 将在本地构建好的镜像通过 docker push 推送到刚才在 docker hub 创建的目录中。

    如果在其他机器上要用刚才的镜像,直接通过 docke pull 命令下载镜像。

    5 容器运行时产生的数据

    容器是允许在宿主机中的沙盒进程,每个容器都有自己的 scratch space(划痕空间?)存储数据,一旦容器停止运行,scratch space 也无法查看了。

    这里引入另一个重要概念:卷。

    卷:volumes 可以在容器的文件系统与宿主机建立联系。当某个目录被容器挂载(mounted)后,此目录下任何变化也可以在宿主机上看到。

     通过 docker volume create 命令创建一个命名卷(named volumes),命名卷是由 docker 服务管理的,会自动挂载宿主机上的目录。

    在启动容器时,加上 -v 参数,就可以保存容器的数据到命名卷中。命令如下:

    docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started

    其中 -v 就是 volume 的首字母,todo-db 是刚创建的命名卷名称,后面 /etc/todos 是容器在 scratch space 中产生数据的目录。

    如何查看命名卷中实际挂载的目录?使用命令 docker volume inspect 命令,返回结果中 Mountpoint 为命名容器挂载的宿主机的目录。

    6 绑定挂载

    绑定挂载是直译,也可以翻译为动态挂载,官方称为 bind mounts。这也是与卷(volume)相关的一种技术。前面说到要保存容器中产生的数据分两步:

    1. 使用 docker volume create 命令创建一个卷
    2. 在启动容器时通过 -v 参数将卷和容器 scratch space 中某个目录建立联系

    这里创建卷称为命令卷(named vloumes),与命名卷相对的另一种技术是就是绑定挂载(bind mounts),二者相同点都是用来保存容器中产生的数据。

    使用命令 docker run -v /home:/app getted-started 可以启动命令,其中 /home 是宿主机中目录,而 /app 是容器中的目录,也就是直接通过  -v 参数就可以将宿主机目录和容器中目录建立联系,任何发生在容器 /app 中的目录都会反应在宿主机 /home 目录中。这样通过 -v 参数将宿主机和容器中目录建立关系的技术就称为绑定挂载。

    7 多个容器之间通信

    容器直接如何进行通信?通过 networking (网络)。这里的 networking 是指 docker 进行网络管理的一种技术。

    networking 使用步骤如下:

    1. 通过 docker network create todo-app 命令创建网络,其中 todo-app 是网络名
    2. 运行一个 mysql 容器,并将其和网络建立联系(attach it to the network),其命令如下 docker run --network todo-app --network-alias mysql mysql:5.7
    3. 然后运行其他容器并和 mysql 容器建立通信,其命令如下 docker run --network todo-app e MYSQL_HOST=mysql node:12-alpine

    如上面步骤所示,网络 todo-app 在 mysql 和 node 两个容器之间建立了通信。

    8 容器编排

    容器编排(docker compose)是一个用来定义和共享多个容器的工具。有些类似 linux 系统中的 sh 脚本,将多个命令放在一个文件中,就成了 sh 脚本。docker compose 也是类似的原理。

    将创建卷和网络、启动容器的命令写在一个 yaml 文件中,然后通过 docker-compose up -d 命令就可以启动定义在 yaml 文件中的所有命令。

    通过 docker-compose down 可以关闭所以启动的容器。

    注意 docker-compose 需要另外安装。

     9 镜像优化

    通过 docker scan 命令可以扫描镜像的安全漏洞。

    镜像是是分层的,通过 docker image history 查询镜像分层情况。

    以上是 docker 官方文档的 get started 章节中 9 块内容阅读笔记。

  • 相关阅读:
    Windows Server 2008 下解析二级域名的方法
    浅谈2D游戏设计模式--游戏剧情设计(1)
    公司做项目的几点经验总结(个人经验)
    ASP.NET 实现站内信功能(点对点发送,管理员群发)
    FusionChart 水印破解方法(代码版)
    如何使用SOIL在VS2012的 C++环境下显示图片
    C语言实现控制台中光标随意移动
    ASP.NET CMS模板培训教程
    如何用easyui+JAVA 实现动态拼凑datagrid表格(续)
    用JAVA实现插值查询的方法(算近似值,区间求法)
  • 原文地址:https://www.cnblogs.com/colin220/p/15769201.html
Copyright © 2020-2023  润新知