はじめに
昨日からdockerさわりはじめたよ!
dockerがとてもはやくて便利ということはわかりました。今後自分が構築したサービス、システムをパッケージしてコンテナ化したい。そのために、コンテナの上に作ってWebサービスにどうやってネットワークを通じてアクセスするか知りたくなりましたので、簡単にhttpdを使って試してみましょう。
docker + httpd
というわけで慣れ親しんだhttpdをいれて80番portでアクセスすることを目指してみましょう。
centosのイメージをpullします。
[vagrant@docker ~]$ sudo docker pull centos:latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos 8d30e94188e7: Pull complete Digest: sha256:2ae0d2c881c7123870114fb9cc7afabd1e31f9888dac8286884f6cf59373ed9b Status: Downloaded newer image for docker.io/centos:latest
そのイメージを使ってコンテナ起動します。
[vagrant@docker ~]$ sudo docker run --privileged -h httpd -d -p 80:80 --name httpd centos /sbin/init 34aa5674a684a0087adce40db9b9e238e0ad6fd214197d0d10d7f524bf819402
オプションについてまとめておきます。--helpを出してみましょう。
[vagrant@docker ~]$ docker run --help Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container
- --privileged Give extended privileges to this container
- -h, --hostname Container host name
- -d, --detach Run container in background and print container ID
- -p, --publish=[] Publish a container's port(s) to the host
- --name Assign a name to the container
--privilegedはホストと同じレベルの権限を許可する、ぐらいの理解でしかないです。なかったらどれだけのことができないんだろう?今回重要なのは-pのポートマッピングですね。ホストとゲストの80番ポートをマップしています。
[vagrant@docker ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 34aa5674a684 centos "/sbin/init" 52 seconds ago Up 49 seconds 0.0.0.0:80->80/tcp httpd
docker psでhttpdという名前のコンテナがでてきましたね。ところでコンテナを作ったあと/sbin/initをやる意味はなんだろう?
[vagrant@docker ~]$ sudo docker exec -it httpd /bin/bash [root@httpd /]# yum -y install httpd Loaded plugins: fastestmirror, ovl base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/4): extras/7/x86_64/primary_db | 166 kB 00:00:00 (2/4): base/7/x86_64/group_gz | 155 kB 00:00:00 (3/4): updates/7/x86_64/primary_db | 8.4 MB 00:00:01 (4/4): base/7/x86_64/primary_db | 5.3 MB 00:00:01 Determining fastest mirrors * base: ftp.tsukuba.wide.ad.jp * extras: ftp.tsukuba.wide.ad.jp * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed --> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64 --> Running transaction check ---> Package apr.x86_64 0:1.4.8-3.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed ---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed ---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================================================================== Package Arch Version Repository Size ========================================================================================================================================================== Installing: httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M Installing for dependencies: apr x86_64 1.4.8-3.el7 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k centos-logos noarch 70.0.6-3.el7.centos base 21 M httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k mailcap noarch 2.1.41-2.el7 base 31 k Transaction Summary ========================================================================================================================================================== Install 1 Package (+5 Dependent packages) Total download size: 24 M Installed size: 31 M Downloading packages: warning: /var/cache/yum/x86_64/7/base/packages/apr-1.4.8-3.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEYs | 0 B --:--:-- ETA Public key for apr-1.4.8-3.el7.x86_64.rpm is not installed (1/6): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:00 (2/6): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:00 Public key for httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm is not installed (3/6): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:00 (4/6): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:00 (5/6): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:01 (6/6): centos-logos-70.0.6-3.el7.centos.noarch.rpm | 21 MB 00:00:02 ---------------------------------------------------------------------------------------------------------------------------------------------------------- Total 8.1 MB/s | 24 MB 00:00:02 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-2.1511.el7.centos.2.10.x86_64 (@CentOS) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-3.el7.x86_64 1/6 Installing : apr-util-1.5.2-6.el7.x86_64 2/6 Installing : httpd-tools-2.4.6-40.el7.centos.4.x86_64 3/6 Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6 Installing : mailcap-2.1.41-2.el7.noarch 5/6 Installing : httpd-2.4.6-40.el7.centos.4.x86_64 6/6 Verifying : apr-1.4.8-3.el7.x86_64 1/6 Verifying : httpd-tools-2.4.6-40.el7.centos.4.x86_64 2/6 Verifying : apr-util-1.5.2-6.el7.x86_64 3/6 Verifying : httpd-2.4.6-40.el7.centos.4.x86_64 4/6 Verifying : mailcap-2.1.41-2.el7.noarch 5/6 Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6 Installed: httpd.x86_64 0:2.4.6-40.el7.centos.4 Dependency Installed: apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 centos-logos.noarch 0:70.0.6-3.el7.centos httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 mailcap.noarch 0:2.1.41-2.el7 Complete!
コンテナにログインしてhttpdをインストールします。ホスト名もちゃんと設定されてますね。
ちなみにipコマンドとか使えなく、dockerコンテナはkernelコマンドしか使えないぐらい最低限しか入っていないそう。なるほどね。
[root@httpd /]# systemctl start httpd [root@httpd /]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2016-10-18 13:23:40 UTC; 4s ago Docs: man:httpd(8) man:apachectl(8) Main PID: 165 (httpd) Status: "Processing requests..." CGroup: /system.slice/docker-34aa5674a684a0087adce40db9b9e238e0ad6fd214197d0d10d7f524bf819402.scope/system.slice/httpd.service ├─165 /usr/sbin/httpd -DFOREGROUND ├─166 /usr/sbin/httpd -DFOREGROUND ├─167 /usr/sbin/httpd -DFOREGROUND ├─168 /usr/sbin/httpd -DFOREGROUND ├─169 /usr/sbin/httpd -DFOREGROUND └─170 /usr/sbin/httpd -DFOREGROUND Oct 18 13:23:40 httpd systemd[1]: Starting The Apache HTTP Server... Oct 18 13:23:40 httpd httpd[165]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set...s message Oct 18 13:23:40 httpd systemd[1]: Started The Apache HTTP Server. Hint: Some lines were ellipsized, use -l to show in full. [root@httpd /]# systemctl enable httpd Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. [root@httpd /]# exit exit [vagrant@docker ~]
httpdを立ち上げます。
[root@httpd /]# vi /var/www/html/index.html hello docker!
ドキュメントルートにindex.htmlを書いて
[vagrant@docker ~]$ curl localhost hello docker!
ホストからcurするとちゃんと表示されましたね!
参考: Docker上のCentOS7にhttpdを最速で立てる方法 | TechBlog
コンテナを保存する
さてここまで作ったコンテナを保存してみましょう。
[vagrant@docker ~]$ sudo docker commit -a "take" httpd take/httpd:1.0 sha256:93fc9046f4e94336445ec678245b7fba3ec2a6f33d79da34002822f6047553b7
docker commitで保存します。
[vagrant@docker ~]$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE take/httpd 1.0 93fc9046f4e9 4 minutes ago 349.7 MB docker.io/mariadb latest 63d91190a69e 3 days ago 389.8 MB docker.io/ubuntu latest f753707788c5 4 days ago 127.1 MB docker.io/centos latest 980e0e4c79ec 5 weeks ago 196.7 MB [vagrant@docker ~]$ sudo docker save -o httpd.tar take/httpd
docker imageに追加されました。さらにtarとして出力します。
[vagrant@docker ~]$ ls -lh 合計 342M -rw-r--r-- 1 root root 342M 10月 18 14:38 httpd.tar
おわりに
今回、dockerコンテナ=プロセスに対してはホストとポートマッピングをして通信するということを学びました!次回はdockerfile を使ってプロビジョニングしたい!