Skip to content

Instantly share code, notes, and snippets.

@schovi
Created April 21, 2017 21:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save schovi/c69bcf5b551d476933b94c7250b5735e to your computer and use it in GitHub Desktop.
Save schovi/c69bcf5b551d476933b94c7250b5735e to your computer and use it in GitHub Desktop.
Docker crashcourse - Prague Ruby Meetup 20.4.2017

Docker rychlokurz

  • David Schovanec
  • Prague Ruby Meetup 20.4.2017

Co je Docker?

  • virtualizace
  • minimální vrstva
  • sdílení prostředků (hw) s hostem
  • izolace

Části Dockeru

  • engine
  • image
    • předloha kontejneru, která lze spustit v Dockeru
  • Dockerfile
    • deklarativní popis image
  • container
    • instance jednoho image

Spuštění existujícího image

  • Docker Hub

    • stejné jako github
    • publikování svých images
    • použití cizích images
  • chci ve svém Rails projektu použít technologii, kterou nemám nainstalovanou, nevím jak ji nainstalovat, nebo ji nechci instalovat

redis "repozitář"

  • docker run redis
  • docker run -p 6379:6379 --name meetup-redis redis
  • docker run -d -p 6379:6379 --name meetup-redis redis

mariadb "repozitář"

  • docker run mariadb:10.0 (jednoduše použiji i starší verzi)

  • docker run -d -e MYSQL_ALLOW_EMPTY_PASSWORD=1 -p 3306:3306 --name mariadb mariadb:10.0

  • tagy mariadb, mariadb:latest, mariadb:10, mariadb:10.1 (trochu podobné jako semver)

Vytvoření vlastního image s Rails aplikací a jeho spuštění

  • Používá se tzv Dockerfile
  • specifická syntax
    • ADD, COPY, FROM, RUN, WORKDIR, ...
FROM ruby:2.4

#RUN apt-get update -qq && apt-get install -y build-essential

RUN mkdir /app
WORKDIR /app

COPY Gemfile* /app/
RUN bundle install

COPY . /app

CMD rm tmp/pids/server.pid && rails server -b 0.0.0.0
  • Vytvoření image z Dockerfile s tagem

    • docker build -t meetup/app .
  • Spuštění containeru

    • docker run -e "DATABASE_URL=mysql2://root@db:3306/app" --link mariadb:db -p 3000:3000 --name app meetup/app
  • Vytvoření databáze

    • docker exec app rails db:create
  • Spuštění konzole

    • docker exec -it app rails c
  • Generování scaffoldu

    • docker exec app rails generate scaffold MeetupAttendee name:string bio:text age:integer
    • !!!!!!!
  • Spuštění se synchronizací externí složky

    • --volume /Users/schovi/work/docker-meetup/app:/app
    • docker run -e "DATABASE_URL=mysql2://root@db:3306/app" --link mariadb:db -p 3000:3000 --name app --volume /Users/schovi/work/docker-meetup/app:/app meetup/app

Docker compose

  • Vše předchozí lze deklarativně zapsat a spouštět jednoduše pomocí nástroje docker-compose
version: '3'

services:

  web:
    build: .
    environment:
      DATABASE_URL: mysql2://root@db:3306/app
    volumes:
      - ./app:/app
    ports:
      - 3000:3000
    links:
      - mariadb:db

  mariadb:
    image: mariadb:10.0
    ports:
      - 3306:3306
    volumes:
      - ../data:/var/lib/mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 1

  • docker-compose build
  • docker-compose up
  • docker-compose exec app ...

Něco navíc

  • docker-compose nativně podporuje nahrávání env variables z .env

    • v docker-compose.yml např - ports: - ${PORT}:${PORT}
    • do kontejneru je pak protlačíte pomocí env_file: .env
  • standalone runner

#! /bin/bash

docker run --name docker-ruby -w /app -v $PWD:/app ruby:2.4 ruby $@
docker stop docker-ruby > /dev/null
docker rm docker-ruby > /dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment