はじめに
- Dockerをドットインストールで勉強し直してきました。
目次
- はじめに
- 目次
- #03 Dockerをインストールしよう
- #06 Containerを操作してみよう
- #07 実行中のContainerを操作しよう
- #08 ContainerからImageを作ってみよう
- #09 Dockerfileを使ってみよう
- #10 Webサーバーを立ち上げてみよう
- まとめ
#03 Dockerをインストールしよう
Ubuntu Trustyに、Dockerをインストールします。
- アップデート
$ sudo apt-get update
- dockerのインストール
$ sudo apt-get install docker.io
- シンボリックリンクを作成
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
#06 Containerを操作してみよう
- ここからは、Docker専用OSであるbargeeに移動して、コマンドの実行をしました。
- Dockerコンテナを起動するには、「run」コマンドを使用します。
- イメージ名のあとに実行したいコマンドを指定することで、そのコンテナで実行した結果が出力されます。
[bargee@barge ~]$ docker run centos echo "hello world" hello world
- 「ps」コマンドは、現在実行されているコンテナの一覧を表示するものなので、「-a」オプションをつけないと、過去に実行したコンテナは表示されません。
[bargee@barge ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [bargee@barge ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7627b5330356 centos "echo 'hello world'" 12 seconds ago Exited (0) 12 seconds ago hungry_bell
- コンテナを削除するには、rmコマンドを使用します。引数には、コンテナIDを指定します。一意の値が決まれば問題ないので、はじめの3桁くらい指定してあげればOKなようです。
[bargee@barge ~]$ docker rm 762 762 [bargee@barge ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#07 実行中のContainerを操作しよう
- docker runに「-d」オプションを付けるとバックグラウンドでコンテナを起動することができます。
- 例では、「free」というメモリ使用量を表示するコマンドを3秒おきに実行しました。
[bargee@barge ~]$ docker run -d centos free -s 3 121cf2bf56509150788e0d34e5b43e0165ecfa57b27a3c5072946d0400647e23 [bargee@barge ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 121cf2bf5650 centos "free -s 3" 8 seconds ago Up 7 seconds pensive_yalow [bargee@barge ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 121cf2bf5650 centos "free -s 3" 13 seconds ago Up 12 seconds pensive_yalow
- コンテナIDを指定することで、そのコンテナの実行ログを出力することができます。
[bargee@barge ~]$ docker logs 121cf2bf5650 total used free shared buff/cache available Mem: 1023228 27800 927568 44084 67860 880048 Swap: 987960 0 987960 total used free shared buff/cache available Mem: 1023228 27748 927444 44112 68036 880012 Swap: 987960 0 987960
- 「attach」コマンドを使うことで、指定したコンテナの実行状況を出力させる事ができます。
- 「--sig-proxy=」オプションは、シグナルをアタッチしているコンテナに渡すかどうかを指定します。
- --sig-proxy=true -> すべての受信シグナルをプロセスに渡す
- --sig-proxy=false -> attach 後 Ctrl+C で抜けてもコンテナは実行を続ける
[bargee@barge ~]$ docker attach --sig-proxy=false 121cf2bf5650 total used free shared buff/cache available Mem: 1023228 35308 919800 44112 68120 872420 Swap: 987960 0 987960 total used free shared buff/cache available Mem: 1023228 36488 918616 44112 68124 871240 Swap: 987960 0 987960 ^C [bargee@barge ~]$
- 実行されているdockerコンテナを終了させるには、「stop」コマンドを使用します。
[bargee@barge ~]$ docker stop 121cf2bf5650 121cf2bf5650 [bargee@barge ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [bargee@barge ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 121cf2bf5650 centos "free -s 3" 2 minutes ago Exited (137) 15 seconds ago pensive_yalow
- 停止しているコンテナを起動するには「start」コマンドを利用します。
[bargee@barge ~]$ docker start 121cf2bf5650 121cf2bf5650 [bargee@barge ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 121cf2bf5650 centos "free -s 3" 2 minutes ago Up 5 seconds pensive_yalow
#08 ContainerからImageを作ってみよう
- コンテナをインタラクティブモードで起動して、何か変更を加えたものをイメージとして保存してみます。
- 今回は、touchコマンドで、「hello.txt」を作成しました。
- 作成したら、exitコマンドで、コンテナから抜けることができます。
[bargee@barge ~]$ docker run -i -t centos /bin/bash [root@d5ad00c0ea32 /]# [root@d5ad00c0ea32 /]# [root@d5ad00c0ea32 /]# cd ~ [root@d5ad00c0ea32 ~]# touch hello.txt [root@d5ad00c0ea32 ~]# ls anaconda-ks.cfg hello.txt [root@d5ad00c0ea32 ~]# [root@d5ad00c0ea32 ~]# [root@d5ad00c0ea32 ~]# exit exit
- 「/bin/bash」を実行したコンテナ「d5ad00c0ea32」をイメージとして保存してみます。
[bargee@barge ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d5ad00c0ea32 centos "/bin/bash" 46 seconds ago Exited (0) 9 seconds ago insane_northcutt 121cf2bf5650 centos "free -s 3" 26 minutes ago Exited (137) 9 minutes ago pensive_yalow
- イメージとして保存するには、「commit」コマンドを使用します。
- 引数にはコンテナID、名前を指定します。
- 名前は、慣習的に「ユーザ名/イメージ名」で指定します。
- docker imagesでイメージの一覧を見てみると、新しいイメージIDで、イメージが作成されていることがわかります。
[bargee@barge ~]$ docker commit d5ad00c0ea32 naoto/hello sha256:4b9f1ba195a74454e15dcecef96731bdd2a373d6b916081262d51457b26772e4 [bargee@barge ~]$ [bargee@barge ~]$ [bargee@barge ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE naoto/hello latest 4b9f1ba195a7 6 seconds ago 196.7 MB centos 6 8315978ceaaa 3 weeks ago 194.6 MB centos latest 980e0e4c79ec 11 weeks ago 196.7 MB
- 作成されてたイメージをコンテナとして実行してみると、最初に別イメージ、別コンテナで作成したhello.txtが存在していることがわかります。
[bargee@barge ~]$ docker run -it naoto/hello /bin/bash [root@4c0567c022a0 /]# cd ~ [root@4c0567c022a0 ~]# ls anaconda-ks.cfg hello.txt
#09 Dockerfileを使ってみよう
- イメージをもとに変更を加えた新しいイメージを自動的に作成することができます。
- イメージの作成手順は、Dockerfileという構成ファイルに記述します。
- FROM -> もとになるイメージファイルをしているする
- MAINTENER -> 慣習的に記述する。名前とメールアドレス程度は書いておくと良いらしい。
- RUN -> buildされるときに実行される
- CMD -> run(コンテナ実行)されるときに実行される
[bargee@barge ~]$ vi Dockerfile [bargee@barge ~]$ cat Dockerfile FROM centos MAINTAINER naoto RUN echo "now loading..." CMD ["echo", "now running..."]
- buildコマンドを使って、新しいイメージを作成します。
- 「-t」オプションでイメージ名を指定できます。
- 「.」は、Dockerfileの所在を表します。※今回は、カレントディレクトリ
- 実行してみると、build中に「now loading...」と出ていることがわかります。
[bargee@barge ~]$ docker build -t naoto/echo . Sending build context to Docker daemon 7.168 kB Step 1 : FROM centos ---> 980e0e4c79ec Step 2 : MAINTAINER naoto ---> Using cache ---> 6f67c12c5618 Step 3 : RUN echo "now loading..." ---> Running in 7b396e8425e3 now loading... ---> 63161dc62978 Removing intermediate container 7b396e8425e3 Step 4 : CMD echo now running... ---> Running in 953b5d630180 ---> bd028db0142a Removing intermediate container 953b5d630180 Successfully built bd028db0142a
- buildが完了すると、新しいイメージが作成されていることがわかります。
- イメージIDも、元となったcentos:latestとは異なります。
[bargee@barge ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE naoto/echo latest bd028db0142a 9 seconds ago 196.7 MB naoto/hello latest 4b9f1ba195a7 21 minutes ago 196.7 MB centos 6 8315978ceaaa 3 weeks ago 194.6 MB centos latest 980e0e4c79ec 11 weeks ago 196.7 MB
- 「docker run」で新しく作ったイメージを実行すると、Dockerfileで指定した「now running...」が表示されます。
[bargee@barge ~]$ docker run naoto/echo now running...
#10 Webサーバーを立ち上げてみよう
- Dockerfileを編集します。
- ADDは、ファイルを追加するコマンドです。
- EXPOSEは、ポート開放コマンドです。
[bargee@barge ~]$ vi Dockerfile [bargee@barge ~]$ [bargee@barge ~]$ cat Dockerfile FROM centos MAINTAINER naoto RUN yum -y install httpd ADD ./index.html /var/www/html/ EXPOSE 80 CMD ["/usr/sbin/httpd", "-D", "FORGROUND"]
- 追加するHTMLファイルを作成します。
[bargee@barge ~]$ vi index.html [bargee@barge ~]$ [bargee@barge ~]$ cat index.html <html> hello from docker! </html>
- buildします。
[bargee@barge ~]$ docker build -t naoto/httpd . Sending build context to Docker daemon 8.192 kB Step 1 : FROM centos ---> 980e0e4c79ec Step 2 : MAINTAINER naoto ---> Using cache ---> 6f67c12c5618 Step 3 : RUN yum -y install httpd ---> Running in 155372d415c6 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed --> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.4.8-3.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed ---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed ---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M Installing for dependencies: apr x86_64 1.4.8-3.el7 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k centos-logos noarch 70.0.6-3.el7.centos base 21 M httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k mailcap noarch 2.1.41-2.el7 base 31 k Transaction Summary ================================================================================ Install 1 Package (+5 Dependent packages) Total download size: 24 M Installed size: 31 M Downloading packages: warning: /var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed Public key for httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm is not installed -------------------------------------------------------------------------------- Total 7.7 MB/s | 24 MB 00:03 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@CentOS) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-3.el7.x86_64 1/6 Installing : apr-util-1.5.2-6.el7.x86_64 2/6 Installing : httpd-tools-2.4.6-40.el7.centos.4.x86_64 3/6 Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6 Installing : mailcap-2.1.41-2.el7.noarch 5/6 Installing : httpd-2.4.6-40.el7.centos.4.x86_64 6/6 Verifying : apr-1.4.8-3.el7.x86_64 1/6 Verifying : httpd-tools-2.4.6-40.el7.centos.4.x86_64 2/6 Verifying : apr-util-1.5.2-6.el7.x86_64 3/6 Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 4/6 Verifying : mailcap-2.1.41-2.el7.noarch 5/6 Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6 Installed: httpd.x86_64 0:2.4.6-40.el7.centos.4 Dependency Installed: apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 centos-logos.noarch 0:70.0.6-3.el7.centos httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 mailcap.noarch 0:2.1.41-2.el7 Complete! ---> 520995e7f14f Removing intermediate container 155372d415c6 Step 4 : ADD ./index.html /var/www/html/ ---> 1a415a832e8a Removing intermediate container 02cbec02c1c5 Step 5 : EXPOSE 80 ---> Running in a398f8ee5147 ---> df69aaedb865 Removing intermediate container a398f8ee5147 Step 6 : CMD /usr/sbin/httpd -D FORGROUND ---> Running in 8ee1afc06bea ---> 8d8f0c6b1c40 Removing intermediate container 8ee1afc06bea Successfully built 8d8f0c6b1c40 [bargee@barge ~]$
- コンテナを起動します。
- 「-p」オプションは、ポートフォワード設定です。ここでは、ホスト側を8080、Dockerマシン側を80で紐付けます。
- 実際にブラウザでアクセスすると、index.htmlに記載した「hello from docker!」が表示されます。
- ブラウザでアクセスする場合は、VagrantホストのIPアドレスに対して、ポート8080でアクセスします。
[bargee@barge ~]$ docker run -p 8080:80 -d naoto/httpd 548ef09594f77d73238d7eb72789ac71fc9bd120b3cefc097eb23eda3b1b9909
まとめ
本だけでは腑に落ちていなかった部分がよく理解できた。
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る