前回まで
4日前なので内容を忘れてしまった。まあここから取り戻そう。
Persisting container data
コンテナで作られたファイルはコンテナが消えると同時に消える。
でもデータベースなどはコンテナが消えても保持していたいよね?→persistさせる。volumeに
volumeの作り方とマウント(=アタッチ)のさせ方
docker volume create log-data
docker container run -d -p 80:80 -v log-data:/logs docker/welcome-to-docker
こうすることでdocker上の/logsファイルに書き込まれたデータはvolume: log-dataに保存される
try it out
Docker Desktopを起動。問題発生
https://qiita.com/matarillo/items/98d7452967987fe5d633
を参考に仮想マシンの機能を有効化→再起動→無事起動
volumeをマウントしたdockerの作成→削除
同一volumeをマウントした新たなdockerの作成→中身確認
コンテナ作成
docker run --name=db -e POSTGRES_PASSWORD=secret
-d -v postgres_data:/var/lib/postgresql/data postgres
psotgresコマンドの実行
docker exec -ti db psql -U postgres
CREATE TABLE tasks (
id SERIAL PRIMARY KEY,
description VARCHAR(100)
);
INSERT INTO tasks (description) VALUES ('Finish work'), ('Have fun');
SELECT * FROM tasks;
\q
コンテナの停止および削除
docker stop db
docker rm db
新たなコンテナの作成及びvolumeの中身確認
docker run --name=new-db -d -v postgres_data:/var/lib/postgresql/data postgres
docker exec -ti new-db psql -U postgres -c "SELECT * FROM tasks"
新しいコンテナでも前のコンテナで書き込んだのと同じテーブル内容が確認できた
後処理
docker rm -f new-db
docker volume rm postgres_data
volumeをマウントしているコンテナがあると削除できないため、最初に削除する
Sharing local files with containers
-vと-mのどっちでもlocalfileをcontainerとshareすることはできる。
オプションの後がパスかvolumeかで判別するのかな。
-vのほうはマウント先がなかったら勝手に作ってくれるなど新設設計だけど、-mのほうが詳細な設定ができるから
なるだけ-m使えとのこと。
また、read-onlyやread-writeなどfile permissionsも設定できる
try it out
コンテナを作る
docker run -d -p 8080:80 --name my_site httpd:2.4
動作確認
curl localhost:8080
中を確認したらコンテナを消す
次に適当にディレクトリを作って、中にindex.htmlを入れる
作ったディレクトリにcdして以下のコマンドを実行
docker run -d --name my_site -p 8080:80 -v .:/usr/local/apache2/htdocs/ httpd:2.4
localhost:8080にアクセスすると、自分で定義したindex.htmlの内容にそったpageが表示される
次にindex.htmlをguiから消す。
作ったコンテナをクリックしてfilesをたどると、index.htmlがあるので、クリックして右上のごみ箱ボタンを押す→コンテナごと消えた。右クリックしてからdeleteでファイルのみ消える。
この状態でlocalhost:8080にアクセスすると Index of/という簡素な内容のHPにすげ変わっている。
また、ホストマシーンのindex.htmlも消えている。
hostとcontainerでファイルをshareしていることが確認できた。
作ったコンテナは不要なので消す
今日はここまで、明日からは何か創造的というかdocumentの後追いでないことをやりたい