前回はDockerfileの書き方について詳しく解説してきました。
今回は、ホストとコンテナの関係を深く理解しよう!ということでホストPC⇔コンテナの
ファイル/フォルダ共有、アクセス権限やポート接続の方法についてみていこう!
Contents
docker run時のオプション指定で実現できること
✅ファイルシステムの共有
✅ファイルへのアクセス権限
✅ポートを繋げる
✅コンピューターリソースの上限
-vオプションを使い、ホストPC↔︎コンテナ間のファイル共有
$ docker run -it -v <host_dir>:<container_dir> <imageID> <command>
1 |
docker run -it -v ${PWD}/www : /var/www ubuntu:latest bin/bash |
-u,-gオプションを使い、ホストPC↔︎コンテナ間のアクセス権限を共有
$ docker run -it -u $(id -u):$(id -g) <imageID> <command>
コマンドでファイル/フォルダのアクセス権限一覧確認
I have no name!@<containerID>:/$ ls -la
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
==============user権限を与えてdocker run================ [〜/Desktop/mounted_folder] % docker run -it -u $(id -u):$(id -g) -v ~/Desktop/mounted_folder:/created_in_run <imageID> /bin/bash =================アクセス権限確認==================== I have no name!@e5b0cd925cc8:/$ ls -la drwxr-xr-x 2 root root 4096 May 6 03:22 created_in_Dockerfile drwxr-xr-x 3 501 dialout 96 May 6 02:31 created_in_run I have no name!@e5b0cd925cc8:/$ cd created_in_Dockerfile I have no name!@e5b0cd925cc8:/created_in_Dockerfile$ touch test touch: cannot touch 'test': Permission denied I have no name!@e5b0cd925cc8:/$ cd .. I have no name!@e5b0cd925cc8:/$ cd created_in_run I have no name!@e5b0cd925cc8:/created_in_run$ touch test I have no name!@e5b0cd925cc8:/created_in_run$ ls first_at_host test |
もう少し詳しくみていこう。ユーザー権限を追加(今回はaaaとbbbというユーザー)し、それぞれに対して/home/aaacと/home/bbb ディレクトリを作る。aaaでコンテナないに入り、/home/bbbにアクセス権限がないところまで確認する。
$ sudo adduser –uid <uid> <username> :
ユーザーID<uid>、ユーザーネーム<username>として追加する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
===========ユーザー権限の追加============ ubuntu@ip-172-31-24-179:/home/aaa$ sudo adduser --uid 1111 aaa ==========全てEnter ============= ubuntu@ip-172-31-24-179:/home/aaa$ sudo adduser --uid 2222 bbb ==========全てEnter ============= ========各ディレクトリのアクセス権限を確認========= ubuntu@ip-172-31-24-179:/home$ ls -la total 20 drwxr-xr-x 5 root root 4096 May 13 15:32 . drwxr-xr-x 23 root root 4096 May 13 15:22 .. drwxr-xr-x 2 aaa aaa 4096 May 13 15:29 aaa drwxr-xr-x 2 bbb bbb 4096 May 13 15:32 bbb drwxr-xr-x 6 ubuntu ubuntu 4096 May 12 13:05 ubuntu ======-uでユーザー権限指定、-vでマウントしてdocker runでコンテナ内に入る===== ubuntu@ip-172-31-24-179:/home$ docker run -u 1111 -v /home/aaa:/home/aaa -v /home/bbb:/home/bbb -it ubuntu bash I have no name!@434a433f0b80:/$ id -u 1111 I have no name!@f669ec5099b9:/home$ cd bbb I have no name!@f669ec5099b9:/home/bbb$ touch touch: missing file operand |
-pオプションを使い、ホストPC↔︎コンテナ間のポートを繋げる
$ docker run -it -p <host_port>:<container_port> <imageID> <command> ※p(publish:繋げる)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[~] $ docker run -it -p 8888:8888 --rm jupyter/datascience-notebook bash jovyan@ef4f6f7e54f3:~$ jupyter notebook (jupyter notebookが立ち上がる) (base) jovyan@ef4f6f7e54f3:~$ jupyter notebook =========表示されるポート(http://127.0.0.1:8888/)にブラウからアクセスするとjupyterが表示される========= [I 09:29:58.424 NotebookApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret [W 2021-05-06 09:29:59.592 LabApp] 'ip' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release. [W 2021-05-06 09:29:59.592 LabApp] 'port' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release. [W 2021-05-06 09:29:59.592 LabApp] 'port' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release. [W 2021-05-06 09:29:59.592 LabApp] 'port' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release. [I 2021-05-06 09:29:59.602 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.8/site-packages/jupyterlab [I 2021-05-06 09:29:59.603 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab [I 09:29:59.607 NotebookApp] Serving notebooks from local directory: /home/jovyan [I 09:29:59.607 NotebookApp] Jupyter Notebook 6.3.0 is running at: [I 09:29:59.607 NotebookApp] http://ef4f6f7e54f3:8888/?token=c90123f27690fc982a1dccb44e9bc3916b1730769bfcb565 [I 09:29:59.607 NotebookApp] or http://127.0.0.1:8888/?token=c90123f27690fc982a1dccb44e9bc3916b1730769bfcb565 [I 09:29:59.607 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 09:29:59.612 NotebookApp] To access the notebook, open this file in a browser: file:///home/jovyan/.local/share/jupyter/runtime/nbserver-479-open.html Or copy and paste one of these URLs: http://ef4f6f7e54f3:8888/?token=c90123f27690fc982a1dccb44e9bc3916b1730769bfcb565 or http://127.0.0.1:8888/?token=c90123f27690fc982a1dccb44e9bc3916b1730769bfcb565 =============================================================================================== |
コンテナに割り当てるコンピュータリソース(メモリ、CPU)の設定
$ docker run -it –cpus <#of CPUs> –memory <bytes> <imageID> <command>
1 2 |
[~] $ docker run -it --rm --cpus 4 --memory 2g ubuntu bash root@e1e654fc057a:/# |
MacでのCPU・メモリの確認コマンド
$ sysctl -n hw.physicalcpu_max : 物理コア数
$ sysctl -n hw.logicalcpu_max : 論理コア数
$ sysctl hw.memsize : メモリ(byte)
1Kbyte=1024byte, 1Mbyte=1024×1024byte, 1Gbyte=1024×1024×1024byte
コンテナの詳細な情報を確認する方法(inspctで全表示、grepでピンポイントに表示)
$ docker inspect <containerID>
$ docker inspect <containerID> | grep -i <something>
以上となります。今回はdocker run時の様々なオプションについて解説しましたが、いかがだったでしょうか?
次回はDockerを使って、UbuntuOSのGPU環境構築の方法について解説して行きたいと思います。
今回はこの辺で、バイバイ👋
○プログラミング初心者
○Dockerの基礎の基礎部分を勉強したい人