Docker 入門(1) ~ Docker インストールから apache サービスが稼働しているコンテナの生成まで ~
とりあえず Docker 動かしてみる的な手順のまとめです。
環境
Docker for Mac を使います。
コンテナ側の OS は CentOS 7.6 です。
- ホスト OS: macOS Mojava
- Docker バージョン
- docker: 18.09.2
- docker-compose: 1.23.2
- docker-machine: 0.16.1
Docker インストール
Homebrew*1 でインストールします。
$ brew install docker $ brew cask install docker
Docker.app 初回起動時に Docker ID でのログインを求められます。
コンテナの生成
$ docker container run -it --name centos-base centos:7.6.1810 /bin/bash
コンテナが起動すると、プロンプトが root@xxxxxxxxxxxx(container id) になります。
@コンテナ # cat /etc/centos-release CentOS Linux release 7.6.1810 (Core)
status が up なコンテナが起動しています。
@ホスト $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxxxxxxxxxx centos:7.6.1810 "/bin/bash" About a minute ago Up About a minute centos-base
コンテナに httpd パッケージをインストール
OS を最新版にして、httpd をインストールします。
@コンテナ # yum check-update # yum update -y # yum install -y httpd # systemctl enable httpd.service
Docker イメージの作成
httpd をインストールしたコンテナを Docker イメージ化します。
exit を実行して、コンテナを停止します。
@コンテナ # exit
次のコマンドで Docker イメージ(centos:7.6.1810-httpd)を作成します。
@ホスト $ docker container commit centos-base centos:7.6.1810-httpd $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos 7.6.1810-httpd xxxxxxxxxxxx 2 minutes ago 422MB
systemd に対応したコンテナの生成
これまではコンテナ生成時に /bin/bash を起動していましたが、systemd で httpd を起動するようにコンテナを生成します。
CentOS 7 では、/sbin/init が /lib/systemd/systemd へのシンボリックリンクになっているので、コンテナ生成時に /sbin/init を起動します。
@ホスト $ docker container run -itd --tmpfs /tmp --tmpfs /run \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro --stop-signal SIGRTMIN+3 \ --name centos-httpd -p 8080:80 centos:7.6.1810-httpd /sbin/init $ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxxxxxxxxxx centos:7.6.1810-httpd "/sbin/init" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp centos-httpd
今回はホストの 8080 ポートをコンテナの 80 ポートへマッピングしているので、ホスト (localhost) の 8080 へアクセスして、apache のデフォルトページが取得できることを確認します。
@ホスト $ curl http://localhost:8080/
systemd で起動したコンテナへのログインとコンテナ停止
コンテナ生成時に /sbin/init を起動しているので、最初に起動したコンテナのようにコンテナ側プロンプトが表示されません。
コンテナへログインしたい場合は、次のコマンドを実行します。
$ docker container exec -it centos-httpd /bin/bash
コンテナのプロンプト root@xxxxxxxxxxxx(container id) が表示されます。
コンテナからログアウトする場合は、[ control + p ] -> [ control + q] を押します。
コンテナを停止する場合は、コンテナへログインした状態で exit を実行します。
*1:Homebrew は事前にインストールしてください。https://brew.sh/