DockerでLinux演習環境を用意

Created
2021/6/29 13:22
Tags

DockerでLinux演習環境を用意する

LPIC レベル1取得のため、学習用のLinux演習環境を用意します。
参考書がいわゆる「小豆本」で、CentOS 7とUbuntu 18.04で動作確認されています。
仕事でCentOSを触っているので、CentOS 7の環境を用意することにします。
 

作成

docker run -it -d --name centos7 centos:centos7
docker run -d --privileged --name centos7 centos /sbin/init
オプション -it:コンテナのプロセスにttyを割り当てる  *tty:標準入出力となっている端末デバイスの名前を表示するUnix系のコマンド テレタイプライター が由来らしい -d:コンテナをバックグラウンドで実行する –name:作成するコンテナに名前をつける

起動

docker start centos7 /sbin/init

CentOS 7 コンテナ内の Bash を実行

docker exec -it centos7 /bin/bash

停止

docker stop centos7

削除

docker rm centos7
 
dmesgが実行できず困った。コンテナはあくまで1プロセス…うーんわからん。素直にテキストの通りVirtualBoxで環境を作ろう…。
Dockerでdmesgを実行すると、「dmesg:カーネルバッファーの読み取りに失敗しました:アクセスが拒否されました」という結果になります。
Michael Hampton で述べたように、コンテナは単一のアトミックサービスのみを実行することを目的としています。実際のところ、コンテナは仮想マシンではなく、ローカルホスト上の単一のプロセスであることを理解する必要があります。 それにもかかわらず、私はそれを知るようになりました ここ からコンテナ内でSystemDを動作させるのは少し難しいです SystemDをcentos:centos7からビルドされたイメージ内で動作させることができました。 docker run --privileged -ti -e "container = docker" -v/sys/fs/cgroup:/ sys/fs/cgroup trinitronx/ansible-base:stable-centos7/usr/sbin/init 文書化されていない理由により、変数container = dockerが明らかに必要です。/sys/fs/cgroupも必要です。これは、SystemDがRedHat Bug 1033604に従って正しく機能するためにcgroupを必要とするためです。 これを行った後、 docker exec -it /bin/bashを使用してコンテナにログインしてみてください。そうすれば、 systemctl コマンドを実行できます。