Docker入門ガイド

一、インストール

公式サイト:www.docker.com

インストール手順(CentOS 7)

  1. パッケージの更新
    yum update
    
  2. 必要なパッケージのインストール
    yum install -y \
    yum-utils \
    device-mapper-persistent-data \
    lvm2
    
  3. リポジトリの設定
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce/repo
    
  4. Dockerのインストール
    yum install -y docker-ce
    
  5. バージョンの確認
    docker -v
    

二、Dockerの基本概念

Dockerのアーキテクチャ

アーキテクチャの構成要素

  • イメージ(Image):Dockerイメージはrootファイルシステムのようなものです。例えば公式のUbuntu 16.04イメージには、完全なUbuntu 16.04最小システムのrootファイルシステムが含まれています。
  • コンテナ(Container):イメージとコンテナの関係は、オブジェクト指向プログラミングにおけるクラスとオブジェクトの関係に似ています。イメージは静的な定義であり、コンテナはイメージが実行される実体です。コンテナは作成、起動、停止、削除、一時停止などができます。
  • リポジトリ(Repository):リポジトリはコードの管理センターのようなもので、イメージを保存するために使用されます。

ミラーアクセラレーターの設定

docker hub(https://hub.docker.com)からイメージをダウンロードすると遅いため、ミラーアクセラレーターを設定することが一般的です。

  • USTC
  • Alibaba Cloud
  • Tencent Cloud

Alibaba Cloudでの設定例

  1. Alibaba Cloudにログイン
  2. 「コンテナイメージサービス」を検索
  3. 「ミラーアクセラレーター」を選択
  4. 必要な設定コードをコピー&ペースト
  5. 設定が成功したか確認
    cat /etc/docker/daemon.json
    

三、Dockerコマンド

1. Dockerサービス関連コマンド

  • サービスの起動
    systemctl start docker
    
  • サービスの停止
    systemctl stop docker
    
  • サービスの再起動
    systemctl restart docker
    
  • サービス状態の確認
    systemctl status docker
    

2. Dockerイメージ関連コマンド

  • イメージの確認
    docker images
    # 全イメージIDの確認
    docker images -q
    
  • イメージの検索
    docker search <イメージ名>
    
  • イメージのプル
    docker pull <イメージ名>[:バージョン]
    
  • イメージの削除
    # IDで削除
    docker rmi <ID>
    # 名前とバージョンで削除
    docker rmi <イメージ名:バージョン>
    # 全イメージの削除
    docker rmi `docker images -q`
    

3. Dockerコンテナ関連コマンド

  • コンテナの確認
    # 実行中のコンテナ
    docker ps
    # 全コンテナ
    docker ps -a
    
  • コンテナの作成と起動
    docker run <パラメータ>
    # 例1: 
    docker run -it --name=<コンテナ名> <イメージ名>[:バージョン] [/bin/bash]
    # 例2:
    docker run -id --name=<コンテナ名> <イメージ名>[:バージョン]
    # コンテナへの接続
    docker exec -it <コンテナ名> /bin/bash
    
  • コンテナの起動
    docker start <コンテナ名>
    
  • コンテナの停止
    docker stop <コンテナ名>
    
  • コンテナの削除
    # 名前で削除
    docker rm <コンテナ名>
    # IDで削除
    docker rm <コンテナID>
    # 全コンテナの削除
    docker rm `docker ps -aq`
    
  • コンテナ情報の確認
    docker inspect <コンテナ名>
    

四、Dockerコンテナのデータボリューム

概念と役割

概念

  • データボリュームはホストマシン上のディレクトリまたはファイルです
  • コンテナディレクトリとデータボリュームディレクトリがバインドされると、変更が即座に同期されます
  • 1つのデータボリュームを複数のコンテナで同時にマウントできます
  • 1つのコンテナも複数のデータボリュームをマウントできます

役割

  • コンテナデータの永続化
  • 外部マシンとコンテ間間の間接通信
  • コンテナ間のデータ交換

データボリュームの設定

docker run ... -v ホストディレクトリ:コンテナ内ディレクトリ...
# 例
docker run -it --name=c1 -v /root/data:/root/data_container centos:7 /bin/bash

データボリュームコンテナの設定

設定手順

  1. c3データボリュームコンテナの作成と起動
    docker run --name=c3 -v /volume centos:7 /bin/bash
    
  2. c1、c2コンテナの作成と起動(--volumes-fromパラメータ使用)
    docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
    docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
    
  3. コンテナの詳細確認
    docker inspect c1
    

五、Dockerアプリケーションのデプロイ

MySQLのデプロイ

  1. MySQLイメージの検索
    docker search mysql
    
  2. MySQLイメージのプル
    docker pull mysql:5.6
    
  3. コンテナの作成(ポートマッピング、ディレクトリマッピング設定)
    mkdir ~/mysql
    cd ~/mysql
    
    docker run -id \
    -p 3307:3306 \
    --name=mysql_container \
    -v $PWD/conf:/etc/mysql/conf.d \
    -v $PWD/logs:/logs \
    -v $PWD/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql:5.6
    

Tomcatのデプロイ

  1. イメージの検索
    docker search tomcat
    
  2. イメージのプル
    docker pull tomcat
    
  3. コンテナの作成
    mkdir ~/tomcat
    cd ~/tomcat
    
    docker run -id --name=tomcat_container \
    -p 8080:8080 \
    -v $PWD:/usr/local/tomcat/webapps \
    tomcat
    

Nginxのデプロイ

  1. イメージの検索
    docker search nginx
    
  2. イメージのプル
    docker pull nginx
    
  3. コンテナの作成
    mkdir ~/nginx
    cd ~/nginx
    mkdir conf
    cd conf
    vim nginx.conf
    
    docker run -id --name=nginx_container \
    -p 80:80 \
    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
    -v $PWD/logs:/var/log/nginx \
    -v $PWD/html:/usr/share/nginx/html \
    nginx
    

Redisのデプロイ

  1. イメージの検索
    docker search redis
    
  2. イメージのプル
    docker pull redis:5.0
    
  3. コンテナの作成
    docker run -id --name=redis_container -p 6379:6379 redis:5.0
    
  4. 外部からのアクセス
    redis-cli.exe -h <ホストIP> -p 6379
    

六、Dockerfile

イメージの原理

Linuxシステムの構成とDockerイメージの階層構造について説明します。

イメージの作成

  • コンテナからイメージへの変換
    docker commit <コンテナID> <新しいイメージ名:新しいバージョン>
    docker save -o <圧縮ファイル名> <新規作成イメージ名:バージョン>
    docker load -i <圧縮ファイル名>
    

Dockerfileの概念

Dockerfileはテキストファイルで、命令の羅列で構成されます。各命令は1つのレイヤーを構築し、最終的に新しいイメージを構築します。

主要命令

命令 役割 備考
FROM 親イメージの指定 dockerfileのベースとなるイメージを指定
MAINTAINER 作成者情報 dockerfileの作成者を明記
RUN コマンドの実行 ビルド時にコマンドを実行
CMD コンテナ起動コマンド デフォルトの起動コマンドを指定
COPY ファイルのコピー ビルド時にファイルをイメージにコピー
ADD ファイルの追加 COPYに加えてリモートからの追加も可能
WORKDIR 作業ディレクトリ コンテナ内の作業ディレクトリを指定

実践例

例1: カスタムCentOS7イメージ

FROM centos:7
MAINTAINER example 

RUN yum install -y vim
WORKDIR /usr

CMD /bin/bash

例2: Spring Bootプロジェクトのデプロイ

FROM java:8
MAINTAINER example 

ADD springboot-app.jar app.jar
CMD java -jar app.jar

七、Dockerサービスオーケストレーション

サービスオーケストレーションの概念

複数のコンテナをデプロイする際、各マイクロサービスを手動で起動・停止するのは大変な作業になります。サービスオーケストレーションは、一定のビジネスルールに基づいてコンテナを一括管理する手法です。

Docker Composeの概要

Docker Composeは、複数のコンテナを分散してデプロイするためのツールです。アプリケーションの完全な開発ライフサイクル(サービスのビルド、起動、停止)を提供します。

Docker Composeのインストール

# Linuxへのインストール
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

Docker Composeを使用したnginx+Spring Bootプロジェクトのオーケストレーション

  1. docker-composeディレクトリの作成
    mkdir ~/docker-compose
    cd ~/docker-compose
    
  2. docker-compose.ymlファイルの作成
    version: '3'
    services:
      nginx:
        image: nginx
        ports:
          - "80:80"
        links:
          - app
        volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d
      app:
        image: springboot-app
        expose:
          - "8080"
    
  3. ディレクトリ構造の作成
    mkdir -p ./nginx/conf.d
    
  4. nginx設定ファイルの作成
    server {
        listen 80;
        access_log off;
        location / {
            proxy_pass http://app:8080;
        }
    }
    
  5. コンテナの起動
    docker-compose up
    

八、Dockerプライベートリポジトリ

プライベートリポジトリの構築

# 1. プライベートリポジトリイメージのプル
# 2. プライベートリポジトリコンテナの起動
# 3. ブラウザで http://<プライベートリポジトリサーバーIP>:5000/v2/_catalog にアクセスし、{"repositories":[]}が表示されれば成功
# 4. daemon.jsonの修正
{"insecure-registries":["<プライベートリポジトリサーバーIP>:5000"]}
# 5. Dockerサービスの再起動
systemctl restart docker
docker start registry

イメージのプライベートリポジトリへのアップロード

# 1. イメージをプライベートリポジトリ用にタグ付け
docker tag centos:7 <プライベートリポジトリサーバーIP:5000>/centos:7
# 2. タグ付けしたイメージのアップロード
docker push <プライベートリポジトリサーバーIP:5000>/centos:7

プライベートリポジトリからのイメージのプル

docker pull <プライベートリポジトリサーバーIP:5000>/centos:7

九、Docker関連概念

コンテナ仮想化と従来の仮想化の比較

コンテナの特徴

  • コンテナイメージは軽量で、実行可能な独立したソフトウェアパッケージです。コード、実行環境、システムツール、システムライブラリ、設定など、ソフトウェア実行に必要なすべてを含みます。
  • コンテナ化されたソフトウェアは、どのような環境でも一貫して実行できます。
  • コンテナはソフトウェアに独立性を与え、外部環境の差異の影響から守り、同じインフラ上で異なるソフトウェアを実行する際のチーム間の競合を減少させます。

コンテナと仮想マシンの比較

  • 共通点:コンテナと仮想マシンは、両方ともリソースの分離と割り当ての利点があります。
  • 相違点
    • コンテナはOSを仮想化し、仮想マシンはハードウェアを仮想化します。
    • 従来の仮想マシンは異なるOSを実行できますが、コンテナは同じタイプのOS(ホストカーネルを共有)のみを実行できます。

タグ: Docker コンテナ仮想化 docker-compose Dockerfile

5月21日 04:00 投稿