Dockerfileでカスタムイメージを作成してみました。
利用したイメージはDocker Hubにあるcentos/httpdです。
https://hub.docker.com/r/centos/httpd/
- centos/httpdイメージのダウンロード
- コンテナ作成・起動
- bashを起動
- index.htmlの作成
- Webブラウザでアクセス
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ docker pull centos/httpd Using default tag: latest latest: Pulling from centos/httpd 785fe1d06b2d: Pull complete 11ab8f4c345d: Pull complete 68efd29fbc4a: Pull complete 516852272af9: Pull complete Digest: sha256:d76aaac3b483cc7cb51ec16a48a717b9cbbb55df759613f6fcb94ac674e33b28 Status: Downloaded newer image for centos/httpd:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest a8493f5f50ff 11 days ago 192 MB centos/httpd latest 77946d4aa0c2 4 weeks ago 245 MB hello-world latest 48b5124b2768 3 months ago 1.84 kB |
取り敢えず起動してみます。
1 2 3 4 5 6 7 |
$ docker run --name CentOS7-httpd -d -p 80:80 centos/httpd c74a5e5037be256b75a20fd765cce93b70571b2451407507ec6f12074f6f8977 [matsuoka@centos7 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c74a5e5037be centos/httpd "/run-httpd.sh" 5 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp CentOS7-httpd 00337221294a centos "/bin/bash" 2 hours ago Up 2 hours mycentos7 490d4cbdfb7a centos "/bin/bash" 2 hours ago Up 2 hours mycentos7-ip |
インタラクティブでbashを起動してコンテナにアタッチします。
1 |
$ docker exec -it CentOS7-httpd /bin/bash |
/var/www/htmlにはファイルが何も無いのでテスト用にindex.htmlを作成します。コンテナ内でのアクセスはできました。
1 2 3 4 5 6 |
[root@c74a5e5037be /]# echo \<H1\>RootLinks\<\/H1\> > /var/www/html/index.html [root@c74a5e5037be /]# cat /var/www/html/index.html <H1>RootLinks</H1> [root@c74a5e5037be /]# curl http://127.0.0.1 <H1>RootLinks</H1> [root@c74a5e5037be /]# |
さて、ここからがDockerfileの勉強です。
Dockerfileと言う定義ファイルを作成してこれを元に自分用のカスタムイメージが作成できるようです。
Dockerfile reference
https://docs.docker.com/engine/reference/builder/
初めてなのでindex.htmlを組込んだ簡単なイメージを作成してみます。
- Dockerファイル用ディレクトリ
- Dockerファイル作成
- index.htmlの作成
- build
- rootlinks/httpdのコンテナ作成、起動
- アクセス
メンテナンスを考慮してディレクトリを作成した方がよさそうなので。
1 2 |
$ mkdir -p Docker/CentOS.httpd $ cd Docker/CentOS.httpd/ |
index.htmlを組込むだけの簡単なDockerファイルです。
1 2 3 4 5 6 |
$ vi Dockerfile $ cat Dockerfile FROM centos/httpd COPY ./index.html /var/www/html/index.html |
組込むindex.htmlを作成します。
1 |
$ echo \<H1\>RootLinks\<\/H1\> > index.html |
docker buildでイメージを作成します。
1 2 3 |
$ docker build -t RootLinks/httpd . invalid argument "RootLinks/httpd" for t: invalid reference format: repository name must be lowercase See 'docker build --help'. |
あら、repository名は小文字でないとダメなんですね。
rootlinks/httpdができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ docker build -t rootlinks/httpd . Sending build context to Docker daemon 3.072 kB Step 1/2 : FROM centos/httpd ---> 77946d4aa0c2 Step 2/2 : COPY ./index.html /var/www/html/index.html ---> 410077a8bab5 Removing intermediate container 22675d91de0b Successfully built 410077a8bab5 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE rootlinks/httpd latest 410077a8bab5 19 seconds ago 245 MB centos latest a8493f5f50ff 11 days ago 192 MB centos/httpd latest 77946d4aa0c2 4 weeks ago 245 MB hello-world latest 48b5124b2768 3 months ago 1.84 kB |
1 2 3 4 5 6 7 8 |
$ docker run --name httpd -h www -d -p 80:80 rootlinks/httpd 78062b8a16868354011573f1f8aadf028742ed905586f837f47b2e207004e932 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78062b8a1686 rootlinks/httpd "/run-httpd.sh" 6 seconds ago Up 6 seconds 0.0.0.0:80->80/tcp httpd 00337221294a centos "/bin/bash" 2 hours ago Up 2 hours mycentos7 490d4cbdfb7a centos "/bin/bash" 3 hours ago Up 3 hours mycentos7-ip |
組込んだindex.htmlが表示されました。
1 2 3 4 5 |
$ curl http://127.0.0.1 <H1>RootLinks</H1> $ curl http://192.168.1.1 <H1>RootLinks</H1> |
まだまだ初歩の初歩ですな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
$ docker build --help Usage: docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile Options: --build-arg list Set build-time variables (default []) --cache-from stringSlice Images to consider as cache sources --cgroup-parent string Optional parent cgroup for the container --compress Compress the build context using gzip --cpu-period int Limit the CPU CFS (Completely Fair Scheduler) period --cpu-quota int Limit the CPU CFS (Completely Fair Scheduler) quota -c, --cpu-shares int CPU shares (relative weight) --cpuset-cpus string CPUs in which to allow execution (0-3, 0,1) --cpuset-mems string MEMs in which to allow execution (0-3, 0,1) --disable-content-trust Skip image verification (default true) -f, --file string Name of the Dockerfile (Default is 'PATH/Dockerfile') --force-rm Always remove intermediate containers --help Print usage --isolation string Container isolation technology --label list Set metadata for an image (default []) -m, --memory string Memory limit --memory-swap string Swap limit equal to memory plus swap: '-1' to enable unlimited swap --network string Set the networking mode for the RUN instructions during build (default "default") --no-cache Do not use cache when building the image --pull Always attempt to pull a newer version of the image -q, --quiet Suppress the build output and print image ID on success --rm Remove intermediate containers after a successful build (default true) --security-opt stringSlice Security options --shm-size string Size of /dev/shm, default value is 64MB -t, --tag list Name and optionally a tag in the 'name:tag' format (default []) --ulimit ulimit Ulimit options (default []) |