概要
Docker + Rails + Circle CI + Terraformでインフラをコードで環境構築 & ECSへ自動コンテナデプロイ
上記ページを閲覧してみて心が踊ったので、実際に試そうと思ったけど
そもそもチュートリアルの環境がないので1から作ってみたメモ。
いや、ほんにこういう記事ってありがたいよね。としみじみ。
これからやること
・(主にサーバーサイドの)アプリをDockerを使って環境構築して
・terraformでインフラの構成をコード化して
・(Kubernetesなどのコンテナオーケストレーションツールを用いて)なるべく開発環境との差異が無いままコンテナデプロイをして
・CircleCIでテストからデプロイまで自動化
※引用
今の現場だと触ることのできない構成(=ナウい構成)なのでワクワクしながら始める。
本記事では元記事のページ内容を実行できる環境を構築していきます。
拙い内容になるかと思いますので、修正点などありましたらコメントお願いします。
用語集
普段はインフラ構築(物理サーバ、スイッチ)の構築をメインとしているので
まずは知らない用語を調べてみる
rbenv とは?
Ruby のバージョンを管理してくれるバージョン管理システム
ruby-build とは?
rbenv のプラグイン
rbenv install コマンドを提供する rbenv のプラグインとして利用できます。
rbenv + ruby-build はどうやって動いているのか
gemとは
ruby用のライブラリ(宝石)
ルビーとか宝石とか名前の付け方がいちいちおしゃれ
Bundllerとは
gemの管理に使用(方向性がyumに似ているイメージ)
gem同士の互換性を保ちながらパッケージの種類やバージョンを管理してくれる仕組みのこと。
環境構築
CentOS7.3にて環境構築を行っていきます。
Rubyインストール
必要なパッケージのインストール
# yum -y install git bzip2 gcc gcc-c++ openssl-devel readline-devel zlib-devel
# yum -y install epel-release
# yum -y install nodejs
rbenvをダウンロード
# git clone https://github.com/rbenv/rbenv.git /usr/local/rbenv
# git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-build
rbenvの環境設定
export RBENV_ROOT=/usr/local/rbenv
export PATH=${RBENV_ROOT}/bin:$PATH
eval "$(rbenv init --no-rehash -)"
rootユーザで以下の実行が必要
# source /etc/profile.d/rbenv.sh
sudoでrbenvを実行するためにsudorderにRBENV_ROOTとsecure_pathの追記が必要
# visudo
...
Defaults env_keep += "RBENV_ROOT"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/bin:/usr/local/rbenv/shims
...
Rubyのインストール
バージョンをチェック
# rbenv install -l
###実行結果
...
2.6.0-rc1
2.6.0-rc2
2.6.0
2.6.1
2.6.2
2.6.3
2.7.0-dev
jruby-1.5.6
...
インストール実行
バージョン2.6.3をインストールしてみます。
# rbenv install 2.6.3
使用するRubyのバージョンを設定します。
# rbenv global 2.6.3
# rbenv rehash
bundlerはRailsを動かすために最低限必要なのでインストールします。
# gem install bundler --no-doc
最新の Rails をインストールする
# gem install rails
次次ぃ!
Dockerインストール
関連パッケージのインストール
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dockerとdocker ceのインストール
最新バージョンのdocker ceをインストールします。
# yum install -y docker-ce docker-ce-cli containerd.io
Dockerの起動と自動起動設定、dockerバージョン確認
# systemctl start docker
# systemctl enable docker
# systemctl status docker
# docker --version
Dockerのプロキシ設定(必要に応じて)
# mkdir -p /etc/systemd/system/docker.service.d
# vi /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://<your_proxy_ip>:<your_proxy_port>/"
# vi /etc/systemd/system/docker.service.d/https_proxy.conf
[Service]
Environment="HTTPS_PROXY=http://<your_proxy_ip>:<your_proxy_port>/"
# systemctl daemon-reload
# systemctl restart docker
補足1 『docker: Error response from daemon』とエラーがでたら、、
起動確認で『docker run hello-world』を実行してみるもエラーが出てしまいちょいハマり。。。
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'docker run --help'.
『docker info』にてdockerのコンフィグ内容を確認してみると、先程設定したはずのプロキシー設定が反映されていない
[root@localhost ~]# docker info
Client:
Debug Mode: false
<中略>
Docker Root Dir: /var/lib/docker
Debug Mode: false
★★★本来はこのあたりにプロキシ設定が表示される★★★
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
結果からいうと、http_proxy.confの記載内容に誤りがありました。
[service]
↓
[Service] ###Sは大文字
※viコマンドで改行を含む文章をコピペした時に、文頭の数文字が途切れてしまう現象どうにかならないかな。。。
他にも同様のエラーが起こった際には、DNSの設定やサーバ再起動によってなおる例もあるようです。
補足2 試しにNegixイメージを動かしてみる
Dockerをきちんと触ったことがなかったので、試しにNginxをインストールして起動させてみる。
NginxのDockerイメージを取得
# docker pull nginx
取得したNginxイメージを使用してコンテナを起動
# docker run -d --name nginx-container -p 8181:80 nginx
ブラウザに下記URLでアクセス
http://<作成したインスタンスのIPアドレス>:8181/
ドキドキ、、、
でけたー!!!すげー!!!簡単ー!!!!(小並感)
docker-composeインストール
# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
Docker Composeが使用できるか確認
# docker-compose --version
docker-compose version 1.21.2, build 1719ceb
Terraformインストール
Terraformの概要理解はこちらの記事が大変参考になりました。
Terraform - 仕組みと導入部分を簡単にまとめてみる
導入はこちらの記事を参考に
Terraform - CentOS 7 に Terraform をインストールして AWS へ接続
環境構築はここで終わり
以降は元記事の内容を進めていこうと思います。
進めた上での感想などはまた記載しますね!