Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ahastudio/71aa03a278df6fd0be8d to your computer and use it in GitHub Desktop.
Save ahastudio/71aa03a278df6fd0be8d to your computer and use it in GitHub Desktop.

Production 환경에서 MariaDB 사용하기

MySQL 세팅과 동일하다.

$ vi Gemfile
group :development, :test do
  # Use sqlite3 as the database for Active Record
  gem 'sqlite3'
end

group :production do
  gem 'mysql2'
end
$ bundle
$ vi config/database.yml
production:
  adapter: mysql2
  encoding: utf8
  database: <%= ENV['DB_DATABASE'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host: <%= ENV['DB_HOST'] %>
  port: <%= ENV['DB_PORT'] %>

Docker Machine

https://www.docker.com/docker-machine

$ brew update
$ brew install docker docker-machine
$ brew cask install virtualbox
$ docker-machine create --driver virtualbox dev
$ docker-machine ls
$ eval "$(docker-machine env dev)"
$ docker -v

에러가 발생하면... Error response from daemon: client is newer than server (client API version: 1.21, server API version: 1.20)

$ docker-machine upgrade dev

Docker 이미지를 이용해 컨테이너 띄우기

$ docker run busybox echo hello world
$ docker images
$ docker ps
$ docker ps -a
$ docker run -it ubuntu:14.04 bash

MariaDB

https://hub.docker.com/_/mariadb/

$ docker run --name mariadb -e MYSQL_ROOT_PASSWORD=password -d mariadb
$ docker ps
$ docker run -it --link mariadb:mysql ubuntu:14.04 bash
# env | grep MYSQL_
# apt-get install mysql-client -y
# mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uroot -p$MYSQL_ENV_MYSQL_ROOT_PASSWORD
mysql> CREATE DATABASE my_test_db CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> exit

Dockerfile

$ vi Docker
FROM ubuntu:14.04

WORKDIR /tmp

RUN apt-get update                                                  && \
    apt-get upgrade -y                                              && \
    apt-get install -y curl git-core build-essential nodejs         \
                       autoconf bison libssl-dev libyaml-dev        \
                       libreadline6-dev zlib1g-dev libncurses5-dev  \
                       libffi-dev libgdbm3 libgdbm-dev              \
                       libmysqlclient-dev                           && \
    rm -rf /var/lib/apt/lists/*

RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv     && \
    git clone https://github.com/sstephenson/ruby-build.git         \
              ~/.rbenv/plugins/ruby-build                           && \
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc        && \
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc                      && \
    export PATH="$HOME/.rbenv/bin:$PATH"                            && \
    rbenv install 2.3.0                                             && \
    rbenv global 2.3.0                                              && \
    eval "$(rbenv init -)"                                          && \
    gem update --system                                             && \
    gem install bundler                                             && \
    rbenv rehash                                                    && \
    rm ruby-build.*.log

ENV RBENV_ROOT /root/.rbenv
ENV PATH $RBENV_ROOT/bin:$RBENV_ROOT/shims:$PATH

ADD Gemfile /tmp/Gemfile
ADD Gemfile.lock /tmp/Gemfile.lock

RUN bundle install --binstubs --without development:test

ADD . /webapp

RUN mv /tmp/.bundle /webapp/  && \
    rm -rf /webapp/bin        && \
    mv /tmp/bin /webapp/

WORKDIR /webapp

ENV RAILS_ENV production

CMD export DB_DATABASE=my_test_db                     && \
    export DB_USERNAME=root                           && \
    export DB_PASSWORD=$MYSQL_ENV_MYSQL_ROOT_PASSWORD && \
    export DB_HOST=$MYSQL_PORT_3306_TCP_ADDR          && \
    export DB_PORT=$MYSQL_PORT_3306_TCP_PORT          && \
    bin/rake assets:precompile                        && \
    bin/rake db:migrate                               && \
    bin/puma

EXPOSE 9292

Docker 이미지 만들고 실행하기

$ docker build -t web .
$ docker images
$ docker run -it --link mariadb:mysql web bash
$ docker run --name web --link mariadb:mysql -p 80:9292 -e SECRET_KEY_BASE=this-is-secret -d web
$ docker logs web
$ docker exec -it web bash
# tail -f log/production.log

웹 브라우저로 열어서 보기

$ open http://`docker-machine ip dev`/posts

Docker 컨테이너 종료

$ docker ps
$ docker stop web
$ docker rm web
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment