Docker バインドマウントしてデータを永続化してみる
前回はApache コンテナを起動してみました。
このままだと一度コンテナを削除するとファイルや設定情報などは消えてしまいますので、バインドマウントをしてデータ保存先を Docker から分離してみたいと思います。
バインドマウントしてみる
最初に対象のディレクトリを作成してみます。
[root@ec2-user]# mkdir bindData [root@ec2-user]# ll total 0 drwxr-xr-x 2 root root 6 Jan 9 21:01 bindData [root@bindData]# pwd /home/ec2-user/bindData
作成した以下ディレクトリをバインド先にします。
/home/ec2-user/bindData
ではコンテナを起動してみようと思いますが、その前に前回作成したコンテナが残ってたので削除しちゃいます。
[root@bindData]# docker stop webapp1 webapp1 [root@bindData]# docker rm webapp1 webapp1 [root@bindData]#
これできれいになったのでコンテナを起動してみますが、その際に赤字部分にマウントするパスをセットしてあげます。
docker run -dit --name webapp1 -p 8080:80 -v /home/ec2-user/bindData:/usr/local/apache2/htdocs/
httpd:2.4
[root@bindData]# docker run -dit --name webapp1 -p 8080:80 -v /home/ec2-user/bindData:/usr/local/apache2/htdocs/ httpd:2.4 1e6796d3fd27a9d0a630d7c6809d53aa86eb723345e7da93300363445f295bdd [root@bindData]# [root@bindData]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e6796d3fd27 httpd:2.4 "httpd-foreground" 5 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp webapp1 [root@bindData]#
コンテナは起動されましたので、URL:ポートでアクセスしてみます。
何もないのでこうなりますよね。ではindex.html を置いてみます。
[root@bindData]# ll total 4 -rw-r--r-- 1 root root 154 Jan 9 21:49 index.html [root@bindData]# cat index.html <html> <head> <meta http-equiv="content-type" charset="utf-8"> </head> <body> <div>Docker バインドマウント</div> </body> </html> [root@bindData]#
再度ブラウザをリロードしてみると表示されました。
コンテナを新たに作成
今起動しているコンテナを停止、削除後、再度Apacheコンテナを起動します。(今回はwebapp2という名前にしてみました)
[root@bindData]# docker stop webapp1 webapp1 [root@bindData]# docker rm webapp1 webapp1 [root@bindData]# [root@bindData]# docker run -dit --name webapp2 -p 8080:80 -v /home/ec2-user/bindData:/usr/local/apache2/htdocs/ httpd:2.4 d256c64c0371a6e961ee66b6fc1e84f85fa9810ba165e23df91e3f0e739fbf41 [root@bindData]#
新たに作成したコンテナでも index.html ちゃんと表示されました。
おわり。