はじめに
docker-composeを使用して作成したコンテナを別サーバへ移行させます。
永続化としてホストのフォルダをマウントしている事を想定しています。
永続化にDocker volumeを使用している場合は次の記事などを参照してください。
https://qiita.com/ritukiii/items/c724f09fe66fedf2618b
(本記事の参照元でもあります)
ホスト環境は移行元、移行先共に
AWS上のUbuntu18.04です
準備
済んでいる場合は不要です
docker networkを使用している場合は移行先の環境に同名のnetworkを作成しておく。
# 例
# 移行先で
docker network create -d bridge --gateway=192.168.0.1 --subnet=192.168.0.0/16 <ネットワーク名>
移行元から移行先へssh接続できるようにしておく。
# 例
# 移行元で
# なければ.sshフォルダを作成してパーミッションを変更
mkdir ~/.ssh
chmod 700 ~/.ssh
# 接続先にログインするための秘密鍵を配置してパーミッションを変更
~/.ssh/<秘密鍵名>
chmod 600 ~/.ssh/<秘密鍵名>
# ~/.ssh/configに接続情報を追加
vi ~/.ssh/config
----------<追加>----------
Host <移行先サーバ名>
User <接続ユーザ名>
Port 22
HostName <IPアドレス>
IdentityFile ~/.ssh/<秘密鍵名>
--------------------------
# ~/.ssh/configを新規作成した場合はパーミッションを変更
chmod 600 ~/.ssh/config
本題
コンテナイメージの移行
移行元で実行中のコンテナイメージをtarファイルとして保存し、移行先にscpで転送します。
移行先でtarファイルからdockerイメージをロードします。
移行元での作業
コンテナをコミットして最新の状態をコンテナイメージに適用。
docker commit <コンテナ名> <イメージ名>
コンテナイメージをファイルとして書き出す。
docker save <イメージ名> > <イメージファイル名.tar>
書き出したファイルを移行先に転送
scp <イメージファイル名.tar> <移行先サーバ名>:<イメージファイル名.tar>
移行先での作業
転送したファイルをコンテナイメージとしてロードする
docker load < <イメージファイル名.tar>
ロード結果の確認
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<イメージ名> latest xxxxxxxxxxxx About an hour ago 3.02GB
コンポーズファイルの移行
tar圧縮してscpするなどして転送先に移行
# 例
# 移行元での作業
# docker-compose.ymlファイルなどが格納されたフォルダをtarで圧縮
tar zcvf <コンポーズファイルなど一式.tar.bz2> <コンポーズファイルのフォルダ>
# scpを使用して移行先に転送
scp <コンポーズファイルなど一式.tar.bz2> <移行先サーバ名>:<コンポーズファイルなど一式.tar.bz2>
# 例
# 移行先での作業
tar zxvf <コンポーズファイルなど一式.tar.bz2>
永続化用フォルダの移行
コンポーズファイルと同様に転送し、オーナー/権限を転送元を参考に調整する
# -Rオプションを付けてサブフォルダ以下も変更
chown dockeruser:dockergroup <永続化用フォルダ> -R
chmod 元のパーミッション <永続化用フォルダ> -R
コンテナイメージからコンテナを起動
移行したdocker-compose.ymlと同じフォルダに移動し、コンテナを起動する。
もし永続化用フォルダのパスなど、環境に変更がある場合はdocker-compose.ymlを編集しておく。
docker-compose up -d