Category Archives: docker

docker imageの作成及び、docker hubへのpush

image作成、 docker-hubへのpush

docker build -t {yoheimiyamoto/imageの名前} -f {Dockerfile名} .
docker login
docker push yoheimiyamoto/{imageの名前}

イメージの利用

services:
  app:
    # build: .
    image: yoheimiyamoto/rails-app // docker-hubにpushしたimageを指定

docker rails batch

Dockerfile

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

docker-compose.yml

version: '2'
services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    # command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

source 'https://rubygems.org'
gem 'rails', '4.2.6'

Gemfile.lock

ブランク

railsアプリ作成

docker-compose run web rails new . --force --database=mysql --skip-bundle

db設定変更

version: '2'
services:
  db:
    image: mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

image作成

docker-compose build

実行

docker-compose run web rake db:create
docker-compose run web rails c

docker httpd テスト

Dockerfile

FROM centos:latest
RUN yum -y install httpd
CMD /usr/sbin/httpd -D FOREGROUND
ADD . /var/www/html

htmlファイル

./index.html

hello

dockerコマンド

// image作成
docker build -t httpd-test .

// imageが作成されていることを確認
docker images

// コンテナ起動
docker run -d -p 80:80 httpd-test

// ip確認
docker-machine ip

// 画面確認
http://192.168.99.100/ にアクセス

bash接続

// 接続
docker run -i -t httpd-test /bin/bash

// bash接続時にコンテナが起動していることも確認できる
CA1556:httpd-test 00990310$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
42467f9b45f6        httpd-test          "/bin/bash"         5 seconds ago       Up 2 seconds                            elated_sammet

備考

image作成後に、index.htmlの内容を変更しても、反映されてない。
index.htmlファイルもimageの中に格納されている

docker build

Dockerfile

FROM ubuntu
ADD . /

/hello.txt

hello!

build

// imageが生成される
docker build -t ubuntu-test .

コンテナ起動

docker run -it --name ubuntu-test ubuntu-test
cat hello.txt // hello!が確認できる

注意点

hello.txtの内容を変更した場合、再度、buildしてイメージを作成し、docker runをし直す必要がある。

docker rails

事前準備

以下のファイルをルートに作成
* Dockerfile
* Gemfile
* Gemfile.rock
* docker-compose.yml

パスを通す

eval "$(docker-machine env default)"

Dockerfile

node.jsも必要

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

docker-compose.yml

version: '2'
services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

Gemfile

source 'https://rubygems.org'
gem 'rails', '4.2.6'

Gemfile.lock

ブランクでOK

database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  host: db

development:
  <<: *default
  database: myapp_development

メソッド実行

// ローカルにアプリケーション作成。ローカルにアプリケーションを作成するためのコンテナも作成される。(webコンテナとは別)
docker-compose run web rails new . --force --database=mysql --skip-bundle

// build
docker-compose build

// db作成
docker-compose run web rake db:create

サイト確認

192.168.99.100:3000

dbに接続

myapp_development dbが作成されていることを確認できる

mysql -h 192.168.99.100 -P3306 -u root

コンテナにbash接続

docker exec -it {コンテナID} bash

参考

http://blog.toshimaru.net/docker-compose-rails/
https://docs.docker.com/compose/rails/

docker wordpress

dataonly コンテナの作成

Dockerfile

FROM busybox
MAINTAINER 0.1 yoheimiyamoto@gmail.com
VOLUME /var/lib/mysql

イメージ作成

docker build -t busybox .

コンテナ作成

docker run -it --name dataonly dataonly

docker-compose.yml

webserver:
 image: wordpress

 ports:
  - "80:80"

 links:
  - "dbserver:mysql"

dbserver:
 image: mysql

 volumes_from:
  - dataonly

 environment:
  MYSQL_ROOT_PASSWORD: password

 ports:
  - "3306:3306"

コンテナ群の作成

docker-compose up -d

確認

コンテナ

wordpressのwebサーバーとmysqlサーバーの2つが立ち上がっているのを確認できる

docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
be43120ef473        wordpress           "docker-entrypoint.sh"   13 seconds ago      Up 11 seconds       0.0.0.0:80->80/tcp   wordpress_webserver_1
270ee02a790f        mysql               "docker-entrypoint.sh"   13 seconds ago      Up 12 seconds       3306/tcp             wordpress_dbserver_1

webページ

wordpressのページが表示されていることが確認できる

192.168.99.100

db

以下でmysqlにも接続できる

mysql -h 192.168.99.100 -u root -p password

docker

基本コマンド

// 作成済みのコンテナ一覧表示
docker ps -a

// 開始
docker start {container_id}

// 終了
docker stop {container_id}

// 接続
docker attach {container_id}

// コンテナに入る
docker exec -it {container_id} bash