n i x - s o c k e t / v a r / r u n / d o c k e r . s o c k - H " C o n t e n t - T y p e : a p p l i c a t i o n / j s o n " \ - d ' { " I m a g e " : " a l p i n e " , " C m d " : [ " e c h o " , " h e l l o w o r l d " ] } ' \ - X P O S T h t t p : / v 1 . 2 4 / c o n t a i n e r s / c r e a t e { " I d " : " 1 c 6 5 9 4 f a f 5 " , " W a r n i n g s " : n u l l } $ c u r l - - u n i x - s o c k e t / v a r / r u n / d o c k e r . s o c k - X P O S T h t t p : / v 1 . 2 4 / c o n t a i n e r s / 1 c 6 5 9 4 f a f 5 / s t a r t $ c u r l - - u n i x - s o c k e t / v a r / r u n / d o c k e r . s o c k - X P O S T h t t p : / v 1 . 2 4 / c o n t a i n e r s / 1 c 6 5 9 4 f a f 5 / w a i t { " S t a t u s C o d e " : 0 } $ c u r l - - u n i x - s o c k e t / v a r / r u n / d o c k e r . s o c k " h t t p : / v 1 . 2 4 / c o n t a i n e r s / 1 c 6 5 9 4 f a f 5 / l o g s ? s t d o u t = 1 " h e l l o w o r l d 7
u n [ O P T I O N S ] I M A G E [ C O M M A N D ] [ A R G . . . ] 指定したimage のコマンドを実行する d o c k e r b u i l d [ O P T I O N S ] P A T H | U R L | - docker image のbuild を行う d o c k e r p s [ O P T I O N S ] 起動しているcontainer 一覧を表示する d o c k e r e x e c [ O P T I O N S ] C O N T A I N E R C O M M A N D [ A R G . . . ] 指定したcontainer 内でコマンドを実行する d o c k e r i m a g e l s [ O P T I O N S ] 現在取得しているimage の一覧の表示する d o c k e r r m [ O P T I O N S ] C O N T A I N E R [ C O N T A I N E R . . . ] 指定したcontainer の削除を行う d o c k e r r m i [ O P T I O N S ] I M A G E [ I M A G E . . . ] 指定したimage の削除を行う 14
o n l i n u x I m a g e F R O M a m a z o n l i n u x : 2 0 1 7 . 0 9 # P H P 7 . 0 , A p a c h e , g i t R U N y u m - y i n s t a l l h t t p d 2 4 p h p 7 0 p h p 7 0 - o p c a c h e p h p 7 0 - d e v e l p h p 7 0 - m b s t r i n g p h p 7 0 - m c r y p t p h p 7 0 - m y s q l n d p h p 7 0 - p e c l - x d e b u g p h p 7 0 - p e c l - x h p r o f z i p u n z i p g i t g c c & & \ s e d - i - e " s / ; d a t e . t i m e z o n e * = . * $ / d a t e . t i m e z o n e = U T C / " / e t c / p h p . i n i & & \ s e d - i - e " s / A l l o w O v e r r i d e N o n e / A l l o w O v e r r i d e A l l / " / e t c / h t t p d / c o n f / h t t p d . c o n f & & \ s e d - i - e " s / O p t i o n s I n d e x e s F o l l o w S y m L i n k s / O p t i o n s - I n d e x e s + F o l l o w S y m L i n k s / " / e t c / h t t p d / c o n f / h t t p d . c o n f R U N r m - r f / v a r / w w w / h t m l & & \ m k d i r - p / v a r / w w w / s r c / w e b & & \ l n - s n f / v a r / w w w / s r c / w e b / v a r / w w w / h t m l W O R K D I R / v a r / w w w / s r c E N T R Y P O I N T / u s r / s b i n / h t t p d - D F O R E G R O U N D 30
i.e d o c k e r r u n - i t a m a z o n l i n u x : 2 0 1 7 . 0 9 / b i n / b a s h 2. うまくいったコマンドをメモしていく 3. 失敗したら、exit して再度docker run で実行していく。 4. 全部うまくいったらDockerfile に記載する 32
3 ' s e r v i c e s : # m y s q l m y s q l : i m a g e : m y s q l : 5 . 7 p o r t s : - " 3 3 0 6 : 3 3 0 6 " e n v i r o n m e n t : M Y S Q L _ A L L O W _ E M P T Y _ P A S S W O R D : ' t r u e ' v o l u m e s : - m y s q l d a t a : / v a r / l i b / m y s q l - . / d o c k e r / d b _ i n i t : / d o c k e r - e n t r y p o i n t - i n i t d b . d # a p a c h e , p h p s e r v e r : b u i l d : c o n t e x t : . d o c k e r f i l e : d o c k e r / s e r v e r / D o c k e r f i l e v o l u m e s : - . : / v a r / w w w / s r c : c a c h e d p o r t s : - " 8 0 : 8 0 " v o l u m e s : m y s q l d a t a : 36
コンテナ側の設定は絶対パスである必要がある。 named volume m y s q l d a t a : / v a r / l i b / m y s q l ホスト側に名前だけで指 定する docker が管理するvolume を作成することが出来、 コンテナが削除された時もvolume が永続化できる。 https://docs.docker.com/engine/admin/volumes/volume s/ 38
m y s q l d a t a という名前のdocker named volume を一つ作成する docker の名前解決について docker‑compose version 2 以降を使っている場合は s e r v i c e s 以 下に記載されている s e r v i c e 名で各々 のコンテナは名前解決する ことができます。 40
は m y s q l 5 . 7 を利用 コンテナの3306 ポー トをホストのlocalhost の3306 ポー トに ポー トフォワー ディングを行っている 環境変数に M Y S Q L _ A L L O W _ E M P T Y _ P A S S W O R D を設定し、root ユ ー ザー のpassword を無効化している。 コンテナ側のmysql のディレクトリ(/var/lib/mysql) にdocker named volume の m y s q l d a t a をmount している コンテナのディレクトリ / d o c k e r - e n t r y p o i n t - i n i t d b . d に ホストの . / d o c k e r / d b _ i n i t をmount / d o c k e r - e n t r y p o i n t - i n i t d b . d にsql ファイルを設置 するとcontainer 作成時に実行される 41
Dockerfile は d o c k e r / s e r v e r / D o c k e r f i l e を利用してimage を作成する Dockerfile の実行ディレクトリはdocker‑compose を実行した current directory current directory をコンテナ内の / v a r / w w w / s r c にmount す る コンテナの80 ポー トをホストのlocalhost の80 ポー トにポー ト フォワー ディングを行っている 42
o m p o s e u p - d で各コンテナの起動ができます。 u p が C r e a t e a n d s t a r t c o n t a i n e r s コンテナの作成と起動の 実行 - d が option で D e t a c h e d m o d e : R u n c o n t a i n e r s i n t h e b a c k g r o u n d , p r i n t n e w c o n t a i n e r n a m e s I n c o m p a t i b l e w i t h - - a b o r t - o n - c o n t a i n e r - e x i t . Detached mode で起動、 - - a b o r t - o n - c o n t a i n e r - e x i t が有効かつバックグラウンドで container が起動します。 docker‑compose ps 各contaier の起動状況の確認 ブラウザからlocalhost にアクセスして起動を確認する 43
r - c o m p o s e e x e c s e r v e r p h p c o m p o s e r . p h a r i n s t a l l と実行する。 e x e c E x e c u t e a c o m m a n d i n a r u n n i n g c o n t a i n e r でコン テナの中に対してコマンドを実行します。 s e r v e r がdocker‑compose.yml で記載したservice 名の指定になり ます。 p h p c o m p o s e r . p h a r i n s t a l l がcontainer の中で実行されるコマ ンドです 例えば、 コンテナの中でbash を実行したい場合は d o c k e r - c o m p o s e e x e c s e r v e r / b i n / b a s h と実行します。 46