メインコンテンツへスキップ

Docker(docker compose) ローカルでイメージをビルドして、サーバーで起動する

·765 文字·2 分·
Docker
著者
gf
目次

AWSなら普通にECR(🔗https://aws.amazon.com/ecr/)を使うのが一般的です。

状況
#

サーバーのメモリに余裕がないので、サーバー上でdocker compose buildできない。
Dockerfileの中でプロジェクトのビルドなど、それなりにメモリを食う処理をするため。

ネット環境がない場所でのdeployの参考にもなるはず。

手順
#

  1. [ローカル] ローカルでイメージをビルドして、イメージを.tarへ保存
docker compose -f docker-compose.yml build --no-cache
docker save -o images.tar image1 image2 ...
  1. images.tardocker-compose.ymlをサーバーへアップロード
    SSHを開通させたので、scpを使った
  2. [サーバー] docker loadでイメージを取り込んで起動する
    docker load -i images.tar
    docker compose -f docker-compose.yml up -d

備考
#

  • 今回使ったバージョン
$ docker compose version
Docker Compose version v2.35.1
  • docker-compose.yml内のserviceで、自前のDockerfile
services:
  server:
    build:
      context: ..
      dockerfile: container/prod.Dockerfile

のように指定している場合は、そのファイルがないとdocker compose upしたときにエラーがでるので、それらもサーバーに配置しておく。(ちゃんとimageがloadされていればビルドはされないので、Dockerfileだけ配置しておけば良い。(Dockerfileの中で使っているファイルの配置などは必要なかった))

  • docker-compose.yml内のserviceで外部の(hubなどの)imageを参照している場合、docker compose buildの段階でimageはpullされなかった
    サーバー側でdocker compose upした際に参照していたイメージがpullされた。
    そのpullを防ぎたいのであれば、ローカルでその参照しているimageをdocker pullして適切な名前とタグをつけて、docker saveして同様にサーバー側でdocker loadすればいけると思う。

関連記事

ブルーアーカイブのエミュ鯖について調べた
·892 文字·2 分
Firefoxにオフライン日本語翻訳が搭載されたぞお前らwwwww
·956 文字·2 分
いいね
統失TV
··2643 文字·6 分
バランスが大事