Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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
 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/

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


  • 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
  • -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>80/tcp   determined_tesla


コンテナの中に入ってシェル操作するには以下のオプションで 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*






Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away


No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
Help us understand the problem. What is going on with this article?