LoginSignup
4
4

More than 3 years have passed since last update.

今話題のDocker + Rails + Circle CI + Terraform構成を試したいんじゃ!

Last updated at Posted at 2019-12-06

概要

Docker + Rails + Circle CI + Terraformでインフラをコードで環境構築 & ECSへ自動コンテナデプロイ
上記ページを閲覧してみて心が踊ったので、実際に試そうと思ったけど
そもそもチュートリアルの環境がないので1から作ってみたメモ。
いや、ほんにこういう記事ってありがたいよね。としみじみ。

これからやること

・(主にサーバーサイドの)アプリをDockerを使って環境構築して
・terraformでインフラの構成をコード化して
・(Kubernetesなどのコンテナオーケストレーションツールを用いて)なるべく開発環境との差異が無いままコンテナデプロイをして
・CircleCIでテストからデプロイまで自動化
※引用

今の現場だと触ることのできない構成(=ナウい構成)なのでワクワクしながら始める。
本記事では元記事のページ内容を実行できる環境を構築していきます。
拙い内容になるかと思いますので、修正点などありましたらコメントお願いします。

用語集

普段はインフラ構築(物理サーバ、スイッチ)の構築をメインとしているので
まずは知らない用語を調べてみる

rbenv とは?

Ruby のバージョンを管理してくれるバージョン管理システム

rbenv を利用した Ruby 環境の構築

ruby-build とは?

rbenv のプラグイン
rbenv install コマンドを提供する rbenv のプラグインとして利用できます。

rbenv + ruby-build はどうやって動いているのか

gemとは

ruby用のライブラリ(宝石)
ルビーとか宝石とか名前の付け方がいちいちおしゃれ

Bundllerとは

gemの管理に使用(方向性がyumに似ているイメージ)
gem同士の互換性を保ちながらパッケージの種類やバージョンを管理してくれる仕組みのこと。

Bundlerとは?

環境構築

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の環境設定

/etc/profile.d/rbenv.sh
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/

ドキドキ、、、

image.png

でけたー!!!すげー!!!簡単ー!!!!(小並感)

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 へ接続

環境構築はここで終わり

以降は元記事の内容を進めていこうと思います。
進めた上での感想などはまた記載しますね!

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4