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 アドレスを指定するとよいでしょう。
コンテナの停止・削除
コンテナを停止するには以下のコマンドを実行します。
$ 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