Docker和Docker Compose的基本知识
目标读者
-
- DockerやDocker Composeについて初めて学ぶ人々。基本的な概念から始め、具体的な使い方までを学びます。
- コンテナ仮想化技術に興味を持っている人。
Docker
跟Chinese (中国)
Docker是一个提供容器虚拟化的平台,它将应用程序及其依赖关系以轻量且独立的“容器”单位进行打包,用于执行和分发,还包括工具和生态系统。
此外,由于可以忽略物理环境和服务器配置的差异,因此开发和运维效率大幅提高。
使用Docker的好处
-
- Dockerはコンテナを使うことで隔離できるため、異なるアプリケーションやサービスの依存関係を解決し、互いに影響を受けずに実行することができる。
-
- Dockerがあれば、物理的な環境の違いや、サーバ構成の違いを無視できる
-
- 環境構築をコード化(IaC)することで、複数の同じ環境が作れる、作成した環境を配布しやすい。
-
- イメージを読み込めば開発環境の再構築が容易。
-
- スクラップ&ビルドが容易。
- カーネルを共有しているのでリソースを節約できる。
Docker的架构。
Docker是一种客户端-服务器架构,Docker客户端通过与Docker守护程序通信来进行Docker容器的构建、执行和分发等工作。
Docker客户端和守护程序都可以在同一台系统上运行。
Docker客户端也可以连接到远程的Docker守护程序。
Docker客户端和守护程序通过Socket或RESTful API进行通信。

参考文献:https://docs.docker.jp/engine/introduction/understanding-docker.html#id7
Docker 客户端
使用它来操作Docker守护程序。
当接收到用户的命令时,与Docker守护程序通信并返回响应。
Docker 主机 (Docker
Docker 主机是提供 Docker 容器运行环境的物理或虚拟机。
Docker 守护进程
-
- Dockerデーモンは、ホストマシン上で動作します。これは、Dockerエンジンがインストールされたマシンで、Dockerコンテナの実行環境を提供します。
-
- ユーザーは、Dockerクライアントを通じてDockerデーモンと通信します。
-
- つまり、ユーザーは直接デーモンと通信せず、Dockerクライアントを介してコンテナの管理や操作を行います。
- 主な役割は、コンテナの起動や管理を行うことです。
中国翻译此句,仅提供一种选项:
形象
Docker镜像是启动容器的只读模板,由Dockerfile创建。可以从Docker Hub下载或自行创建这些镜像。换句话说,Docker镜像是Docker中构建的基本单位。
容器
Docker容器将应用程序及其依赖关系打包成一个单独的包,提供了一个独立运行环境。每个容器都是独立的,可以执行、启动、停止、移动和删除。此外,由于可以在多个环境中运行相同的容器,因此具有高度的可移植性。从面向对象的角度来看,基本上一个容器代表一个进程,可以将容器视为镜像的实例。
Docker注册表
保存和管理图像的存储库。
可以通过PULL现有的图像并在本地环境中使用,也可以通过PUSH自己的图像并进行共享。
Docker Hub作为一个公共的Docker注册表提供。
Docker注册表是Docker中的分发组件。
Docker Hub-Docker仓库
Docker官方的Docker Registry。常用的中间件已经被打包成镜像,直接可以使用。(也可进行自定义配置)
Docker文件
Dockerfile是用于构建单个Docker镜像的配置文件,明确定义了应用程序的配置和构建过程。该文件包含了构建所需的指令和依赖关系,可以使用单个命令构建镜像。通过使用Dockerfile,可以轻松地复制相同的环境,并始终以相同的配置重现环境。
将Flask应用程序进行Docker化。
目录结构
project
├── app.py
├── Dockerfile
└── requirements.txt
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello world"
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Flask==2.1.0
# 使用するベースイメージ
FROM python:3.8-slim
# 作業ディレクトリの指定
WORKDIR /app
# ホストのrequirements.txtをコンテナにコピー
COPY requirements.txt .
# 必要なライブラリのインストール
RUN pip install --no-cache-dir -r requirements.txt
# ホストのアプリケーションコードをコンテナにコピー
COPY . .
# Flaskアプリケーションの実行コマンド
CMD ["python", "app.py"]
构建容器
$ docker build -t flask-image .
运行容器
$ docker container run -d -p 5000:5000 --name flask-app flask-image
当您访问 http://localhost:5000 时,将显示“你好世界”。
Docker容器的生命周期
Docker容器是一种推荐的“一次性使用”方法。这是因为它可以快速重建含有软件的容器。如果多个容器同时运行,逐个逐个地更新是低效的。因此,通常会丢弃旧容器,并从新镜像创建新容器进行切换。
-
- 创建
-
- Dockerfile是用来创建Docker镜像的步骤记录。
-
- 构建
-
- 使用docker build命令,执行在Dockerfile中描述的步骤,创建Docker镜像。
-
- 执行
-
- 通过创建的Docker镜像,使用docker run命令启动Docker容器。
-
- 停止/恢复
-
- 使用docker stop或docker start命令停止或恢复Docker容器。
-
- 删除
- 不再需要的Docker容器,使用docker rm命令进行删除。
Docker Compose-Docker编排
Docker Compose是用于集中管理多个Docker容器的工具。使用名为docker-compose.yml的配置文件来定义每个容器的设置,并可以批量启动、停止和管理它们。
使用Docker Compose的好处
-
- 複数のDockerコンテナを簡単・効率的に管理・実行できるようになる。
-
- コンテナを運用する際のミスを軽減できる。
- コンテナ間のネットワーク設定が簡単になる。
docker-compose.yml(Compose.yml)的汉语表达:
docker-compose.yml是Docker Compose的配置文件,用于定义协调管理多个Docker容器的设置。该文件以YAML格式编写,可以包含以下信息。
-
- サービス
-
- アプリケーションの各コンポーネント(例えば、app、db、webなど)を定義します。各サービスは個別のコンテナとして実行されます。
-
- ネットワーク
-
- コンテナ間の通信を管理します。これにより、異なるサービスが互いに通信できるようになります。
-
- ボリューム
- データを永続化するためのストレージを定義します。これにより、コンテナが停止または削除されてもデータが保持されます。
docker-compose.yml的基本结构示例
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
在这个示例中,定义了两个服务(容器):web和db。web服务使用nginx:alpine镜像,并映射主机的8080端口到容器的80端口。db服务使用postgres:latest镜像,并使用名为db-data的卷来保存数据库的数据。
数据持久化
在Docker中,有两种主要的方法来实现数据持久化。
-
- マウント(同期)を利用したデータの永続化
-
- ホスト(ローカル)ディレクトリとコンテナディレクトリを同期させることでデータを永続化します。
-
- データボリュームを利用した永続化
- データボリュームは1つまたは複数のDockerコンテナ内でデータの共有・再利用をするために設計された特別なディレクトリです。データボリュームとコンテナのライフサイクルはそれぞれ独立しており、コンテナを削除してもデータボリュームは削除されません。
Docker Compose命令
建设命令
$ docker-compose build
执行指令
$ docker-compose up
在Docker容器中执行命令
# 構文
$ docker exec -it <コンテナ名またはID> <任意のコマンド>
# npmパッケージのインストール
$ docker exec -it <コンテナ名またはID> npm install <パッケージ名>
# Djangoでマイグレーションを作成する
$ docker exec -it <コンテナ名またはID> python manage.py makemigrations
总的来说
-
- DockerとDocker Composeは、ソフトウェア開発の効率を向上させるためのツールです。
-
- Dockerは、アプリケーションとその依存関係を「コンテナ」と呼ばれる独立した単位にパッケージ化することができます。これにより、アプリケーションはどの環境でも同じように動作します。
-
- Docker Composeは、複数のDockerコンテナを一括で管理するためのツールです。これにより、複数のコンテナを同時に起動、停止、削除することができます。
- これらのツールを使用することで、開発者は環境の設定や管理を効率的に行うことができます。
请查阅相关资料。
理解Docker架构(官方)
MIXI的培训资料
用于保存数据的两个Docker选项。
推荐图书
了解Docker和Kubernetes的结构和使用方法(推荐)
Docker和虚拟服务器的完全入门