🐳 Dockerとは、コンテナを動かすためのオープンソースソフトウェアです。
コンテナの中身(Dockerイメージ)を作る仕組みや、コンテナの実行環境を提供しています。
Dockerイメージとは、コンテナとして動かすOSとアプリケーションをまとめたものです。
軽量でどこでも同じように動くという特徴があるため、アプリケーションを配布するのに向いています。
Docker Hub というWebサイトがあり、様々なDockerイメージが公開されています。
- 巷で話題のDockerとは?
- Containers As A Service (CaaS) As Your New Platform For Application Development And Operations
Dockerfileを使えば、Dockerイメージを簡単に作ることができます。
ベースとなるイメージを指定し、イメージを作るために必要なコマンドを記述します。
例えば、 Ubuntu 上で hello-world.rb
というスクリプトを動かすコンテナを考えます。
Rubyをインストールして、スクリプトをコンテナに追加するだけで完成です。
- hello-world.rb
puts "Hello World!"
- Dockerfile
FROM ubuntu:16.04 RUN apt-get update && \ apt-get -y upgrade && \ apt-get -y install ruby ADD hello-world.rb . CMD ruby hello-world.rb
$ docker build -t hello-world .
$ docker run hello-world
Dockerでは、メンテナンス性を高めるために、コンテナで実行する機能を小さくしようと言われています。
例えばWebアプリケーションの場合、アプリ用のコンテナと、データベース用のコンテナは分けることが多いです。
このように複数のコンテナで構成されるサービスを動かしたいときに便利なのが Docker Compose です。
Docker Composeを使うことで、複数のコンテナを一度に起動できるだけでなく、依存関係の解決もしてくれます。
(先にデータベース用のコンテナを起動してから、アプリ用のコンテナを起動するなど。)
起動するコンテナとその設定は docker-compose.yml
というYAML形式のファイルに記述します。
例えば web
と database
というコンテナを起動する場合は、以下のような内容になります。
web
では8080番ポートが接続され、カレントディレクトリが /code
にマウントされます。
また、 web
が依存する database
が先に起動されます。
version: '2'
services:
web:
build: .
ports:
- "8080:8080"
volumes:
- "$PWD:/code"
depends_on:
- database
database:
image: mysql