ubuntu上のdocker-composeのバージョンをあげる方法

久しぶりに一本書きます。

which docker-compose //docker-composeの場所を調べ、以下コマンドで最新版に置き換える
sudo curl -L "https://github.com/docker/compose/releases/download/1.16.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo docker-compose version

docker-compose version 1.16.1, build 6d1ac21
docker-py version: 2.5.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

あんま文献なくて、1時間ほどはまったのでひとまず。

docker-composeを使用し、最速でrails5+postgresqlを導入する

Gakuです。

ひっっさしぶりのrailsです!
会社でrails5を使用したWebシステムの構築を検討しているため、ひっさしぶりにrailsを触ることになりました。
以前のようにvagrantで開発環境を構築してもいいのですが、めんどうです。
また、他の開発者にも速攻で開発環境を導入できるということからdockerを使用して開発環境を構築してみました。

前提

これはdockerとdocker-composeが既に導入されていることを前提に進めていきます。
まだ入れていないよ〜という方は、こちらの記事を参考にして導入してみて下さい。
[blogcard url=”https://www.gakusmemo.com/?p=812″][/blogcard]

構築

ファイル構成

./
|-docker-compose.yml
|-web/
|  |-Dockerfile
|-app/    //共有フォルダ

以上です。

docker-compose.ymlの編集

docker-compose.ymlを以下のように編集します。

version: "3"

services:
  web:
    build: web
    ports:
      - "3000:3000"
    links:
      - db
    volumes:
      - "./app:/app" #共有フォルダの設定(ホストdir:クライアントdir)
    stdin_open: true
  db:
    image: postgres
    expose:
      - "5432"

volumesの部分はホストとクライアントのフォルダを共有する設定になっています。
このフォルダ以下にrailsappを作成していくため、適宜お好きなところに変更して下さい。

Dockerfileの編集

次にrailsを導入するdockerコンテナのDockerfileを編集します。

FROM ruby:2.4

RUN apt-get update && apt-get install -y build-essential libpq-dev postgresql-client
RUN gem install rails
RUN mkdir /app
WORKDIR /app

railsとpostgresの接続系ライブラリを導入しています。
また、ここでホストフォルダと共有するappフォルダも作成しておきます。

設定は終わりです( ´Д`)y━・~~

railsappを作成してみる

とりあえず、おきまりの以下のコマンドで各コンテナを起動します。

docker-compose build
docker-compose up -d

これでコンテナが立ち上がったはずです。
立ち上がったrailsコンテナに以下コマンドでログインします。

docker-compose exec web bash

ここまでくればrailsのいつもの作法です。
あとはrailsのアプリケーションを作成し、そのままではGemのエラーが出るので修正、bundle installしてrails起動!

rails new app -d postgresql
source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.2'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# Use Puma as the app server
gem 'puma', '~> 3.7'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'therubyracer', platforms: :ruby #ここのコメントを外す!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '~> 2.13'
  gem 'selenium-webdriver'
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end
bundle install
rails s -b 0.0.0.0

そしたら、ホストPCのブラウザでlocalhost:3000にアクセスして

Yay!!!!!( ^ω^ )b

おわりに

dockerの設定は多少めんどくさいかもしれませんが、一度作成しておけば以後設定する必要はありません。
docker関連のファイルを共有しておけば、他の開発者が開発環境を構築する際、最速で構築可能です。

dockerは難しく、勉強コストも結構かかるとは思います。
ただ、一度勉強してしまえば「最速」でいろいろな環境が構築できるので、お得感の高いツールだなと思うこの頃。

docker使ってredmineプラグイン作り

Gakuです。

最近、業務でredmineを使用しており、かんばんを使用するのにbacklogsプラグインでは使い勝手が悪いため、redmineプラグインを自作してみようと考えました。
(※開発業務ではなく、一般の業務をタスク管理する上でsprintは不要ですし、sprint組まないとかんばん出ないのは使い勝手悪い。)
dockerで環境構築を行い、ホストOSからpluginを新規作成するところまでの備忘録を掲載します。

docker-compose.yml,Dockerfile

docker-compose.ymlとredmineのDockerfileは以下のように作成しました。

version: '2'

services:
  redmine:
    build: redmine
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_POSTGRES: postgres
    links:
      - postgres:postgres
    volumes:
      - ./redmine/plugins:/usr/src/redmine/plugins
  postgres:
    restart: always
    image: postgres
FROM redmine

Dockerfileいらないですね。( ´Д`)
まぁ、今後の拡張性考えて作っておきます。

volumeの設定

上記docker-compose.yml内でvolumeを設定していますので、それに合わせて、/redmine/pluginsフォルダを作成します。
これで一旦

docker-compose up -d


余裕のredmine起動( ^∀^)b

redmineプラグインの新規作成

redmineプラグインを作成するのも簡単です。
以下コマンド1発です。

docker-compose exec redmine bundle exec rails generate redmine_plugin Sample

これでホストOSの/redmine/pluginsフォルダにSampleプラグインが作成されたと思います。
あとは、これをredmineに反映させるため、

docker-compose stop && docker-compose up -d

でリスタートかけて、redmineのplugin一覧を確認して表示されてればOKです。

イージーゲーム( ´Д`)y━・~~

おわりに

ちょっとずつ育てていきますw
いい感じに作れたらフリーミアムな感じで販売も考えています。

それにしても、docker便利っすね〜。vagrantで一から環境作ろうと思ったんですが、めんどくさくてdockerに切り替えたらものの30分でここまで完了。。。
なんて素晴らしき世界。。。( ´Д`)y━・~~

ubuntuにdockerとdocker-composeをインストールする

gakuです。

サーバ構築絡みでもう一件投稿します。
ubuntu16.04(64bit)版にdockerをインストールする手順を覚え書き程度に書いてきます。

インストール方法

apt-get update

とりあえず、updateします。

sudo apt-get update

必要pkgインストールとGPG鍵の入手

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

レポジトリの取得&dockerのインストール

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce

インストール確認

sudo docker version

Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:14:09 2017
 OS/Arch:      linux/amd64
 Experimental: false

OKぃ(´・ω・`)b

docker-composeのインストール

ついでにdocker-composeもインストールしておきます。

sudo apt-get install docker-compose

インストール確認

sudo docker-compose version

docker-compose version 1.8.0, build unknown
docker-py version: 1.9.0
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016

完璧んダック(´・ω・`)b

おわりに

最近、勤め人に戻りました。
毎朝5時おき、電車の中で1時間、会社付近のカフェで1時間半実装しているのですが、かなりはかどります(´・ω・`)
ニート時代に構築していたプライベート実装ももう少しで落ち着きそうなので、それ終わり次第、仕事で使いそうなTensorFlowを触って、新しいモダンなWEBサイトを構築しようかと妄想中です。

とりあえず言えること。
「conohaちゃん可愛い(*´﹃`*)」

以上です。

docker-composeを使って複数コンテナの管理を簡易化する

Gakuです。

前回はdockerを使用し、railsコンテナとpostgreSQLコンテナを立ち上げ連携する方法を掲載しました。
[blogcard url=”http://160.16.72.126/?p=569″][/blogcard]

今回はdocker-composeなるものを導入し、複数コンテナの管理を簡易化したいと思います。

docker-composeとは何ぞ?

ここらへんの記事をみると幸せになれるかもしれません。
[blogcard url=”http://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce”][/blogcard]

複数コンテナを1コマンドで立ち上げたり、docker run時のめんどうなオプションを記述して管理できる仕組みです。

ファイル構成

ファイル構成は下記のような感じで構成します。

.
├── docker-compose.yml
└── rails
    └── Dockerfile

Dockerfileは前回と同様のDockerfileを使用しております。

docker-compose.ymlの編集

postgreSQLとrailsコンテナを管理するため、docker-compose.ymlを下記のように編集します。

postgres0:
  image: postgres:9.5.4
  ports:
    - 5432:5432
rails:
  build: rails
  ports:
    - 3000:3000
  volumes:
    - /Users/gaku/Documents/develop/projects:/usr/src/docker-rails-test
  links:
    - postgres0:postgres0
  tty: true

設定内容はdocker run時のオプションと似ているのでとっつきやすいかと思います。

これで準備完了です( ^ω^ )

実行してみる

実行はすごく簡単です。

docker-compose build //イメージの作成
docker-compose pull  //イメージのダウンロード
docker-compose up -d //コンテナの生成

たったこれだけです。
3コマンドで全てのコンテナのイメージ作成からコンテナ生成までやってくれます。
こ。。。これがdockerの強さか。。。

後片付けのコマンド

コンテナの後片付けもすごく簡単です。

docker-compose stop //全てのコンテナの停止
docker-compose rm   //全てのコンテナの削除

今まで一つ一つコンテナを削除していたのですが、これで一気に削除できます。
う〜ん。きもちぃε-(´∀`; )

/bin/bashが起動できない

今までdocker run -it コマンドでbashを立ち上げる設定をしていたのですが、docker-composeには-i相当の機能がないらしい。
(-tはdocker-composeのtty:trueの記述が該当している。)

なので、docker-composeで/bin/bashを立ち上げる場合、下記コマンドで実行してあげる必要がある。

docker exec -it <コンテナID> bash

おわりに

docker-composeを知るまで、

「dockerめんどくせぇな〜。vagrant+virtualBOXのが良いんじゃね(´q` )」
って思っていましたが、今回composeやってみて世界が変わりました。

dockerで設定すれば、もう環境構築ほとんどやらんでええやん!すばらしき世界!

2日間dockerを触ってきて、だいたいのことはできるようになりました。
今度はheroku上のdocker-herokuなるもので、herokuへのUPを試みたいと思います( *`ω´)

DockerでpostgreSQLを導入しrailsと連携する

Gakuです。

前回までで、Dockerfileからrails環境を構築する方法を掲載してきました。
[blogcard url=”http://160.16.72.126/?p=562″][/blogcard]

今回はpostgreSQLコンテナを作成し、railsコンテナと連携する方法を掲載したいと思います。

postgreSQLコンテナの準備

下記コマンドを実行することで、postgreSQLコンテナを作成できます。

docker pull postgres:9.5.4
docker run --name pos-con -p 5432:5432 -d postgres

簡単すぎる( ^ω^ )

railsコンテナの準備

下記コマンドを実行しrailsコンテナを作成します。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test --name railstest --link pos-con:pos-con  gaku/rails

(※–linkオプションが今回の肝です。)

で、仮想環境へアクセスされると思うので、対象のフォルダでrails newします。

rails new postgretest -d postgresql

これで準備完了です。

database.ymlを編集しpostgreSQLとコネクトする

railsのdatabase.ymlのdefault部分を下記のように編集し、postgreSQLコンテナとドッキングします。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: pos-con
  username: postgres

下記コマンドでエラーが出ずdatabaseが作成されれば完了です。

rails db:create

おわりに

案外簡単にpostgreSQLとrailsの連携が可能でした。
今までは単体で起動していた各コンテナを、まとめて立ち上げることが可能なdocker-composeなるものを触ってみようと思います。( ^ω^ )

Dockerでrails環境を構築する

Gakuです。

前回の記事で、Dockerfileを作成しrubyコマンドを実行するところまで備忘録として残しました。
[blogcard url=”http://160.16.72.126/?p=557″][/blogcard]

今回はそのDockerfileを編集し、rails環境を構築します。

Dockerfileを編集

Dockerfileを以下のように編集し、rails環境構築用Dockerfileを作成します。

vi Dockerfile
FROM ruby:2.3.1

ENV APP_ROOT /usr/src/docker-rails-test

#Workディレクトリの設定
WORKDIR $APP_ROOT

#apt-getでtoolのインストール
RUN apt-get update && \
        apt-get install -y nodejs && \
        apt-get install -y vim

#rails導入
RUN gem install --no-ri --no-rdoc rails -v 5.0.0.1

#docker runの-pのヒント これでポート解放されるわけではない
#あくまで道しるべ
EXPOSE 3000:3000

#bashの立ち上げ
CMD ["/bin/bash"]

これで準備完了です( ^ω^ )

railsコンテナを立ててみる

作成したDockerファイルをビルドしてイメージを作成します。

docker build -t gaku/rails .

作成したイメージからコンテナを作成する。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test gaku/rails

そしたら仮想環境へアクセスする形となるので、いつもどおりrailsアプリケーションを作成してアプリケーションを立ち上げる

rails new test1
cd test1
rails s -b 0.0.0.0

docker-machineのipを確認しておき、そのipでホストPCのブラウザよりアクセスする。
スクリーンショット 2016-08-16 10.21.42

おつかれさまでした〜( ^ω^ )

作成したコンテナを操作する

一旦exitコマンドでコンテナを抜けるとコンテナが終了してしまう。
その際はコンテナを起こしてあげて、アクセスする必要がある。
下記コマンドで上記操作は可能です。

docker start コンテナID
docker attach コンテナID

おわりに

完全にDockerfileのCMDコマンドではまりました。。。つらかった。
CMDでbashを立ち上げるように設定するのがミソですね。
また、docker run時にいろいろなオプションを付けるのですが、その点をミスらなければすんなりrailsの導入は可能です。
次回はDBをpostgreSQLへ変更した場合の対処法などを掲載したいと思ってます。

docker上のrubyでHello World出力してみる

rubyのベースイメージをダウンロードする

Docker上でrubyを実行するために、DockerHubからrubyのイメージをダウンロードします。
下記コマンドでダウンロード可能です。

docker pull ruby:2.3.1

で、プロジェクトフォルダを作成して遷移します。

mkdir docker-rails-test
cd docker-rails-test

test用にtest.rbを作成します。

vi test.rb
puts "Hello World☆*:.。. o(≧▽≦)o .。.:*☆"

これで準備完了です。

docker runコマンドでrubyコードを実行してみる

下記コマンドでdocker上のrubyで先ほど作成したtest.rbを実行してみます。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 ruby test.rb

このコマンドでコンテナを作成することが可能です。
コンテナは作成すると永遠に残り続けるのですが、–rmをつけることで、コマンド実行後コンテナを削除することが可能です。(一時的にコンテナを作成したい時に有効なオプションですね。)
また、-vをつけることでホストコンピュータとdocker上のフォルダを共有フォルダとして設定することが可能です。
今回は
【”$PWD”:/usr/src/docker-rails-test】
としましたが、
【ホストマシンフォルダ:docker上のフォルダ】
でマウントしています。
-wはワーキングフォルダを設定するためのオプションでdocker上の/usr/src/docker-rails-testで作業をしたいため、このオプションをつけております。

その後ろに、イメージ名である「ruby:2.3.1」を記述し、その後ろにrubyの実行コマンドを記述しております。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 ls -a
docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 pwd

などのコマンドを実施すれば理解が深まるかもしれません。

Dockerfileからrubyファイルを実行してみる

dockerは先ほどダウンロードしたruby:2.3.1のイメージをベースにして、様々な環境をカスタマイズすることが可能です。
その設定をDockerfileというファイルに記述し作成するのですが、その作業を行ってみたいと思います。
とりあえず、Dockerfileを作成して、下記のように記述してみます。

vi Dockerfile
FROM ruby:2.3.1

はい。これでDockerFileの準備が完了しました。

Dockerfileをビルドして作成したイメージからrubyコマンドを実行してみる。

さきほど作成したDockerfileをビルドします。

docker build -t my-ruby-app .

これで、my-ruby-appという名前でimageが作成されました。
docker imagesとコマンドを実行すると作成したimageが存在しているのがわかります。

作成したimageからrubyコマンドを実行するために下記コマンドを実行してみます。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test  my-ruby-app  ruby test.rb

簡単ですね☆*:.。. o(≧▽≦)o .。.:*☆

おわりに

なんとな〜くですが、Dockerさんと仲良くなれてきた気がします。
今度はDockerfileを編集してrailsを導入したいな〜っと思ってます。

docker-machineを自動起動するように設定する

dockerを起動する際、毎回毎回下記コマンドを実行するのはめんどうくさいです。

docker-machine start
eval "$(docker-machine env default)"

ってことで自動化します。

ホストマシン起動時にdocker-machineを自動起動する設定

~/Library/LaunchAgents以下に[com.docker.machine.default.plist]という名前でファイルを作成し、下記内容を記述します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
        </dict>
        <key>Label</key>
        <string>com.docker.machine.default</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/docker-machine</string>
            <string>start</string>
            <string>default</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

これでホストマシン起動時に自動でdocker-machineが立ち上がります。
また、defaultとなっている部分を編集すれば、任意のdocker-machineを自動起動することが可能です。

環境変数の設定

下記コマンドを実行し、bash_profileに書き込みます。

echo 'eval "$(docker-machine env default)"' >> ~/.bash_profile

以上です。これでホストマシン起動時にdocker-machineを自動起動し、環境変数を設定してくれます。

注意点

ホストマシンを起動して、すぐにターミナルを起動するとdocker-machineが起動していない状態で環境変数を通しに行ってしまうためエラーが発生してしまいます。
スクリーンショット 2016-08-15 10.27.22

このエラーが発生した場合、少し待ってから再度ターミナルを起動すれば正常に環境変数が適用されます。

おわりに

こういうの楽しいね。好きだわ〜( ^ω^ )

「Cannot connect to the Docker daemon. 」と怒られる時の対処法

Gakuです。

docker runコマンドを実行しようとすると「Cannot connect to the Docker daemon. Is the docker daemon running on this host?」と出て怒られたのでその対処法を備忘録として残します。

そもそもこのエラーは何?

「Cannot connect to the Docker daemon. Is the docker daemon running on this host?」
日本語訳:Dockerが立ち上がってますか?dockerデーモンにconnectできないんだけど
って怒られる。

この症状は様々な要因が考えられるが、僕の場合、dockerをインストールしたユーザと別ユーザでdocker runコマンドを実行しようとしたため、エラーが発生した。

再度docker toolboxをインストールしてみる

この記事で書いたように、再度dockerをインストールしてみます。
[blogcard url=”http://160.16.72.126/?p=532″][/blogcard]

しかし、これだけではやはりさきほどのエラーが出力されてしまい解決できませんでした。

docker machineが立てられていない?

docker-machine start

を実行したところ、以下エラーが出力されました。

Error: No machine name(s) specified and no "default" machine exists.

「名前を指定しない場合はdefaultのマシンを立ち上げるけど、defaultのマシンは存在しないよ」
的なエラーが出力されました。
ここにピンときて、「docker-machineなるものが必要なのか?」
ってことで、調べて下記コマンドを実行してみました。

docker-machine create --driver virtualbox default
eval "$(docker-machine env default)"

これで再度「docker run hello-world」で正常に出力することが可能となりました。

おわりに

とりあえず解決しましたが、まだまだ理解力が足りないため、あらゆるところではまりそうです。
このエラーが出たら「docker-machine ls」でマシンが立ち上がっているかどうか確認するのは有効な手段であると思います。