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:8
やubuntu: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 run
、Dockerfile
、docker-compose
について詳しく解説しました。
これらの方法をうまく使い分けることで、開発・運用環境を効率的に構築・管理できます。
まずは、自分で立ててみるとよりイメージができると思います!
やってみてください!!