- David Schovanec
- Prague Ruby Meetup 20.4.2017
- virtualizace
- minimální vrstva
- sdílení prostředků (hw) s hostem
- izolace
- engine
- Docker samotný
- již nativní podpora Win, OSX
- instalace pro různé OS
- image
- předloha kontejneru, která lze spustit v Dockeru
- Dockerfile
- deklarativní popis image
- container
- instance jednoho image
-
- 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)
- 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
- 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 ...
-
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
- v
-
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