Dockerを使って開発を行っていると、コンテナ内で作業した内容を他の環境にデプロイしたい場合があります。例えば、あるコンテナで作業したアプリケーションや設定をそのまま別の環境に移動させる必要がある場合です。今回は、Dockerコンテナの状態を保存し、別のサーバにコンテナをデプロイし直す方法について解説します。
目次
1. コンテナを作成する
まず、DockerFileを用意します。
# 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
DockerFileのあるディレクトリで以下のようにイメージを作成します。
docker build . -t ubuntu_image
イメージからmy-ubuntu
という名前でコンテナを作成します。
docker run -it -d --name my-ubuntu ubuntu_image
以下のコマンドでコンテナ環境に入ります。
docker exec -it my-ubuntu bash
インストールされているパッケージのリストを確認します。
sudo apt list --installed
現在のコンテナ環境を別のサーバに再デプロイした際、上記のパッケージリストが同一である事を確認し、コンテナ環境の移行が成功したかどうか検証していきます。
2. コンテナの状態を保存する
それでは、コンテナ環境の移行をしてみます。
2.1. Dockerイメージとして保存
docker commit
コマンドを使用して、コンテナの状態をイメージとして保存します。
docker commit my-ubuntu my_saved_image:latest
これで、my-ubuntu
コンテナの状態がmy_saved_image
という名前のDockerイメージとして保存されます。
保存されたイメージを確認するには、以下のコマンドを使います。
docker images
出力例:
REPOSITORY TAG IMAGE ID CREATED SIZE
my_saved_image latest abcdef123456 1 minute ago 200MB
これで、保存したイメージが確認できるはずです。
2.2. イメージにタグを付ける
もし保存したイメージを特定のバージョンとして管理したい場合、タグを付けることができます。例えば、v1
というタグを付ける場合は以下のコマンドを使用します。
docker tag my_saved_image:latest my_saved_image:v1
3. 保存したイメージをサーバ内で再デプロイする
保存したイメージを使って新しいコンテナを作成します。
docker run -it -d --name my-new-ubuntu my_saved_image:latest
以下のコマンドでコンテナ環境に入ります。
docker exec -it my-new-ubuntu bash
インストールされているパッケージのリストを確認します。
最初に作ったコンテナと同一のパッケージがインストールされている事を確認しましょう。
sudo apt list --installed
4. 別の環境にデプロイする
次に、保存したイメージを別の環境にデプロイする方法を見ていきます。
4.1. イメージの保存と転送
1. 保存したイメージをファイルとしてエクスポートするには、docker save
コマンドを使用します。
docker save -o my_saved_image.tar my_saved_image:latest
2. エクスポートしたmy_saved_image.tar
ファイルを別のサーバに転送します。例えば、scp
を使ってファイルを転送できます。
scp my_saved_image.tar user@remote-server:/path/to/destination
3. 別の環境に転送したら、docker load
コマンドを使ってイメージをインポートします。
docker load -i /path/to/destination/my_saved_image.tar
4.2. 別の環境でコンテナを起動
イメージをインポートしたら、あとは通常通りコンテナを起動します。
docker run -it -d --name my-new-container my_saved_image:latest
以下のコマンドでコンテナ環境に入ります。
docker exec -it my-new-container bash
インストールされているパッケージのリストを確認します。
最初に作ったコンテナと同一のパッケージがインストールされている事を確認しましょう。
sudo apt list --installed
5. まとめ
Dockerコンテナの環境を保存し、別のコンテナとしてデプロイし直す手順を紹介しました。具体的には、以下の流れになります。
- コンテナの状態を
docker commit
で保存 - 保存したイメージを使って新しいコンテナを起動
- 必要に応じて、
docker save
とdocker load
を使って異なる環境にイメージを移行
この方法を使うことで、異なる環境間で同じ作業環境を再現することができ、デプロイ作業を効率化できます。是非、試してみてください。