ドットインストールのDocker入門( http://dotinstall.com/lessons/basic_docker )をやった時の勉強メモ
VagrantでDockerをインストールするサーバーをつくる
まずは、Vagrantで仮装サーバーを立ち上げ(今回はUbuntu)
$vagrant box list #trusty64がなければ、`vagrant box add`で追加
trusty64 (virtualbox, 0)
$ cd ~/Vagrant
$ mkdir Docker
$ cd Docker
$ vagrant init trusty64
$ vagrant ssh
Vagrantfile
のprivate_networkのIPを設定しておく
config.vm.network "private_network", ip: "192.168.55.44"
Dockerをインストール
次にVagrantで立ち上げたUbuntuにDockerをインストール
公式サイトに書いてあるとおりにする。
$ sudo apt-get update
$ sudo apt-get install docker.io
イメージを検索取得
$ sudo docker pull centos
イメージを確認
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos5 192178b11d36 2 weeks ago 466.9 MB
centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
centos centos7 ae0c2d0bdc10 2 weeks ago 224 MB
centos latest ae0c2d0bdc10 2 weeks ago 224 MB
コンテナを操作
コンテナを作る。
centosイメージからコンテナを作ってecho "hello world"
を実行してみる
$ sudo docker run centos echo "hello world"
コンテナを確認
$ sudo docker ps #これだと実行中のものしか出ないので、何もでない。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ sudo docker ps -a #全部出すには`-a`を付ける
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db58d295c773 centos:centos7 echo 'hello world' 4 minutes ago Exited (0) 4 minutes ago prickly_meitner
コンテナを削除するには、sudo docker rm コンテナID
次にコンテナを作成して、バックグラウンドでコマンドを実行してみる。
$ sudo docker run -d centos free -s 5
a71d132763e10b5e6976d2f0d6b9f1feeaeefcbfe5b97f97607dfb2a8686937c
IDを指定してログ確認
$ sudo doker logs a71d1
total used free shared buffers cached
Mem: 501764 404956 96808 680 7080 254012
-/+ buffers/cache: 143864 357900
Swap: 0 0 0
total used free shared buffers cached
Mem: 501764 404956 96808 680 7088 254016
-/+ buffers/cache: 143852 357912
Swap: 0 0 0
このタスクをフォアグラウンドにもってきたいときは以下のようにする
$ sudo docker attach --sig-proxy=false a71d1
コンテナの停止・再実行
$ sudo docker kill a71d1 #sudo docker startでもOK
$ sudo docker start a71d1
イメージをつくる
実際にコンテナにログインしてみる
$ sudo docker run -i -t centos /bin/bash
bash-4.2# touch hello.txt
exit
次にこのコンテナをコミットしてイメージ作成
$ sudo docker commit 52a2e48ec27f s-kiriki/hello
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
s_kiriki/hello latest af39053b9158 About a minute ago 224 MB #ちゃんとイメージできてる!!
centos centos5 192178b11d36 2 weeks ago 466.9 MB
centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
centos centos7 ae0c2d0bdc10 2 weeks ago 224 MB
centos latest ae0c2d0bdc10 2 weeks ago 224 MB
イメージからコンテナを作ってhello.txtがあるか確認
$ sudo docker run -i -t s_kiriki/hello /bin/bash
bash-4.2# ls
bin dev etc hello.txt home lib lib64 lost+found media mnt opt proc root run sbin selinux srv sys tmp usr var
Dockerfileを使う
$ vi Dockerfile
FROM centos
MAINTAINER Shinya Kiriki
# RUN: build時に実行
RUN echo "building...."
# CMD: run時に実行
CMD ["echo", "runnning...."]
実行してイメージとして保存
$ sudo docker build -t kiriki/echo .
Sending build context to Docker daemon 14.85 kB
Sending build context to Docker daemon
Step 0 : FROM centos
---> ae0c2d0bdc10
Step 1 : MAINTAINER Shinya Kiriki
---> Using cache
---> 2deb26f90244
Step 2 : RUN echo "building...."
---> Using cache
---> f3ce1a798a0e
Step 3 : CMD ["echo", "runnning...."]
---> Running in 069b76d2b384
---> cef0238dd965
Removing intermediate container 069b76d2b384
Successfully built cef0238dd965
保存したイメージからコンテナを実行
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
s_kiriki/echo latest cef0238dd965 About a minute ago 224 MB
....
....
$ sudo docker run s_kiriki/echo
runnning....
WEBサーバーを立ちあげ
Dockerfilewを編集
FROM centos
MAINTAINER Shinya Kiriki
RUN yum install -y httpd
ADD ./index.html /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
index.htmlを作成
<html>
Docker test
</html>
イメージを作成
sudo docker build -t s_kiriki/httpd .
コンテナを実行
$sudo docker run -p 8080:80 -d s_kiriki/httpd #ホスト側の8080ポートをコンテナの80番にリダイレクト
これで、最初にVagrantfileで設定したipの8080ポート(http://192.168.55.44:8080/
)でアクセス可能