【初心者向け】Dockerコンテナの立て方3選!(Windows × CentOS環境)

コンテナ

Dockerとは何かについては、以前投稿しているので、よければご覧ください!
今回は、コンテナの立て方をご紹介していきます。

Dockerは、アプリケーションを「コンテナ」という軽量で標準化された環境で分離して実行する技術です。
コンテナは、アプリケーションとその依存関係を1つの単位としてパッケージ化し、OSやハードウェアの違いに関係なく同じ環境で動作させることができます。

今回は、WindowsでCentOS環境を想定し、以下の3つの方法を紹介します!

方法メリットデメリット
1. docker runコマンド1つで簡単使い捨て向け、設定の再利用が難しい
2. Dockerfile環境をコード化できるビルド手順が必要
3. docker-compose複数コンテナの管理が楽設定が少し複雑

1. docker run コマンドを使う方法

①Dockerをインストール

まずはDocker DesktopをWindowsにインストールします。
公式サイトからインストールガイドを参照し、インストールを行ってください。

以前こちらのブログでコマンドラインのみでDockerを使う方法を紹介しているので、こちらも参考にしてください!!

②CentOSのコンテナを起動する

次に、CentOSのコンテナを起動します。
コマンドプロンプトまたはPowerShellを開いて、以下のコマンドを実行します。

$ docker run -d --name centos-container centos:8

このコマンドで、CentOS 8のコンテナがバックグラウンドで起動します。
-d オプションはデタッチモード(バックグラウンド実行)で起動するためのものです。

※上記のコマンドだと何も実行するプロセスがないため、すぐ終了してしまうことがあります。
コンテナを永続的に実行するためには、シェルを無限ループで実行するコマンドを追加することができます。

$ docker run -d --name centos-container centos:8 /bin/bash -c "while true; do sleep 1000; done"

③コンテナの状態を確認

起動したコンテナの状態を確認するには、次のコマンドを実行すると、centos-container が表示されます。

$ docker ps (※表示されていない場合、コンテナが動いていない可能性あり。-aをつけて確認)

2. Dockerfile を使ってイメージをビルド

次に、自分のカスタムイメージを作成し、そのイメージを使ってコンテナを立てる方法を紹介します。
Dockerfileは、Dockerイメージを作成するための設計図です。以下は、Dockerfileを作成する際によく使われる基本的な命令と、それらをどう活用するかを解説します。

①Dockerfileを作成

まず、Dockerfile を任意のフォルダに以下の内容を持つファイルを作成します。
ファイル名: Dockerfile(拡張子なし)
WebサーバーとMySQLデータベースを連携させる例です。

# CentOS8 をベースにする
FROM centos:8

# 必要なパッケージをインストール(Node.js)
RUN dnf -y install nodejs && \
    dnf clean all

# アプリケーションのソースコードをコンテナにコピー
COPY . /usr/src/app

# 作業ディレクトリを設定
WORKDIR /usr/src/app

# アプリケーションの依存関係をインストール
RUN npm install

# ポートの公開(必要なら追加)
EXPOSE 8080

# アプリケーションを起動
CMD ["npm", "start"]

基本的な命令

  • FROM: ベースとなるイメージを指定します。例えば、centos:8ubuntu:20.04 など。
  • RUN: コンテナ内でコマンドを実行します。例えば、ソフトウェアのインストールやファイルのコピーなど。
  • COPY: ホストのファイルをコンテナ内にコピーします。
  • WORKDIR: 作業ディレクトリを指定します。このディレクトリでコマンドが実行されます。
  • CMD: コンテナが起動したときに実行するデフォルトのコマンドを指定します。

②イメージをビルドする

次に、docker build コマンドを使用して、Dockerfile からイメージをビルドします。
以下のコマンドを実行すると、node-app-container という名前のイメージが作成されます。

$ docker build -t node-app-container .

③コンテナを起動する

作成したイメージからコンテナを起動します。以下のコマンドを実行すると、コンテナがバックグラウンドで動作し、ポート 8080 を公開します。

$ docker run -d --name node-app-container -p 8080:8080 node-app-container

3. docker-compose.yml を使って複数のコンテナを管理

最後に、docker-compose.yml を使って、複数のコンテナを一括で管理する方法を紹介します。
例えば、データベースとWebサーバーを連携させる場合などに便利です。

①docker-compose.yml の作成

まず、プロジェクトのルートディレクトリに docker-compose.yml を作成します。
以下は、WebサーバーとMySQLデータベースを連携させる例です。

version: '3'

services:
  web:
    image: rockylinux:8  # CentOS8の代替としてRocky Linuxを使用
    container_name: centos-web
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html  # 静的ファイルをマウント
      - ./httpd.conf:/etc/httpd/conf/httpd.conf  # 設定ファイルをマウント(必要なら)
    command: /bin/bash -c "dnf -y install httpd && /usr/sbin/httpd -D FOREGROUND"
    platform: linux/amd64  # アーキテクチャ指定

  db:
    image: mysql:5.7
    container_name: mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb  # 初期データベースの作成
      MYSQL_USER: myuser  # ユーザー作成
      MYSQL_PASSWORD: mypassword
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql  # データ永続化
    platform: linux/amd64  # アーキテクチャ指定

volumes:
  db_data:

②コンテナを立ち上げる

次に、以下のコマンドで docker-compose.yml を使ってコンテナを一括起動します。
これで、Webサーバーとデータベースが連携した環境が簡単に立ち上がります。

$ docker-compose up -d

このDockerfileは、CentOS 8を基にして、Node.jsの環境をセットアップし、アプリケーションをコンテナ内で動かす設定です。

必要に応じて、以下のコマンドでログを確認できます。

$ docker-compose logs

docker-compose.ymlについてより詳しく解説

(1) docker-compose.ymlの基本構成

docker-compose.ymlファイルは、複数のサービスを定義するための設定ファイルです。以下のような要素が含まれます。

  • version: Composeファイルのバージョンを指定します。
  • services: 実行するサービス(コンテナ)のリストを定義します。サービスごとにイメージやボリューム、ポートなどを指定します。

(2) docker-composeの活用法

docker-composeは、複数のコンテナを管理する際に非常に便利です。
以下のようなシーンで活躍します。

  • 開発環境の構築: 例えば、Webサーバーとデータベースを連携させた開発環境を簡単に作れます。
  • マイクロサービスのデプロイ: 複数のサービス(例:APIサーバー、フロントエンド、データベースなど)を一括で管理できます。
  • テストの自動化: CI/CDパイプラインで、毎回同じ環境を構築し、テストを実行することができます。

まとめ

今回は、Dockerコンテナを管理するための3つの方法
docker runDockerfiledocker-composeについて詳しく解説しました。
これらの方法をうまく使い分けることで、開発・運用環境を効率的に構築・管理できます。

まずは、自分で立ててみるとよりイメージができると思います!
やってみてください!!

タイトルとURLをコピーしました