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进行通信。

docker-architecture.png

参考文献: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容器是一种推荐的“一次性使用”方法。这是因为它可以快速重建含有软件的容器。如果多个容器同时运行,逐个逐个地更新是低效的。因此,通常会丢弃旧容器,并从新镜像创建新容器进行切换。

    1. 创建

 

    1. Dockerfile是用来创建Docker镜像的步骤记录。

 

    1. 构建

 

    1. 使用docker build命令,执行在Dockerfile中描述的步骤,创建Docker镜像。

 

    1. 执行

 

    1. 通过创建的Docker镜像,使用docker run命令启动Docker容器。

 

    1. 停止/恢复

 

    1. 使用docker stop或docker start命令停止或恢复Docker容器。

 

    1. 删除

 

    不再需要的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和虚拟服务器的完全入门

 

bannerAds