読者です 読者をやめる 読者になる 読者になる

set setting reset

インフラ関連の小ネタと備忘録

CentOS7 on vagrant に docker をインストールして nginx で hello world するまで

CentOS7 (vagrant) に docker をインストールして nginx で hello world するまでの記録です。 CentOS7 が vagrant up されていることが前提です。

docker インストール

公式 にあったワンライナーでインストール後、起動します。
なお、このワンライナー/etc/yum.repos.d/docker.repo を自動で作成してくれます。

$ curl -fsSL https://get.docker.com/ | sh
$ systemctl start docker.service

↓ インストール中のログ

[vagrant@localhost ~]$ curl -fsSL https://get.docker.com/ | sh
+ sudo -E sh -c 'sleep 3; yum -y -q install docker-engine'
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
warning: /var/cache/yum/x86_64/7/docker-main-repo/packages/docker-engine-selinux-1.10.0-1.el7.centos.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 2c52609d: NOKEY
docker-engine-selinux-1.10.0-1.el7.centos.noarch.rpm の公開鍵がインストールされていません
Importing GPG key 0x2C52609D:
 Userid     : "Docker Release Tool (releasedocker) <docker@docker.com>"
 Fingerprint: 5811 8e89 f3a9 1289 7c07 0adb f762 2157 2c52 609d
 From       : https://yum.dockerproject.org/gpg
Created symlink from /etc/systemd/system/sysinit.target.wants/lvm2-lvmpolld.socket to /usr/lib/systemd/system/lvm2-lvmpolld.socket.

If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:

  sudo usermod -aG docker vagrant

Remember that you will have to log out and back in for this to take effect!

非 root ユーザで docker コマンドを使うにはコマンドを叩くように言われているので、ついでに実行しておきます。

$ sudo usermod -aG docker vagrant

docker のバージョンは以下のようになりました。

[vagrant@localhost docker]$ docker version
Client:
 Version:      1.10.0
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   590d5108
 Built:        Thu Feb  4 18:34:50 2016
 OS/Arch:      linux/amd64
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Dockerfile の作成

こちらを参考にしながら、適当なディレクトリを作り、Dockerfile を作成します。

[vagrant@localhost docker]$ tree
.
├── Dockerfile
└── index.html

0 directories, 2 files

Dockerfile の中身はこんな感じです。

FROM centos
MAINTAINER hoge hoge@hoge.hoge
RUN yum install -y epel-release
RUN yum install -y nginx
ADD index.html /usr/share/nginx/html/

EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

GPGキーでWARNING出ましたが、ここでは一旦無視。

  • FROM はイメージ名。ローカルになければ dockerhub から取ってくる
  • MAINTAINER はメンテナの名前とメールアドレスを記入
  • RUN はイメージ起動後に実行するコマンド
  • ADD はファイルを指定したパスに配置
  • EXPOSE は Listen するポート
  • ENTRYPOINT は docker run 時に実行するコマンド

index.html には hello world とだけ書いておきました。

docker build

build します。

$ sudo docker build -t centos/nginx:1.0 .
  • -t は image にタグを打つオプション
    • centos/nginx は REPOSITORY 名
    • :1.0 は TAG 名
  • 最後の引数に Dockerfile のあるディレクトリを指定

build が成功すると image ができあがります。

[vagrant@localhost docker]$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos/nginx        1.1                 80d766bb9338        About an hour ago   356 MB
centos/nginx        1.0                 d1345ae2d9a6        9 hours ago         356 MB
centos              latest              61b442687d68        6 weeks ago         196.6 MB
hello-world         latest              690ed74de00f        3 months ago        960 B

docker 実行

build したイメージを実行します。

$ sudo docker run -d -p 80:80 centos/nginx:1.1
753d92d2bf360a529e881efaee564f86840e8d2d649f20825a7132093b45683e
  • -d は docker をバックグラウンド実行
  • -p はポートフォワード設定。 ローカル側:docker側 の順番
  • 実行後の標準出力はコンテナID
 sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
753d92d2bf36        centos/nginx:1.1    "/usr/sbin/nginx -g '"   3 minutes ago       Up 3 minutes        0.0.0.0:80->80/tcp   determined_tesla

コンテナの停止、削除はこのコンテナIDを利用します。

コンテナの中に入ってシェル操作するには以下のオプションで docker run します。

$ sudo docker run -it --entrypoint "/bin/bash" centos/nginx:1.2
[root@920ea5c72a47 /]# 
  • --entrypoint を指定することで Dockerfile の ENTRYPOINT を上書き

確認

これで nginx が起動したので、index.html が見えるはずです。

$ curl -s localhost
hello world

見えました。
ブラウザから確認する場合は vagrant の ip アドレスを指定するとよいでしょう。

Screenshot-3.png

コンテナの停止・削除

コンテナを停止するには以下のコマンドを実行します。

$ sudo docker stop *コンテナID*

コンテナを削除するには以下のコマンドを実行します。

$ sudo docker rm *コンテナID*

コンテナが増えると停止がめんどうなので、for 文でぐるぐるしたり。

$ for p in $(sudo docker ps -a -q); do sudo docker rm -f ${p}; done

image の削除

image の削除は以下のコマンドを実行します。

$ sudo docker rmi *イメージID*

コンテナ実行中は削除できないので注意。

以上、ここまでdesu。

参考

参考にさせていただきましたm(__)m

https://docs.docker.com/engine/installation/linux/centos/ http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html http://qiita.com/hihihiroro/items/d7ceaadc9340a4dbeb8f http://heartbeats.jp/hbblog/2014/07/3-tips-for-nginx-on-docker.html http://qiita.com/kasaharu/items/d4654193d75c67d65226 http://qiita.com/hnakamur/items/afddaa3dbe48ad2b8b5c