3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker 入門者のアウトプットAdvent Calendar 2024

Day 2

【Docker】同一NWに2つのUbuntuコンテナを自動起動

Last updated at Posted at 2024-11-29

はじめに

Dockerでは、Dockerfiledocker-composeを使う事で、コンテナの環境構築を自動化できます。今回は、通信業界の現場でよく使う、「同じネットワーク内に2つのUbuntuコンテナを配置する環境構築」を、Dockerfiledocker-composeを使用して自動化してみます。


動作環境

  • OS: macOS(M1チップ搭載)
  • Docker: Docker Desktop for Mac (M1版)

全体の流れ

本記事では、次のステップで進めます。

  1. Dockerfileの作成
    Ubuntuベースのコンテナを作成するためのDockerfileを作成します。

  2. docker-compose.ymlの作成
    複数のコンテナを同時に作成するためのdocker-compose.ymlを作成します。

  3. Ubuntuコンテナの起動
    docker-composeを使って、2台のUbuntuコンテナを同時に起動します。

  4. コンテナ同士の通信接続確認
    作成した2台のコンテナが相互に通信できるかを確認します。


Dockerfileの作成

まずは、ベースとなるDockerfileを作成します。このファイルには、コンテナをビルドする際に実行するコマンドや必要なパッケージを記載します。ファイル名はDockerfileという名前でOKです。

# M1 MacのみFROMの記述が必要
FROM --platform=linux/amd64 ubuntu:latest

# RUNコマンドは、コンテナ作成時に自動で実行するコマンドを指定
RUN apt update -y
RUN apt install -y sudo make curl vim iperf3 iproute2 iputils-ping

# fogeというユーザを作成、fogefogeというPWを設定
RUN useradd -m -s /bin/bash foge
RUN echo "foge:fogefoge" | chpasswd

# sudoでroot権限のコマンドを実行できるように指定
RUN gpasswd -a foge sudo

# コンテナを指定したユーザで実行(rootユーザ以外で実行したい)
USER foge

# ワークディレクトリを設定
WORKDIR /home/foge

解説

  1. FROM --platform=linux/amd64 ubuntu:latest
    M1 Mac(ARMアーキテクチャ)を使っている場合、--platform=linux/amd64オプションを付けて、x86アーキテクチャ用のUbuntuを指定します。これにより、異なるアーキテクチャ間でも問題なくコンテナを作成できます。

  2. RUNコマンド
    必要なパッケージ(sudo, make, curlなど)をインストールしています。

  3. useraddchpasswd
    新しいユーザー(foge)を作成し、パスワードを設定します。

  4. USER foge
    コンテナ内で実行するユーザーをfogeに指定しています。これにより、root権限を持つことなく、セキュアにコンテナを実行できます。


docker-compose.ymlの作成

次に、同じディレクトリにdocker-compose.ymlを作成して、2台のコンテナを同時に立ち上げます。

version: '3.8'

services:
  ubuntu1:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ubuntu1
    networks:
      - mynetwork
    tty: true

  ubuntu2:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: ubuntu2
    networks:
      - mynetwork
    tty: true

networks:
  mynetwork:
    driver: bridge

解説

  • version: '3.8'
    Docker Composeのバージョンを指定しています。

  • services
    servicesセクションでは、2つのコンテナ(ubuntu1ubuntu2)を定義します。それぞれ、同じDockerfileからビルドされ、同じネットワーク(mynetwork)を共有します。

  • build
    buildセクションで、現在のディレクトリ(context: .)からDockerfileを参照してコンテナをビルドします。

  • networks
    両方のコンテナが同じネットワーク(mynetwork)を使用するため、コンテナ間で通信が可能です。

  • tty: true
    インタラクティブな端末を有効にします。これにより、コンテナ内でコマンドライン操作が可能になります。


Ubuntuコンテナの起動

ここまで準備が整ったら、docker-composeを使ってコンテナをビルドして起動します。

docker-compose up --build

このコマンドで、docker-compose.ymlに定義された2つのコンテナがビルドされ、起動します。--buildオプションを付けることで、Dockerfileを基にして新たにイメージが作成されます。

コンテナが起動すると、次のように表示されます。C-cでコマンドを停止すると、docker-composeが停止し、起動した2つのコンテナも停止します。今回は、C-cで停止せず、コンテナ同士の通信接続確認に進みます。

[+] Running 2/2
 ⠿ Container ubuntu2  Created                                                                                           0.0s
 ⠿ Container ubuntu1  Created                                                                                           0.0s
Attaching to ubuntu1, ubuntu2
ubuntu2  | To run a command as administrator (user "root"), use "sudo <command>".
ubuntu2  | See "man sudo_root" for details.
ubuntu2  | 
ubuntu1  | To run a command as administrator (user "root"), use "sudo <command>".
ubuntu1  | See "man sudo_root" for details.
ubuntu1  | 
...

コンテナ同士の通信接続確認

2台のコンテナが同じネットワークに接続されているので、コンテナ間で通信を確認できます。

1. ubuntu1コンテナにアクセス

新しいターミナルを開き、以下のコマンドでubuntu1コンテナにアクセスします。

docker exec -it ubuntu1 bash

2. ubuntu2コンテナにアクセス

新しいターミナルを開き、以下のコマンドでubuntu2コンテナにアクセスします。

docker exec -it ubuntu2 bash

3. pingテスト

まず、それぞれのコンテナでIPアドレスを確認します。

# IPアドレスを確認
ip a   

ubuntu1コンテナ内で、ubuntu2コンテナにpingを送ります。

# コンテナ名を指定してpingを送る
ping ubuntu2

# IPアドレスを指定してpingを送る
ping <コンテナのIPアドレス>

2台のコンテナが同じネットワーク内で通信できるはずです。


おわりに

今回は、Docker Composeを使って2台のUbuntuコンテナを同時に作成し、コンテナ同士で通信できる環境を構築する方法を解説しました。Docker Composeを使うことで、複数のコンテナを簡単に管理でき、開発環境を素早く立ち上げることができます。

次は、この環境をさらにカスタマイズして、実際のアプリケーションやサービスのセットアップを試してみてください。

参考

Dockerの基本的な操作については、次の記事を参照してください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?