【3】GCEのVMインスタンスにDockerとDocker Composeをインストールする。他設定(スワップ領域追加、タイムゾーン設定)
- 1. 公式サイト
- 2. 目標
- 3. 参考サイト様
- 4. スワップ領域を追加する
- 5. Docker をインストールする
- 6. Docker Compose をインストールする
- 7. 時刻の設定をアジア(東京)に設定する
- 8. おまけ SELinux の無効化?
- 9. 関連リンク
これはHerokuからGCP無料枠にRailsアプリを引越ししたときにやったことシリーズの【2】の続きです。
GCE に 作成した VM インスタンス上に環境設定するところのメモです。
1. 公式サイト
- Compute Engine 上のコンテナ | Compute Engine ドキュメント | Google Cloud
- Get Docker CE for Debian | Docker Documentation
- Install Docker Compose | Docker Documentation
2. 目標
3. 参考サイト様
本当に参考になりました。ありがとうございます!
- Create a Linux Swap File | Linuxize
- GCE でスワップ領域が存在しないことに対する対応 | kisse-logs!
- AWS の EC2 で最小限の努力で mastodon を構築する - Qiita
4. スワップ領域を追加する
RAM が 0.6GB と少ないこともあり、重い処理を行うとOut of Memory
でエラーとなることがあります。
これを防ぐためにスワップファイルを作成することにします。
私もdocker-compose build
コマンドで Docker イメージをビルド中に OOM が発生して処理が中断してしまいましたが、スワップファイルを作成後は一度も OOM が発生していません。
↓ これはエラーが発生した時のログです。
Installing mini_portile2 2.4.0 Fetching nokogiri 1.10.1 Installing nokogiri 1.10.1 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/nokogiri-1.10.1/ext/nokogiri /usr/local/bin/ruby -I /usr/local/lib/ruby/site_ruby/2.5.0 -r ./siteconf20190222-30-1ixnrwg.rb extconf.rb --use-system-libraries extconf failedOut of memory - /usr/local/bin/ruby Gem files will remain installed in /usr/local/bundle/gems/nokogiri-1.10.1 for inspection. Results logged to /usr/local/bundle/extensions/x86_64-linux/2.5.0/nokogiri-1.10.1/gem_make.out An error occurred while installing nokogiri (1.10.1), and Bundler cannot continue. Make sure that `gem install nokogiri -v '1.10.1' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: rails was resolved to 5.2.2, which depends on actioncable was resolved to 5.2.2, which depends on actionpack was resolved to 5.2.2, which depends on actionview was resolved to 5.2.2, which depends on rails-dom-testing was resolved to 2.0.3, which depends on nokogiri ERROR: Service 'web' failed to build: The command '/bin/sh -c set -x && apk add --update --no-cache $RUNTIME_PACKAGES && apk add --update --virtual build-dependencies --no-cache $DEV_PACKAGES && gem install bundler --no-document && bundle config build.nokogiri --use-system-libraries && bundle install && apk del build-dependencies && cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && apk del tzdata && rm -rf /var/cache/apk/*' returned a non-zero code: 5
分かりづらいので該当箇所のスクリーンショットも貼っておきます。
それでは、スワップファイルの設定をします。
コマンドは次のように実行していきます。
$sudo fallocate -l 4G /swapfile $sudo chmod 600 /swapfile $sudo mkswap /swapfile $sudo swapon /swapfile $echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
このような感じで出来ました。
5. Docker をインストールする
公式サイトを見ながら Docker をインストールしていきます。
これは Debian へのインストール方法ですので他のディストリビューションをお使いの方は対応した公式サイトをご覧ください。
Get Docker CE for Debian | Docker Documentation
5.1. Docker インストールのためのセットアップ
次のように実行していきます。
5.1.1. リポジトリのセットアップ
$sudo apt-get update $sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common
5.1.2. Docker 公式の gpg キーを登録する
$curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
鍵の fingerprint(フィンガープリント)が9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
と表示されるのを確認します。
$sudo apt-key fingerprint 0EBFCD88
このような感じで表示されれば OK です。
$sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
5.1.3. stable (安定版)リポジトリをセットアップする
$sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable"
5.2. Docker CE のインストール
5.2.1. apt パッケージ・インデックスを更新する
$sudo apt-get update
5.2.2. 最新バージョンの Docker CE をインストールする
$sudo apt-get install docker-ce docker-ce-cli containerd.io
5.2.3. hello-world イメージを実行する
正しくインストールされているか確認のためhello-world
を実行します。
$sudo docker run hello-world
このように「Hello from Docker!」と表示されれば OK です。
5.2.4. 特権のないユーザで Docker コマンドを実行できるようにする
現時点では Docker コマンドを実行する時はsudo
が必要ですが、「docker」グループにユーザーを加えることで sudo なしで Docker コマンドを使用できるようになります。
※これはそのユーザーに Docker ホストにおける root 権限を付与することになるので信頼できるユーザーにのみ付与してください。
↓your-userをユーザー名に書き換えてください
$sudo usermod -aG docker your-user
このコマンドを実行後、一旦ログアウトして再ログインしてください。
次のコマンドでグループの設定を確認出来ます。
$cat /etc/group | grep docker
docker:x:999:sakura
のように表示されます。
先程のhello-world
がsudo
なしで実行できれば OK です。
6. Docker Compose をインストールする
引き続き公式サイトを見ながら Docker Compose をインストールしていきます。
Install Docker Compose | Docker Documentation
6.1. 最新バージョンの Docker Compose をインストールする
6.1.1. GitHub のリリースページをチェックする
Releases · docker/compose · GitHub
https://github.com/docker/compose/releases
Latest となっているバージョンをインストールします。
6.1.2. インストールコマンドを実行する
「1.23.2」となっている箇所を最新のバージョンに書き換えてください。
$sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
6.1.3. コマンドを実行できるパーミッションを与える
$sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose -v
と実行してみて正常に結果が表示されれば OK です。
7. 時刻の設定をアジア(東京)に設定する
現在は時刻の設定が UTC となっていて9時間ずれています。
これを JST に変更します。
以下のコマンドを実行し、dbus パッケージをインストール
$sudo apt-get install dbus
アジア(東京)に設定します。
$sudo timedatectl set-timezone Asia/Tokyo
date
コマンドを打つと日付が JST になっていると思います。
8. おまけ SELinux の無効化?
色々な参考サイト様を拝見しましたが SELinux の無効化をしているところが多いようでした。
How to enable SELinux on Debian “Stretch” 9 – Davide Giunchi
https://giunchi.net/how-to-enable-selinux-on-debian-stretch-9
上記の参考サイト様によると、Debian9 では SELinux のサポートはされているがデフォルトではインストールされていないとのことです。
なので特に何もしませんでした。
今回はこれで終わりです。
次回はVMインスタンスにファイルを転送する方法を書いてみたいと思います。
9. 関連リンク
- 【1】HerokuからGCP無料枠にRailsアプリを引越ししたときにやったこと(GCE+Docker+Rails+Puma+PostgreSQL+Nginx+Let's Encrypt)
- 【2】GCP(GCE)で無料のVMインスタンスを作る(Always Free無料枠、外部IPアドレス取得、SSH接続、22番ポート対応)
- 【3】GCEのVMインスタンスにDockerとDocker Composeをインストールする。他設定(スワップ領域追加、タイムゾーン設定)
- 【4】GCP(GCE)のVMインスタンスにファイルを転送する(Cyberduck, scpコマンド)
- 【5】GCP(GCE)でRailsアプリを外部IPアドレス+3000番ポートで動かしてみる(環境変数COMPOSE_FILE、GCE+Docker+Rails+Puma+PostgreSQL)
- 【6】DNSテスト用に無料の独自ドメインを取得してGoogle Cloud DNSでネームサーバの設定をする(GCE,freenom,http+独自ドメイン+ポート3000でアクセスする)
- 【7】SteveLTN/HTTPS-PORTALを使ってLet's Encryptで全自動SSL対応を行う(GCP(GCE),Rails,Nginxリバースプロキシ,Docker)