介绍
到目前为止,我一直在大气中使用 Docker,所以我大致总结了从概念和机制到命令和工具的所有内容。
什么是 Docker
用于构建、共享和运行容器类型虚拟环境的事实上的 OSS。
容器是封装应用程序代码及其依赖项的数据结构和机制的总称。
硬件虚拟化和容器化虚拟化
Docker 的先验知识包括虚拟化技术。典型的虚拟化技术包括硬件虚拟化和容器虚拟化。
在硬件虚拟化中,宿主机通过一个hypervisor被分割成多个虚拟机(VM),整个服务器包括操作系统、CPU、内存都被虚拟化,开销很大。相比之下,容器类型的虚拟化通过控制内核命名空间和 cgroup 来分离进程,并且只虚拟化应用程序、它们的库和依赖项,需要较少的机器资源。
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