SlideShare a Scribd company logo
1 of 16
Download to read offline
the study of Fig
-Orchestration tool of docker-
July,30,2014
Tadayasu Yotsu
July,30,2014 Docker inc announced to aquire Orchard
Laboratories Ltd. This is assumed that 「Fig」which is
orchestration tool for docker will be standard tool.
Recently, there are some orchestration tools such as
kubernetes. I am interested in orchestration tool, so
I try to study it.
First of all, I will run fig by reading fig home
page(http://www.fig.sh/index.html).
Install
まずはdockerのversion1.0以降をインストール。
実行環境はAWS EC2、RHEL6.5
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-
release-6-8.noarch.rpm	
$ sudo yum -y install docker-io	
$ docker -v	
Docker version 1.0.0, build 63fe64c/1.0.0	
$ sudo service docker start	
次にFigをインストール。
$ curl -L https://github.com/orchardup/fig/releases/download/0.5.1/linux > fig	
$ sudo mv fig /usr/local/bin/	
$ sudo chmod +x /usr/local/bin/fig	
$ fig --version	
fig: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/
_MEIlZ8Qx8/libz.so.1)
glibcのバージョンをアップデートするのは面倒なので、python版をインストール
$ python -V	
Python 2.7.8	
$ sudo pip install -U fig
glibcのバージョンをアップデートするのは面倒なので、python版をインストール
$ python -V	
Python 2.7.8	
$ wget https://pypi.python.org/packages/source/s/setuptools/
setuptools-5.4.1.tar.gz	
!
$ cd setuptools-5.4.1	
$ python setup.py install	
$ easy_install pip	
$ pip2 install -U fig	
$ fig --version	
fig 0.5.1a	
インストールはこれで完了
Get started with Django
Figのセットアップを行い、Django/PostgreSQLアプリの実行を行う。
始める前に3つのファイルの設定を行う。
まず最初にアプリケーションはアプリに実行に必要なものを含んだdockerコ
ンテナ内で実行する予定である。そのためdockerコンテナ内で何を実行する
のかDockerfileを使用して定義する。
FROM orchardup/python:2.7	
ENV PYTHONUNBUFFERED 1	
RUN apt-get update -qq && apt-get install -y python-psycopg2	
RUN mkdir /code	
WORKDIR /code	
ADD requirements.txt /code/	
RUN pip install -r requirements.txt	
ADD . /code/
これでimageの中にアプリケーションがインストールされる。
次にPythonの依存性をrequirements.txtで定義する。
Django
シンプルだけど、これで十分。
最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーションがWeb
Serverとデータベースのサービスで構成されることを定義する。そしてどのDockerイメー
ジを使用し、どのようにリンクするか、コンテナ内でどのvolumeをマウントするか、そし
てどのポートをexposeするかを定義する。
手順書には記載されてないが、このDockerfileでコンテナが起動するか確認
$ sudo docker build -t test .	
Sending build context to Docker daemon 2.56 kB	
Sending build context to Docker daemon 	
Step 0 : FROM orchardup/python:2.7	
Pulling repository orchardup/python	
cdc18ed4ed6f: Download complete 	
511136ea3c5a: Download complete 	
5e66087f3ffe: Download complete 	
4d26dd3ebc1c: Download complete 	
d4010efcfd86: Download complete 	
99ec81b80c55: Download complete 	
---> cdc18ed4ed6f	
Step 1 : ENV PYTHONUNBUFFERED 1	
---> Running in 704a8a850a45	
Step 4 : WORKDIR /code	
---> Running in 33098624aa98	
---> 1497430bfa1d	
Removing intermediate container 33098624aa98	
Step 5 : ADD requirements.txt /code/	
2014/08/02 01:46:40 requirements.txt: no such file or directory
pip installでくわせてるrequirements.txtが必要だと言われ失敗。そりゃそうだ。とりあえず手順書に従って次へ進める。
db:	
image: orchardup/postgresql	
web:	
build: .	
command: python manage.py runserver 0.0.0.0:8000	
volumes:	
- .:/code	
ports:	
- "8000:8000"	
links:	
- db
最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーショ
ンがWeb Serverとデータベースのサービスで構成されることを定義する。そし
てどのDockerイメージを使用し、どのようにリンクするか、コンテナ内でどの
volumeをマウントするか、そしてどのポートをexposeするかを定義する。
fig.ymlの詳細はhttp://www.fig.sh/yml.htmlを参照。
とりあえず作成するファイルはこれで全て。
$ pwd	
/home/ec2-user/fig	
$ ls	
Dockerfile fig.yml requirements.txt
db:	
image: orchardup/postgresql	
web:	
build: .	
command: python manage.py runserver 0.0.0.0:8000	
volumes:	
- .:/code	
ports:	
- "8000:8000"	
links:	
- db
最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーショ
ンがWeb Serverとデータベースのサービスで構成されることを定義する。そし
てどのDockerイメージを使用し、どのようにリンクするか、コンテナ内でどの
volumeをマウントするか、そしてどのポートをexposeするかを定義する。
fig.ymlの詳細はhttp://www.fig.sh/yml.htmlを参照。
とりあえず作成するファイルはこれで全て。
$ pwd	
/home/ec2-user/fig	
$ ls	
Dockerfile fig.yml requirements.txt
# fig run web django-admin.py startproject figexample .	
Creating fig_db_1...	
Pulling image orchardup/postgresql…	
省略	
Building web...	
---> Using cache	
---> 648d5cf80800	
Step 2 : RUN apt-get update -qq && apt-get install -y python-psycopg2	
---> Using cache	
---> af5aedf45f81	
Step 3 : RUN mkdir /code	
---> Using cache	
---> 93dd07412b09	
Step 4 : WORKDIR /code	
---> Using cache	
---> 1497430bfa1d	
Step 5 : ADD requirements.txt /code/	
---> 2b8a2b0f1df7	
Removing intermediate container 7c7d76a6bf7a	
Step 6 : RUN pip install -r requirements.txt	
---> Running in 1dfba113bb7f	
Downloading/unpacking Django (from -r requirements.txt (line 1))	
Installing collected packages: Django	
Successfully installed Django	
Cleaning up...	
---> 2d2464646cf6	
Removing intermediate container 1dfba113bb7f	
Step 7 : ADD . /code/	
---> a38ea44a1f49	
Removing intermediate container 6c1d8cd2ac06	
Successfully built a38ea44a1f49	
# ls	
Dockerfile fig.yml figexample manage.py requirements.txt
それではfig runを使ってDjango Projectを起動してみる。
Figは最初にDockerfileを使っ
てWeb Serviceのためのイメー
ジをビルドする。それからコンテ
ナの中で”django-admin.py
startproject figexample .”
コマンドを実行する。
実行後のカレントディレクトリに
Djangoアプリが生成される。
# docker images	
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE	
fig_web latest a38ea44a1f49 13 minutes ago 550.9 MB	
orchardup/postgresql latest ca3d005ec1e8 5 hours ago 478 MB	
orchardup/postgresql 9.1 f9686ed36bcb 5 hours ago 318 MB	
orchardup/postgresql 9.3 8096d940fd75 4 days ago 477.9 MB	
centos centos6 0c752394b855 7 weeks ago 124.1 MB	
centos latest 0c752394b855 7 weeks ago 124.1 MB	
orchardup/python 2.7 cdc18ed4ed6f 9 weeks ago 514.3 MB	
centos 6.4 539c0211cd76 16 months ago 300.6 MB
fig_web,orchardup/postgresql x3/orchardup/
pythonのイメージが追加されている。
# docker ps	
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES	
479c8630b668 orchardup/postgresql:latest /usr/local/bin/run 17 minutes ago Up 17
minutes 5432/tcp fig_db_1,fig_web_run_1/db_1,fig_web_run_1/fig_db_1
起動しているコンテナはorchardup/postgresqlのみ。
DATABASES = {	
'default': {	
'ENGINE': 'django.db.backends.postgresql_psycopg2',	
'NAME': 'docker',	
'USER': 'docker',	
'PASSWORD': 'docker',	
'HOST': os.environ.get('DB_1_PORT_5432_TCP_ADDR'),	
'PORT': os.environ.get('DB_1_PORT_5432_TCP_PORT'),	
}	
}
データベース接続のセットアップを行う。figexample/settings.pyファイ
ルの”DATABASES=…”を修正する。
これらの設定はorchardup/postgresql Dockerイメージによって
定義されている。
# fig up	
Recreating fig_db_1...	
Creating fig_web_1...	
Attaching to fig_db_1, fig_web_1	
db_1 | 2014-08-02 07:03:38 GMT ERROR: role "docker" already exists	
db_1 | 2014-08-02 07:03:38 GMT STATEMENT: CREATE USER docker WITH SUPERUSER;	
db_1 | 		
db_1 | 2014-08-02 07:03:39 GMT ERROR: database "docker" already exists	
db_1 | 2014-08-02 07:03:39 GMT STATEMENT: CREATE DATABASE docker OWNER docker TEMPLATE DEFAULT;	
db_1 | 		
db_1 | 2014-08-02 07:03:39 GMT LOG: database system was shut down at 2014-08-02 07:03:39 GMT	
db_1 | 2014-08-02 07:03:39 GMT LOG: autovacuum launcher started	
db_1 | 2014-08-02 07:03:39 GMT LOG: database system is ready to accept connections	
web_1 | Validating models...	
web_1 | 	
web_1 | 0 errors found	
web_1 | August 02, 2014 - 07:03:40	
web_1 | Django version 1.6.5, using settings 'figexample.settings'	
web_1 | Starting development server at http://0.0.0.0:8000/	
web_1 | Quit the server with CONTROL-C.
”fig up”を実行する。
ブラウザでlocalhost:8000にアクセスし、Djangoのページが表示されるか確認する。
※ちなみにEC2ではDefaultでX11fowardingが有効になっておらずライブラリも足り
てないのでインストールする必要がある。
$ sudo yum install xorg-x11-xauth.x86_64 xorg-x11-server-utils.x86_64 firefox
# fig run web python manage.py syncdb	
Creating tables ...	
Creating table django_admin_log	
Creating table auth_permission	
Creating table auth_group_permissions	
Creating table auth_group	
Creating table auth_user_groups	
Creating table auth_user_user_permissions	
Creating table auth_user	
Creating table django_content_type	
Creating table django_session
Dockerに対して管理コマンドを実行。
fig upを実行してデータベースのセットアップを行う。
とりあえず、ここまでがドキュメントに記載されている内容。定義ファイルを書い
てfigコマンドを実行するだけで環境が作れるので便利だと思うが、1つのコンテ
ナだけだとあまりありがたみが分からないので、次回は複数のコンテナで試してみ
る。
fig.yml Reference
fig.ymlで定義された各サービスはimageもしくはbuildをちゃんと指定しなければな
らない。 他のキーはオプションで、docker runコマンドラインの機能に類似してい
る。
docker runと同様にDockerfile (e.g. CMD, EXPOSE, VOLUME, ENV) で指定
されるオプションはデフォルトで尊重される。fig.ymlで再び指定する必要はない。※
訳が変になったが、要するにfig.ymlよりもDockerfileの方が優先されるっぽい。
Tag
image
タグもしく部分一致のイメージ
モートを指定可能。ローカルに存在しない場合、
Fig
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
build
Dockerfile
生成された名前を持ってビルドとタグ付けをし、そ
の後そのイメージを利用する。
build: /path/to/build/dir
command デフォルトのコマンドをオーバライドさせる。 command: bundle exec thin -p 3000
links
別のサービス中のコンテナへのリンク。リンクの別
名を指定できる。それはどの環境変数が
を定義する。
db -> DB_1_PORT
db:database -> DATABASE_1_PORT
links:
- db
- db:database
- redis
ports
Expose ports.
を指定するか、コンテナだけのポート
random host port will be chosen)
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
expose
Expose ports
い)
expose:
- "3000"
- "8000"
volumes
ボリュームとしてマウントするパス。ホ
ストマシン上のパスも指定可能。
(HOST:CONTAINER).
!
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
volumes_from
他のサービスやコンテから全てのボリュ
ームをマウント。
volumes_from:
- service_name
- container_name
environment
環境変数を追加。配列や辞書を使用可
能。キーだけしかない環境変数でも
OK
は解決される。これは秘密の情報やホス
ト特有の情報を格納するのに有用。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
net
ネットワークモード。
の--net
指定可能
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
dns 独自の
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
working_dir
entrypoint
user
hostname
domainname
mem_limit
privileged
これらは一つの値を持ち、
run
似している。
working_dir: /code
entrypoint: /code/entrypoint.sh
user: postgresql
hostname: foo
domainname: foo.com
mem_limit: 1000000000
privileged: true

More Related Content

What's hot

Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順
Kotaro Noyama
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
Etsuji Nakai
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
Etsuji Nakai
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
HommasSlide
 

What's hot (20)

Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
Openresty
OpenrestyOpenresty
Openresty
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
OpenStack を NetApp Unified Driver と NFS Copy Offload を使って拡張する Vol.002
 
BOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSBOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWS
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:講義No2
 
DevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSHDevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSH
 
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlifyNuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo2
 
Cloud Foundry varz
Cloud Foundry varzCloud Foundry varz
Cloud Foundry varz
 
BOSHで始めるImmutable Infrastructure
BOSHで始めるImmutable InfrastructureBOSHで始めるImmutable Infrastructure
BOSHで始めるImmutable Infrastructure
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
Rancher command line interface
Rancher command line interfaceRancher command line interface
Rancher command line interface
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Docker調査20150704
Docker調査20150704Docker調査20150704
Docker調査20150704
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
 

Similar to Fig

Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
Kazuyuki Mori
 

Similar to Fig (20)

Docker実践入門
Docker実践入門Docker実践入門
Docker実践入門
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム2019年度 CaaS ワークショップ @ NTTコム
2019年度 CaaS ワークショップ @ NTTコム
 
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
Apache Bigtopによるオープンなビッグデータ処理基盤の構築(オープンデベロッパーズカンファレンス 2021 Online 発表資料)
 
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
Apache BigtopによるHadoopエコシステムのパッケージング(Open Source Conference 2021 Online/Osaka...
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
DockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみようDockerでWordPressサイトを開発してみよう
DockerでWordPressサイトを開発してみよう
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Docker handson
Docker handsonDocker handson
Docker handson
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Dockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクルDockerイメージの理解とコンテナのライフサイクル
Dockerイメージの理解とコンテナのライフサイクル
 

Recently uploaded

Recently uploaded (12)

Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Fig

  • 1. the study of Fig -Orchestration tool of docker- July,30,2014 Tadayasu Yotsu
  • 2. July,30,2014 Docker inc announced to aquire Orchard Laboratories Ltd. This is assumed that 「Fig」which is orchestration tool for docker will be standard tool. Recently, there are some orchestration tools such as kubernetes. I am interested in orchestration tool, so I try to study it. First of all, I will run fig by reading fig home page(http://www.fig.sh/index.html).
  • 3. Install まずはdockerのversion1.0以降をインストール。 実行環境はAWS EC2、RHEL6.5 $ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel- release-6-8.noarch.rpm $ sudo yum -y install docker-io $ docker -v Docker version 1.0.0, build 63fe64c/1.0.0 $ sudo service docker start 次にFigをインストール。 $ curl -L https://github.com/orchardup/fig/releases/download/0.5.1/linux > fig $ sudo mv fig /usr/local/bin/ $ sudo chmod +x /usr/local/bin/fig $ fig --version fig: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /tmp/ _MEIlZ8Qx8/libz.so.1) glibcのバージョンをアップデートするのは面倒なので、python版をインストール $ python -V Python 2.7.8 $ sudo pip install -U fig
  • 4. glibcのバージョンをアップデートするのは面倒なので、python版をインストール $ python -V Python 2.7.8 $ wget https://pypi.python.org/packages/source/s/setuptools/ setuptools-5.4.1.tar.gz ! $ cd setuptools-5.4.1 $ python setup.py install $ easy_install pip $ pip2 install -U fig $ fig --version fig 0.5.1a インストールはこれで完了
  • 5. Get started with Django Figのセットアップを行い、Django/PostgreSQLアプリの実行を行う。 始める前に3つのファイルの設定を行う。 まず最初にアプリケーションはアプリに実行に必要なものを含んだdockerコ ンテナ内で実行する予定である。そのためdockerコンテナ内で何を実行する のかDockerfileを使用して定義する。 FROM orchardup/python:2.7 ENV PYTHONUNBUFFERED 1 RUN apt-get update -qq && apt-get install -y python-psycopg2 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/ これでimageの中にアプリケーションがインストールされる。
  • 6. 次にPythonの依存性をrequirements.txtで定義する。 Django シンプルだけど、これで十分。 最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーションがWeb Serverとデータベースのサービスで構成されることを定義する。そしてどのDockerイメー ジを使用し、どのようにリンクするか、コンテナ内でどのvolumeをマウントするか、そし てどのポートをexposeするかを定義する。 手順書には記載されてないが、このDockerfileでコンテナが起動するか確認 $ sudo docker build -t test . Sending build context to Docker daemon 2.56 kB Sending build context to Docker daemon Step 0 : FROM orchardup/python:2.7 Pulling repository orchardup/python cdc18ed4ed6f: Download complete 511136ea3c5a: Download complete 5e66087f3ffe: Download complete 4d26dd3ebc1c: Download complete d4010efcfd86: Download complete 99ec81b80c55: Download complete ---> cdc18ed4ed6f Step 1 : ENV PYTHONUNBUFFERED 1 ---> Running in 704a8a850a45 Step 4 : WORKDIR /code ---> Running in 33098624aa98 ---> 1497430bfa1d Removing intermediate container 33098624aa98 Step 5 : ADD requirements.txt /code/ 2014/08/02 01:46:40 requirements.txt: no such file or directory pip installでくわせてるrequirements.txtが必要だと言われ失敗。そりゃそうだ。とりあえず手順書に従って次へ進める。
  • 7. db: image: orchardup/postgresql web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" links: - db 最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーショ ンがWeb Serverとデータベースのサービスで構成されることを定義する。そし てどのDockerイメージを使用し、どのようにリンクするか、コンテナ内でどの volumeをマウントするか、そしてどのポートをexposeするかを定義する。 fig.ymlの詳細はhttp://www.fig.sh/yml.htmlを参照。 とりあえず作成するファイルはこれで全て。 $ pwd /home/ec2-user/fig $ ls Dockerfile fig.yml requirements.txt
  • 8. db: image: orchardup/postgresql web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" links: - db 最後にこれら全てをfig.ymlと呼ばれるファイルでくっつける。アプリケーショ ンがWeb Serverとデータベースのサービスで構成されることを定義する。そし てどのDockerイメージを使用し、どのようにリンクするか、コンテナ内でどの volumeをマウントするか、そしてどのポートをexposeするかを定義する。 fig.ymlの詳細はhttp://www.fig.sh/yml.htmlを参照。 とりあえず作成するファイルはこれで全て。 $ pwd /home/ec2-user/fig $ ls Dockerfile fig.yml requirements.txt
  • 9. # fig run web django-admin.py startproject figexample . Creating fig_db_1... Pulling image orchardup/postgresql… 省略 Building web... ---> Using cache ---> 648d5cf80800 Step 2 : RUN apt-get update -qq && apt-get install -y python-psycopg2 ---> Using cache ---> af5aedf45f81 Step 3 : RUN mkdir /code ---> Using cache ---> 93dd07412b09 Step 4 : WORKDIR /code ---> Using cache ---> 1497430bfa1d Step 5 : ADD requirements.txt /code/ ---> 2b8a2b0f1df7 Removing intermediate container 7c7d76a6bf7a Step 6 : RUN pip install -r requirements.txt ---> Running in 1dfba113bb7f Downloading/unpacking Django (from -r requirements.txt (line 1)) Installing collected packages: Django Successfully installed Django Cleaning up... ---> 2d2464646cf6 Removing intermediate container 1dfba113bb7f Step 7 : ADD . /code/ ---> a38ea44a1f49 Removing intermediate container 6c1d8cd2ac06 Successfully built a38ea44a1f49 # ls Dockerfile fig.yml figexample manage.py requirements.txt それではfig runを使ってDjango Projectを起動してみる。 Figは最初にDockerfileを使っ てWeb Serviceのためのイメー ジをビルドする。それからコンテ ナの中で”django-admin.py startproject figexample .” コマンドを実行する。 実行後のカレントディレクトリに Djangoアプリが生成される。
  • 10. # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE fig_web latest a38ea44a1f49 13 minutes ago 550.9 MB orchardup/postgresql latest ca3d005ec1e8 5 hours ago 478 MB orchardup/postgresql 9.1 f9686ed36bcb 5 hours ago 318 MB orchardup/postgresql 9.3 8096d940fd75 4 days ago 477.9 MB centos centos6 0c752394b855 7 weeks ago 124.1 MB centos latest 0c752394b855 7 weeks ago 124.1 MB orchardup/python 2.7 cdc18ed4ed6f 9 weeks ago 514.3 MB centos 6.4 539c0211cd76 16 months ago 300.6 MB fig_web,orchardup/postgresql x3/orchardup/ pythonのイメージが追加されている。 # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 479c8630b668 orchardup/postgresql:latest /usr/local/bin/run 17 minutes ago Up 17 minutes 5432/tcp fig_db_1,fig_web_run_1/db_1,fig_web_run_1/fig_db_1 起動しているコンテナはorchardup/postgresqlのみ。
  • 11. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'docker', 'USER': 'docker', 'PASSWORD': 'docker', 'HOST': os.environ.get('DB_1_PORT_5432_TCP_ADDR'), 'PORT': os.environ.get('DB_1_PORT_5432_TCP_PORT'), } } データベース接続のセットアップを行う。figexample/settings.pyファイ ルの”DATABASES=…”を修正する。 これらの設定はorchardup/postgresql Dockerイメージによって 定義されている。
  • 12. # fig up Recreating fig_db_1... Creating fig_web_1... Attaching to fig_db_1, fig_web_1 db_1 | 2014-08-02 07:03:38 GMT ERROR: role "docker" already exists db_1 | 2014-08-02 07:03:38 GMT STATEMENT: CREATE USER docker WITH SUPERUSER; db_1 | db_1 | 2014-08-02 07:03:39 GMT ERROR: database "docker" already exists db_1 | 2014-08-02 07:03:39 GMT STATEMENT: CREATE DATABASE docker OWNER docker TEMPLATE DEFAULT; db_1 | db_1 | 2014-08-02 07:03:39 GMT LOG: database system was shut down at 2014-08-02 07:03:39 GMT db_1 | 2014-08-02 07:03:39 GMT LOG: autovacuum launcher started db_1 | 2014-08-02 07:03:39 GMT LOG: database system is ready to accept connections web_1 | Validating models... web_1 | web_1 | 0 errors found web_1 | August 02, 2014 - 07:03:40 web_1 | Django version 1.6.5, using settings 'figexample.settings' web_1 | Starting development server at http://0.0.0.0:8000/ web_1 | Quit the server with CONTROL-C. ”fig up”を実行する。 ブラウザでlocalhost:8000にアクセスし、Djangoのページが表示されるか確認する。 ※ちなみにEC2ではDefaultでX11fowardingが有効になっておらずライブラリも足り てないのでインストールする必要がある。 $ sudo yum install xorg-x11-xauth.x86_64 xorg-x11-server-utils.x86_64 firefox
  • 13. # fig run web python manage.py syncdb Creating tables ... Creating table django_admin_log Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_groups Creating table auth_user_user_permissions Creating table auth_user Creating table django_content_type Creating table django_session Dockerに対して管理コマンドを実行。 fig upを実行してデータベースのセットアップを行う。 とりあえず、ここまでがドキュメントに記載されている内容。定義ファイルを書い てfigコマンドを実行するだけで環境が作れるので便利だと思うが、1つのコンテ ナだけだとあまりありがたみが分からないので、次回は複数のコンテナで試してみ る。
  • 14. fig.yml Reference fig.ymlで定義された各サービスはimageもしくはbuildをちゃんと指定しなければな らない。 他のキーはオプションで、docker runコマンドラインの機能に類似してい る。 docker runと同様にDockerfile (e.g. CMD, EXPOSE, VOLUME, ENV) で指定 されるオプションはデフォルトで尊重される。fig.ymlで再び指定する必要はない。※ 訳が変になったが、要するにfig.ymlよりもDockerfileの方が優先されるっぽい。
  • 15. Tag image タグもしく部分一致のイメージ モートを指定可能。ローカルに存在しない場合、 Fig image: ubuntu image: orchardup/postgresql image: a4bc65fd build Dockerfile 生成された名前を持ってビルドとタグ付けをし、そ の後そのイメージを利用する。 build: /path/to/build/dir command デフォルトのコマンドをオーバライドさせる。 command: bundle exec thin -p 3000 links 別のサービス中のコンテナへのリンク。リンクの別 名を指定できる。それはどの環境変数が を定義する。 db -> DB_1_PORT db:database -> DATABASE_1_PORT links: - db - db:database - redis ports Expose ports. を指定するか、コンテナだけのポート random host port will be chosen) ports: - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001" expose Expose ports い) expose: - "3000" - "8000"
  • 16. volumes ボリュームとしてマウントするパス。ホ ストマシン上のパスも指定可能。 (HOST:CONTAINER). ! volumes: - /var/lib/mysql - cache/:/tmp/cache volumes_from 他のサービスやコンテから全てのボリュ ームをマウント。 volumes_from: - service_name - container_name environment 環境変数を追加。配列や辞書を使用可 能。キーだけしかない環境変数でも OK は解決される。これは秘密の情報やホス ト特有の情報を格納するのに有用。 environment: RACK_ENV: development SESSION_SECRET: environment: - RACK_ENV=development - SESSION_SECRET net ネットワークモード。 の--net 指定可能 net: "bridge" net: "none" net: "container:[name or id]" net: "host" dns 独自の dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9 working_dir entrypoint user hostname domainname mem_limit privileged これらは一つの値を持ち、 run 似している。 working_dir: /code entrypoint: /code/entrypoint.sh user: postgresql hostname: foo domainname: foo.com mem_limit: 1000000000 privileged: true