介绍

到目前为止,我一直在大气中使用 Docker,所以我大致总结了从概念和机制到命令和工具的所有内容。

什么是 Docker

用于构建、共享和运行容器类型虚拟环境的事实上的 OSS。
容器是封装应用程序代码及其依赖项的数据结构和机制的总称。

硬件虚拟化和容器化虚拟化

Docker 的先验知识包括虚拟化技术。典型的虚拟化技术包括硬件虚拟化和容器虚拟化。
在硬件虚拟化中,宿主机通过一个hypervisor被分割成多个虚拟机(VM),整个服务器包括操作系统、CPU、内存都被虚拟化,开销很大。相比之下,容器类型的虚拟化通过控制内核命名空间和 cgroup 来分离进程,并且只虚拟化应用程序、它们的库和依赖项,需要较少的机器资源。
Docker 是后者的容器化虚拟化。
Dockerとその周辺知識をざっくり説明

使用 Docker 的优势

使用 Docker 的优点是:

  • 可以在任何环境中运行,无论主机如何
  • 可以在代码中管理容器配置和应用程序部署定义
  • 服务器资源的效率

码头工人架构

Docker 使用客户端-服务器架构。 Docker 客户端向 Docker 守护进程请求工作,而 Docker 守护进程运行、构建和分发容器。整体图像如下图所示。
Dockerとその周辺知識をざっくり説明

下面是典型术语的解释。

  • Docker 守护进程
    创建和管理 Docker 对象,例如图像和容器。
  • Docker 客户端
    用户用来与 Docker 通信的 CLI。
  • Docker 镜像
    一组文件系统和应用程序设置,一个容器创建模板,一个面向对象术语的类。
  • Docker 注册表
    存储 Docker 映像的注册表。 Docker 集线器或 AWS ECR。
    注册表中有一个称为存储库的层次结构,用于管理映像的每个版本。
  • Docker 容器
    从图像创建的实体。面向对象的实例。它可以运行、启动、停止、移动和删除。每个容器都是独立的,互不干扰。至于容器的粒度,一容器一进程似乎是个好主意,但并不是绝对的要求,因为当批处理调度器和作业分开时,它变得复杂了。每个容器一张感兴趣的图像。
  • Docker 桌面(Docker for Mac 等)
    Docker daemon、Docker 客户端、Docker Compose 等可以一起安装。

Dockerfile

这是一个用于管理使用 Docker 创建的容器镜像的文件,描述了 Docker 镜像的创建过程和配置信息。
下面是一个 Dockerfile,它构建了一个基于节点的应用程序,放置在主机的前端目录中。

# ベースイメージの指定(デフォルトはDocker Hubから取得)
FROM node:14.18
# ホストマシン上のファイルやディレクトリをコンテナ内にコピー
CMD ./frontend /usr/src/app
# ワークディレクトリを設定
WORKDIR /usr/src/app
# イメージビルド時にrm package-lock.jsonとyarn installを実行
RUN rm package-lock.json && yarn install
# イメージビルド時にyarn buildを実行
RUN yarn build
# コンテナ実行時にyarn starを実行
CMD ["yarn", "start"]

下面,类似的描述如 COPY 和 ADD、RUN 和 CMD 等。

  • 复制和添加之间的区别
    ADD有远程文件添加功能和压缩文件解压功能,基本上COPY命令经常使用。
  • RUN 和 CMD 之间的区别
    RUN是构建镜像时要在Docker容器中执行的命令,用于更新和部署应用程序。 CMD 用于运行应用程序本身,例如在容器运行时使用要在容器中执行的命令启动服务器。

码头工人命令

以下是使用 Docker 的一些常用命令。
自 Docker v1.13 于 2017 年 1 月 18 日发布(v17.03.0-ce 截至今日)以来,命令行命令系统进行了重组,但目前旧命令有效,并且命令由于简短易用,还描述了旧命令。

  • 构建 Docker 映像
docker build -t イメージ名[:タグ名] Dockerfile配置のディレクトリパス

* 一旦获取,图像被缓存在主机中。 --pull=true 强制重新获取。

  • 获取图像
docker image pull [options] リポジトリ名[:タグ名]
// 旧コマンド
docker pull [options] リポジトリ名[:タグ名]
  • 图像列表
docker image ls [options] リポジトリ名[:タグ名]
// 旧コマンド
docker images [options] リポジトリ名[:タグ名]
  • 发布图片
docker image push [options] リポジトリ名[:タグ名]
// 旧コマンド
docker push [options] リポジトリ名[:タグ名]
  • 创建和运行容器
docker container run [options] イメージ名[:タグ名] [コマンド] [コマンドの引数]
docker container run [options] イメージID[:タグ名] [コマンド] [コマンドの引数]
// 旧コマンド
docker run [options] イメージ名[:タグ名] [コマンド] [コマンドの引数]
docker run [options] イメージID[:タグ名] [コマンド] [コマンドの引数]

// ex
docker container run -d -p 9000:8000 example:latest
  • 在运行容器中运行命令
docker container exec [options] コンテナIDまたはコンテナ名 コンテナ内で実行するコマンド
// 旧コマンド
docker exec [options] コンテナIDまたはコンテナ名 コンテナ内で実行するコマンド
  • 列出容器
docker container ls [options]
// 旧コマンド
docker ps [options]
  • 停止容器
docker container stop コンテナIDまたはコンテナ名
// 旧コマンド
docker stop コンテナIDまたはコンテナ名
  • 销毁容器
docker container rm コンテナIDまたはコンテナ名
// 旧コマンド
docker rm コンテナIDまたはコンテナ名
  • 容器日志记录
docker container logs [options] コンテナIDまたはコンテナ名
// 旧コマンド
docker logs [options] コンテナIDまたはコンテナ名

如果添加 -f 选项,您将继续获得标准输出。

  • 删除未使用的 docker 资源(容器、图像、卷、网络)
docker system prune [options]
  • 获取使用状态(≒ Linux TOP 命令)
docker stats [options] [表示するコンテナID...]
  • -it 选项
    -i 在 docker 启动后保持容器端的标准输入连接。 -t 启用伪终端。使用“-it bash”在容器内启动 bash。

码头工人组成

用于定义和运行多个容器的 Docker 应用程序的工具。
基本上只在开发环境中使用,在生产环境中使用不多。
如果您有很多容器,您可以使用depends_on 查看依赖项。
按照“构建 Dockerfile → 从 Docker 映像创建 Docker 容器”中的步骤进行操作

docker-compose up -d

可以一起执行

docker-compose down

可以运行基本上,您可以通过在 docker-compose 之后添加与 docker 命令相同的命令来执行相同的操作。
* Docker Compose CLI 兼容 docker-compose 和 compose-spec,可以通过“docker-compose”→“docker compose”编写。 compose-spec 是定义独立于平台的多容器应用程序的标准规范。

version: '2'

services:
  web:
    container_name: "sample_web"
    build: .
    depends_on:
      - db
      - redis
    volumes:
      - ./:/var/www/html/
      - ./docker-apache-conf/:/etc/apache2/sites-enabled/
    ports:
      - "80:80"
  redis:
    container_name: "sample_redis"
    image: redis
    ports:
      - "6379:6379"
  db:
    container_name: "sample_db"
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - ../db-data:/var/lib/mysql
      - ./initdb.d:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
      MYSQL_DATABASE: sample_database
      MYSQL_USER: sample_user
      MYSQL_PASSWORD: password
  • 服务
    定义要启动的容器。
  • 构建
    使用要构建的 Dockerfile 指定目录
  • 图像
    指定要构建的映像的名称。
  • depends_on
    定义服务之间的依赖关系。

  • 数据持久化的功能。
    即使容器被删除,里面的数据也会被保留,除非卷被显式销毁。
  • 端口
    主机和容器端口设置。
    主机端的键,容器端的值。
  • 环境
    设置容器中使用的环境变量。 (用于DB定义等)
    用于在登台和生产中切换环境变量。

容器编排

docker-compose 基本上是一个在一台主机上管理多个容器的工具,但它使用一种称为容器编排的技术来管理多个主机上的多个容器。主要功能包括自动伸缩、容器调度、容器健康监控、故障自动恢复等。主要的容器编排平台包括 Docker swarm 和 Kurbernetes,以及 Amazon ECS、Amazon EKS 和 Google Kubernetes Engine (GKE) 等云托管服务。


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308623859.html

相关文章: