LoginSignup
47
45

More than 5 years have passed since last update.

Dockerコンテナを作成してnginxを起動する

Last updated at Posted at 2015-02-28

はじめに

CentOS 6.6のDockerサーバ(DockerホストOS)上で、Dockerfileを用いてDockerコンテナを作成し、Dockerコンテナ内にnginxをインストールして起動する手順です。

対象環境

Dockerをインストールする環境、作成するDockerコンテナの環境は以下になります。

[DockerホストOS側環境]
・CentOS release 6.6 (2.6.32-504.8.1.el6.x86_64)
・docker-io 1.4.1-3

[Dockerコンテナ側環境]
・CentOS release 6.6 (2.6.32-504.8.1.el6.x86_64)
・nginx 1.6.2-1

参考サイト

以下のサイトを参考にさせて頂きました。

DockerホストOS側のDockerインストール手順

・CentOS 6.6サーバ(DockerホストOS化したいサーバ)へのDockerインストール手順については、以下をご参照下さい。

・Dockerをインストールしたら「service docker start」コマンドを実行し、Dockerデーモンプロセスを起動しておきます。

DockerホストOS上でDockerコンテナ作成

(1) DockerホストOSのCentOS 6.6サーバにrootユーザでログインします。

(2) Dockerイメージ作成用のDockerfileを作成します。

・nginxをインストールするDockerイメージを作成する為、Dockerfileを作成します。

Dockerfileでイメージ作成時にnginxインストールするよう記述します。

[root@example-CentOS-6-6-Docker ~]# mkdir -p /root/docker/centos_nginx
[root@example-CentOS-6-6-Docker ~]# cd /root/docker/centos_nginx/
[root@example-CentOS-6-6-Docker centos_nginx]# vi /root/docker/centos_nginx/Dockerfile
Dockerfile
FROM centos:centos6

MAINTAINER na0AaooQ

ENV PATH $PATH:/usr/bin

RUN yum -y update

RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

RUN yum -y install nginx

RUN echo "example docker contena nginx server" > /usr/share/nginx/html/index.html

ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

EXPOSE 80
[root@example-CentOS-6-6-Docker centos_nginx]# cat /root/docker/centos_nginx/Dockerfile
FROM centos:centos6

MAINTAINER na0AaooQ

ENV PATH $PATH:/usr/bin

RUN yum -y update

RUN rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

RUN yum -y install nginx

RUN echo "example docker contena nginx server" > /usr/share/nginx/html/index.html

ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

EXPOSE 80
[root@example-CentOS-6-6-Docker centos_nginx]#

(3) まずDockerホストOS内にあるDockerイメージ一覧を表示します。

[root@example-CentOS-6-6-Docker centos_nginx]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos:centos6/httpd   latest              c9d152242caa        23 hours ago        278 MB
centos                 centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker centos_nginx]#

(4) 作成したDockerfileからnginx用のDockerイメージを作成します。

[root@example-CentOS-6-6-Docker centos_nginx]# docker build -t centos:centos6/nginx:1.6.2 /root/docker/centos_nginx/

  (中略)

================================================================================
 Package        Arch            Version                    Repository      Size
================================================================================
Installing:
 nginx          x86_64          1.6.2-1.el6.ngx            nginx          336 k

Transaction Summary
================================================================================
Install       1 Package(s)

  (中略)
Step 6 : RUN echo "example docker contena nginx server" > /usr/share/nginx/html/index.html
 ---> Running in 4e89ce67275d
 ---> c0931e25730b
Removing intermediate container 4e89ce67275d
Step 7 : ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
 ---> Running in cfe35565ab36
 ---> 474cc5292d30
Removing intermediate container cfe35565ab36
Step 8 : EXPOSE 80
 ---> Running in c92596234990
 ---> 5f27d9dd5e43
Removing intermediate container c92596234990
Successfully built 5f27d9dd5e43
[root@example-CentOS-6-6-Docker centos_nginx]#

(5) DockerホストOS内にあるDockerイメージ一覧を表示し、nginx用Dockerイメージが作成された事を確認します。

[root@example-CentOS-6-6-Docker centos_nginx]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos:centos6/nginx   1.6.2               5f27d9dd5e43        38 seconds ago      286.3 MB
centos:centos6/httpd   latest              c9d152242caa        23 hours ago        278 MB
centos                 centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker centos_nginx]#

(7) 起動中のDockerコンテナを削除します(任意)。

・他のDockerコンテナを起動したままでも問題ありませんが、nginxをインストールしたDockerコンテナだけ起動したい場合は、起動中のDockerコンテナを削除します。

[root@example-CentOS-6-6-Docker centos_nginx]# docker rm `docker ps -a -q`
[root@example-CentOS-6-6-Docker centos_nginx]#

・Dockerコンテナが起動していない事を確認します。

[root@example-CentOS-6-6-Docker centos_nginx]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@example-CentOS-6-6-Docker centos_nginx]#

(8) Dockerコンテナを作成して起動します。

・Dockerコンテナ作成前、80番ポートにアクセス出来ない事を確認します。

[root@example-CentOS-6-6-Docker centos_nginx]# cd ~
[root@example-CentOS-6-6-Docker ~]# pwd
/root
[root@example-CentOS-6-6-Docker ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@example-CentOS-6-6-Docker ~]# ps awux | grep -v grep | grep nginx
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# curl http://127.0.0.1/
curl: (7) couldn't connect to host
[root@example-CentOS-6-6-Docker ~]#

・Dockerコンテナを作成します。

Dockerコンテナ内のnginxには80番ポートでアクセス出来るよう指定して、Dockerコンテナを作成します。

[root@example-CentOS-6-6-Docker ~]# docker run -d --name example-nginx -p 80:80 centos:centos6/nginx:1.6.2

エラーメッセージ等が表示されずにDockerコンテナ作成が終了した事を確認します。

[root@example-CentOS-6-6-Docker ~]# docker run -d --name example-nginx -p 80:80 centos:centos6/nginx:1.6.2
cb66111b15f3abb070a4a30d632cbdcff1d84706a5ad5126b06c564ea9617153
[root@example-CentOS-6-6-Docker ~]#

DockerホストOSからDockerコンテナ内のnginxへアクセスする

(9) Dockerコンテナのnginxへアクセス出来るかテストします。

・Dockerコンテナ作成後、Dockerコンテナ内のnginx経由でindex.htmlへアクセス出来るか確認します。

以下のように80番ポートを指定して、Dockerコンテナ内のnginxへアクセスし、/usr/share/nginx/html/index.htmlの内容が表示される事を確認します。

[root@example-CentOS-6-6-Docker ~]# hostname
example-CentOS-6-6-Docker
[root@example-CentOS-6-6-Docker ~]# curl http://127.0.0.1/
example docker contena nginx server
[root@example-CentOS-6-6-Docker ~]# curl http://127.0.0.1:80/index.html
example docker contena nginx server
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                CREATED             STATUS              PORTS                NAMES
cb66111b15f3        centos:centos6/nginx:1.6.2   "/bin/sh -c '/usr/sb   8 minutes ago       Up 8 minutes        0.0.0.0:80->80/tcp   example-nginx
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# rpm -qa | grep nginx
[root@example-CentOS-6-6-Docker ~]#

・docker0のIPアドレスを指定して、Dockerコンテナ内のnginx経由でindex.htmlへアクセス出来るか確認します。

DockerホストOS上のdocker0(Dockerコンテナ用仮想ネットワークインターフェース、今回の例では198.51.100.51というIPアドレスで表記しています)を指定して、Dockerコンテナ内のnginxへアクセス出来るか確認します。

なお「docker0」とは、DockerホストOS上でのDockerデーモンプロセス起動時(service docker start実行時)に作成されるDockerコンテナ接続用の仮想ブリッジです。

以下のようにDockerコンテナ内のnginxへアクセスし、/usr/share/nginx/html/index.htmlの内容が表示される事を確認します。

[root@example-CentOS-6-6-Docker ~]# ifconfig
docker0   Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:198.51.100.51  Bcast:198.51.100.255  Mask:255.255.255.0
          inet6 addr: XXXX::XXXX:XXXX:XXXX:XXXX/XX Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7102 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12834 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:427914 (417.8 KiB)  TX bytes:18469881 (17.6 MiB)

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:198.51.100.111  Bcast:198.51.100.255  Mask:255.255.255.0
          inet6 addr: XXXX::XXX:XXXX:XXXX:XXXX/XX Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7671 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4582 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9862768 (9.4 MiB)  TX bytes:421559 (411.6 KiB)
          Interrupt:247
  (省略)
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# curl http://198.51.100.51/
example docker contena nginx server
[root@example-CentOS-6-6-Docker ~]#

DockerホストOS以外の他のサーバからDockerコンテナ内のnginxへアクセスする

(10) DockerホストOS以外の他のサーバからDockerホストOSのIPアドレス(今回の例では198.51.100.111)を指定して、Dockerコンテナ内のnginxへアクセス出来るかテストします。

以下のようにDockerコンテナ内のnginxへアクセスし、/usr/share/nginx/html/index.htmlの内容が表示される事を確認します。

なお、iptables等でcurlを実行するサーバからDockerホストOSのサーバ(198.51.100.111)に対して、TCP80番ポートの通信制限をかけている場合は、あらかじめ通信許可しておきます。

[root@not-docker-server ~]# curl http://198.51.100.111/
example docker contena nginx server
[root@not-docker-server ~]#

DockerホストOS上で起動したDockerコンテナの停止と削除

(11) 検証が終わったら、nginx用のDockerコンテナを停止します。

[root@example-CentOS-6-6-Docker ~]# hostname
example-CentOS-6-6-Docker
[root@example-CentOS-6-6-Docker ~]# docker stop example-nginx
example-nginx
[root@example-CentOS-6-6-Docker ~]#

(12) nginx用のDockerコンテナを削除します。

[root@example-CentOS-6-6-Docker ~]# docker rm example-nginx
example-nginx
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@example-CentOS-6-6-Docker ~]#

DockerホストOS上に作成したDockerイメージ削除

(13) nginx用のDockerイメージが不要になったら、docker rmiコマンドを実行してDockerイメージを削除します。

[root@example-CentOS-6-6-Docker ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos:centos6/nginx   1.6.2               5f27d9dd5e43        34 minutes ago      286.3 MB
centos:centos6/httpd   latest              c9d152242caa        24 hours ago        278 MB
centos                 centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# docker rmi centos:centos6/nginx:1.6.2
Untagged: centos:centos6/nginx:1.6.2
Deleted: 5f27d9dd5e4334e9a6d317080eb54ec801e0818c98f2e6fe9618beff2e658131
Deleted: 474cc5292d30b995c479a5797297fd2e3c49830046aabbad7dd3c9cc27327ed8
Deleted: c0931e25730be44110a84781e923fb8f7978d3d5bdf1411c20c5d3894daa298f
Deleted: c3f598f4dbb5fa14f5a0095e16ea38f9be27b9a683914164df8be69404afde10
Deleted: 84abcaed1d7d278ed069fc90a68e767088ae209d03866af857d28ce9f8ad1bbe
Deleted: 12d365e6e03c95c2286d85209f235ccaec1d8037b6c803441cf43cfee75f26b9
Deleted: 695f94fa6c0b96868d9d2dddbfc08b5f1366f7152955558cd7804bace4451804
Deleted: 12c39f620df1080b907234d34401b7bbb82210d92c4b229f1e71313e30c9f0c4
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos:centos6/httpd   latest              c9d152242caa        24 hours ago        278 MB
centos                 centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# curl http://127.0.0.1:80/index.html
curl: (7) couldn't connect to host
[root@example-CentOS-6-6-Docker ~]#

以上になります。

47
45
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
45