Abstract
Dockerの仕組みの理解、Docker特有の問題に対する解決の助けになるような箇条書き的な情報、ケーススタディなどを記す.
この記事は技術初心者向けである.
この記事はDockerの成り立ちを体系的に記したものではない.
Dockerのコンテナではlocalectlは使えない
- localectlは、「systemd」というものによって起動されたシステムでのみ使えるコマンドである -> 参考文献
- そして、Dockerではsystemdは使えない->参考文献1,参考文献2
- よって、Dockerでlocalectlは使えない
- しかし、特別なbuild方法を指定することでdockerコンテナでもsystemdを使う方法がある(上の参考文献1,2を参照)
- systemdについての記事-> https://qiita.com/bluesDD/items/eaf14408d635ffd55a18
DockerのvolumeはホストOS上にはない(Linux以外の場合)
- 使用するPC(ホストOS)がLinuxの場合、問題はない. しかし、PCがWindowsとMacの場合、上の問題が発生する.
- 一言で言うと、そもそもDockerというソフトはLinux上でしか動くことが出来ない不思議なソフトウェアである
- そのためWindowsやMacで使用するにはまずLinux仮想マシンを設置する必要がある。そのLinux仮想マシンの作成はWindowsやMacにDockerをインストールしたときに、インストーラーが裏で自動的にやってくれる。
- 従って、dockerの操作は、あたかもMacのターミナルやwindowsのコマンドプロンプトでやってるように見えるが、実はそれは見せかけで、Macのターミナルに打ち込まれたdockerコマンドは一度Linux仮想マシンに渡されて、それをdockerに渡している。
- 従って、dockerコマンドで作成したボリュームも例に漏れず、Linux仮想マシンのディレクトリに保存される。作成したボリュームの表示ディレクトリはホストOSのディレクトリとは全く関係ない
- ホストOSからvolumeにアクセスしたければ、Macの場合は以下のコマンドを実行すればよい:
nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock
- Windowsの場合は、エクスプローラーの窓に
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes
と入力するとアクセスできる(参考文献)
Dockerのコンテナ内のcentosでlocalectlコマンドは実行不可能