@ytnobody
--
- @ytnobody [わいとんぼーい]
- あずまさとし
- 主催者です
- Perlかいたりします
- PAUSE:YTURTLE
今日はPerlの成分が少なめです。
--
でもPerlの質問はじゃんじゃんしてくださいね!
--
wikipediaによると・・・
Docker(ドッカー)はソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソースソフトウェアである。
--
--
Dockerにおいては、
-
アプリケーションを収めこむ環境としてコンテナというものがある
-
コンテナはLinuxが稼働する「一種の仮想環境」と言える
-
アプリケーションの動作に必要な諸々の設定等を自動化することができる
--
--
- 環境をぶっ壊してもいくらでも作り直せる
- 既存の環境を汚さないし、コンテナ内ではroot
- とにかくシンプルなので、よりアプリケーションに注力できる
- 流行っている
- 基本は意外と簡単
- そんなに覚えること多くないよ!
但し64bit限定。(dockerは32bitOSでは動作しない)
--
A: 一番簡単だからです
--
ここにも書いてます(英語ですが)
--
(Ubuntuなら)以下のコマンドでインストール完了するよ!
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh
--
$ sudo docker run --name app01 --rm -i -t ytnobody/debian-perl
なお、終了する場合はexitで。
--
--
- --name コンテナにつける名称を指定する
- --rm コンテナが終了すると、自動的にコンテナを削除する
- -i インタラクティブモード。
- -t TTYを割り当てる。
- -d コンテナをバックグラウンドで実行。
- -e コンテナに渡す環境変数を指定する (-e PLACK_ENV=development など)
--
とりあえずコンテナをフォアグラウンドで実行するなら
--rm -i -t
あたりはつけておこう。
--
まずフォルダを作る
$ mkdir docker-myapp
$ cd docker-myapp
--
Dockerfileを書いてみる
$ vi Dockerfile
--
以下のような内容で。
FROM ytnobody/debian-perl
MAINTAINER yourname <yourname@yourdomain.yourmail>
RUN apt-get install git -y
RUN apt-get clean
--
docker buildコマンドでイメージを作る
$ sudo docker build -t yourname/myapp ./
--
これでコンテナ内でgitコマンドが使えるようになってます!
--
--
$ sudo docker build -t yourname/your-image-name /path/to/your-docker-image-dir
--
類似した概念として、ansible。
--
これから列挙する7種類のコマンド以外、僕はあまりつかってないです。
--
ベースとなるdocker imageを指定する
FROM ytnobody/debian-perl
--
Dockerfileの著者とその連絡先を明記する
MAINTAINER ytnobody <ytnobody@gmail.com>
--
コンテナ内の環境構築を行うコマンドを指定する
RUN apt-get install git -y
--
コンテナ内に、コンテナ外からファイルやディレクトリを追加する
ADD oreore.pl /path/in/container/oreore.pl
--
この行以降のコマンドを、指定したディレクトリで実行する。
WORKDIR /path/to/myapp
--
docker run した時に実行されるコマンドを指定する
ENTRYPOINT ["/bin/bash"]
--
コンテナの外に公開するTCPポート番号を指定する
EXPOSE 80
--
- Dockerfileのコマンドは大文字で
- 1行目はFROMで。
- 2行目にはMAINTAINERを。
ここまで大まかに理解できたら きっとdockerを使えるはず
--
今回dockerイメージに放り込むwebapp
app.psgi
use strict;
use warnings;
use Time::Piece;
sub {
my $time = localtime->strftime('%Y-%m-%d %H:%M:%S');
[
200,
['Content-Type' => 'text/html; charset=UTF-8'],
['<html><body>TIME = '. $time .'</body></html>']
];
};
--
先ほどのDockerfileを改造してみる
Dockerfile
FROM ytnobody/debian-perl
MAINTAINER yourname <yourname@yourdomain.yourmail>
RUN cpanm Plack Time::Piece
RUN mkdir /app
ADD app.psgi /app/app.psgi
WORKDIR /app
EXPOSE 5000
ENTRYPOINT ["plackup"]
--
docker imageをbuildする
$ sudo docker build -t yourname/myapp ./
--
buildしたイメージを確認。
$ sudo docker images
--
バックグラウンドで実行する
$ sudo docker run --name myapp -p 5000:5000 -d yourname/myapp
--
実行できているか確認。
$ sudo docker ps
--
ブラウザで http://localhost:5000/ にアクセス
--
コンテナを終了させる
$ sudo docker stop myapp
--
終了したコンテナはきちんと削除しておく
$ sudo docker rm myapp
--
--
このようにPerlで作ったWebappも
Dockerに簡単に載せることができます
--
DockerfileにRUN git clone を書いておく
RUN git clone https://github.com/uzulla/yancha.git $YANCHA_ROOT
- Dockerfileを入れるフォルダを作る
- Dockerfileを書く
- docker buildしてみる
- うまくいかなければ2に戻る
- 完成!
--
なんでも1つのコンテナに詰め込むのはやめよう
RUN apt-get install mysql-server postfix memcached -y
--
コンテナの中に永続データを置くのはやめよう
RUN apt-get install mysql-server -y
--
1つのホストに沢山のコンテナを同居させないようにしよう
- アプリケーションコンテナは1ノードに2個程度までが望ましい
--
「コンテナ間通信」は、やめておこう
- 無駄に複雑になる
- コンテナのポータビリティが犠牲になる
--
うまくいかないなぁと思ったら、service docker statusしてみよう
-
Dockerはクライアント・サーバモデルを採用している
-
ダメな時はDockerサーバが寝てるかもしれない
Thank you.