docker/CH1: Docker imagesとVolumeについて
Docker
このページではdockerのimageとvolumeについて捜査を交えながら説明します。 local環境で行うのですが、ローカル環境でdockerを使えるようにしておく必要があります。 もしまだインストールしていなかったら、「docker インストール mac」とかぐぐると色々やり方が出てくるともいます。
(base) y.nakata@MacBook-Pro-4 website % docker -v Docker version 19.03.13, build 4484c46d9d
### Docker vs VM
Docker benefits
- コンテナの起動が早い
- 少ない容量で構築できるので無駄にサーバーのスペースを占有しない
- メモリーの使用率が低い
- OS全てを使わないので、複数の環境を構築可能
Images
コンテナ操作
nginxのimageをpullする
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
852e50cd189d: Pull complete
a29b129f4109: Pull complete
b3ddf1fa5595: Pull complete
c5df295936d3: Pull complete
232bf38931fc: Pull complete
Digest: sha256:c3a1592d2b6d275bef4087573355827b200b00ffc2d9849890a4f3aa2128c4ae
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
Dockerのコンテナを立てる前にどのようなコンテナの中身にするかの設計が書かれているimageをdcoker hubよりダウンロードしてくる。
Docker Hub 色々なアプリケーションのimageがあるので使いたいものをpullして、対象のアプリケーションコンテナを構築することでそのアプリケーションが使えるようになる。
pullしてきたimageを確認する
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest daee903b4e43 2 days ago 133MB
コンテナを建てる
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker run nginx:latest /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up
コンテナを確認
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db548a38af4d nginx:latest "/docker-entrypoint.…" 49 seconds ago Up 48 seconds 80/tcp silly_lewin
Portを開く
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker run -d -p 8080:80 nginx:latest 22cf87a188980192a7771371c1c174202dbd3b530d98580a534f705541c4a71e
というコマンドを打つことで、localhostの8080ポートとコンテナの80ポートを接続できるようにしている。
この後にウェブブラウザでlocalhost:8080
に接続するとコンテナのnginxに接続することができる。
もちろん、8080以外も接続できるので、
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker run -d -p 3000:80 nginx:latest 22cf87a188980192a7771371c1c174202dbd3b530d98580a534f705541c4a71e
というコマンドでもOK
Volumesについて
コンテナとホスト(ローカルPC)間のデータの共有を可能にするために使用する
nginx (docker hub): https://hub.docker.com/_/nginx
共有しているvolumeでhtmlファイルを表示させる
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker run --name website -d -p 8080:80 nginx b86b995e912390fda2885ef65c89316d3ec4d80fb1cc1642a195351e16c8f7eb
imageの時と同様にlocalhostの8080とdockerコンテナの80ポートを接続する.
その後、websiteでlocalhost:8080
に接続できるかを確認する。
docker stopで一旦コンテナを止める
(base) y.nakata@MacBook-Pro-4 docker_tutorial % docker stop website website
Desktopに~/Desktop/website/index.html
というhtmlファイルを作成する
中身は適当。
<h1> hello docker html </h1>
(base) y.nakata@MacBook-Pro-4 website % docker run --name website -v $(pwd):/usr/share/nginx/html:ro -d -p 8080:80 nginx
というコマンドで、-vでvolumをどこにマウントするかを指定して、pwdでwebsiteであることを教えてあげる。
多分これでも良い。
(base) y.nakata@MacBook-Pro-4 website % docker run --name website -v ~/Desktop/website/index.html:/usr/share/nginx/html:ro -d -p 8080:80 nginx
この、/usr/share/nginx/html:ro
というのはdocker hubのnginxの公式READMEに書いてある。
(https://hub.docker.com/_/nginx ここの、Hosting some simple static contentというタイトルのところ)
:ro
というのはread onlyでファイルを共有する(マウントする)というのを指定している。
・そのため、コンテナ内でtouch
コマンドを使うことができない。
・:roを外すと、read onlyでない状態でコンテナを起動できる。
表示する
コンテナを起動
(base) y.nakata@MacBook-Pro-4 website % docker run --name website -v $(pwd):/usr/share/nginx/html:ro -d -p 8080:80 nginx 1f6aab1df9e5566a817629ee9b7da93f00b4231772b6ece5d65e2599a4b26c06
すると、このようにhtmlファイルが表示される
dockerコンテナを起動したまま、変更を加えても変更が反映されるようになる。
dockerのコンテナ中で作業する
(base) y.nakata@MacBook-Pro-4 website % docker exec -it website bash root@1f6aab1df9e5:/# ls bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@1f6aab1df9e5:/# ls -al total 88 drwxr-xr-x 1 root root 4096 Nov 21 08:50 . drwxr-xr-x 1 root root 4096 Nov 21 08:50 .. -rwxr-xr-x 1 root root 0 Nov 21 08:50 .dockerenv drwxr-xr-x 2 root root 4096 Nov 17 00:00 bin drwxr-xr-x 2 root root 4096 Sep 19 21:39 boot drwxr-xr-x 5 root root 340 Nov 21 08:50 dev drwxr-xr-x 1 root root 4096 Nov 18 07:48 docker-entrypoint.d -rwxrwxr-x 1 root root 1202 Nov 18 07:47 docker-entrypoint.sh drwxr-xr-x 1 root root 4096 Nov 21 08:50 etc drwxr-xr-x 2 root root 4096 Sep 19 21:39 home drwxr-xr-x 1 root root 4096 Nov 18 07:48 lib drwxr-xr-x 2 root root 4096 Nov 17 00:00 lib64 drwxr-xr-x 2 root root 4096 Nov 17 00:00 media drwxr-xr-x 2 root root 4096 Nov 17 00:00 mnt drwxr-xr-x 2 root root 4096 Nov 17 00:00 opt dr-xr-xr-x 130 root root 0 Nov 21 08:50 proc drwx------ 2 root root 4096 Nov 17 00:00 root drwxr-xr-x 1 root root 4096 Nov 21 08:50 run drwxr-xr-x 2 root root 4096 Nov 17 00:00 sbin drwxr-xr-x 2 root root 4096 Nov 17 00:00 srv dr-xr-xr-x 13 root root 0 Nov 21 08:50 sys drwxrwxrwt 1 root root 4096 Nov 18 07:48 tmp drwxr-xr-x 1 root root 4096 Nov 17 00:00 usr drwxr-xr-x 1 root root 4096 Nov 17 00:00 var
bootstrap のページを表示する
Bootstrap One Page Templates https://bootstrapmade.com/bootstrap-one-page-templates/
このサイトから好きなものを選んで、ソースをダウンロードしてくる。 今回はこれ。
ファイル: Lonely.zip (4.2 MB)
website配下に中身をコピーする。
(base) y.nakata@MacBook-Pro-4 website % ls
Readme.txt assets changelog.txt forms index.html inner-page.html portfolio-details.html
(base) y.nakata@MacBook-Pro-4 website % pwd
/Users/y.nakata/Desktop/website
すると、index.htmlを表示するはず。。。
(base) y.nakata@MacBook-Pro-4 website % docker run --name website -v $(pwd):/usr/share/nginx/html:ro -d -p 8080:80 nginx 63af065d9ce329df04a2fbc0df8f61de393bca7bfcea666a4a7bf36de268aeef
見事ページが表示されました!