イメージとコンテナの違い
イメージはコンテナを作成する元となります。
イメージを使ってコンテナを作成します。
イメージが「インストールCD」、コンテナが「実際のサーバー」と考えると分かりやすいと思います。
dokerイメージの管理
まずは、dockerのイメージを検索してみます。
Centosで検索してみてもいろいろなバージョンが出てきます。
Officialのイメージを使うことにします。
公式イメージだけを検索する場合は「docker search centos –filter is-official=true」と実行します。
>docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 5880 [OK] ansible/centos7-ansible Ansible on Centos7 128 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 114 [OK] >
では、CentOSのdockerイメージを取得してみます。
イメージは「IMAGE ID」で判別します。
> docker pull centos Using default tag: latest latest: Pulling from library/centos 8a29a15cefae: Pull complete Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700 Status: Downloaded newer image for centos:latest docker.io/library/centos:latest >docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 470671670cac 8 weeks ago 237MB >
イメージを削除する場合は「docker rmi <IMAGE ID>」を実行します。
コンテナの作成
取得したイメージを使用してコンテナを作成します。
> docker run -d -it --hostname CentOS1 --name Server1 centos 1c995ae1a46040987f0ac02a995a5af171dac629632507291b1b351c84630779 > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c995ae1a460 centos "/bin/bash" About a minute ago Up About a minute Server1 >
コンテナへ接続します。
デフォルトでは認証は要求されないので、セキュリティ面としては注意が必要になります。
コンテナ作成時のオプションとしては「hostname」がコンテナのOSに設定されるホスト名になります。「name」オプションはコンテナIDに付与される名称になります。
最後の「centos」は使用するイメージ名になります。
> docker container attach 1c995ae1a460 [root@CentOS1 /]# >
注意点としては「exit」コマンドでログオフするとコンテナが終了する場合があります。
単純にログオフしたい場合は「Ctrl+p」「Ctrl+q」を順番に実行します。
ここはオペレーションとして気を付けておきたいところになります。
「docker run」で起動した場合はコンテナが終了しました。
「docker start」でコンテナ起動した場合は「exit」でログオフしても起動した状態が保たれます。
別な方法として、ログインせずにコマンド実行する方法があります。
コンテナが停止しないので、定型作業の場合はこちらのほうが安全です。
>docker container exec 1c995ae1a460 ps PID TTY TIME CMD 19 ? 00:00:00 ps >
コンテナを起動/停止する場合は「docker start <コンテナID>」「docker stop <コンテナID>」を実行します。コンテナIDの代わりにコンテナ名を指定することもできます。
SSH接続できるコンテナを作成する
dockerコマンドだけではやっぱり運用上厳しいのでSSH接続できる環境を作成します。
dockerコンテナを作成する際に「privileged」オプションを追加します。このオプションはコンテナでサービスを起動させるために必要なオプションとなります。追加でポートフォワード設定を行っておきます。この例では「10022」ポートにアクセスするとdockerコンテナの22番ポートに設定する例になります。
>docker run --privileged -d -it -p 10022:22 --hostname CentOS1 --name Server1 centos /sbin/init >docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7805bfb122db centos "/sbin/init" 11 seconds ago Up 9 seconds 0.0.0.0:10022->22/tcp Server1 >
そのあとはコンテナにログインしてSSHサーバーをインストールしていきます。ユーザーも作成しておいたほうが良いと思います。
>docker exec -it Server1 /bin/bash [root@CentOS1 /]# yum install openssh-server [root@CentOS1 /]# systemctl enable sshd [root@CentOS1 /]# [root@CentOS1 /]# yum install passwd [root@CentOS1 /]# useradd testuser [root@CentOS1 /]# passwd [root@CentOS1 /]# sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
この状態でコンテナを再起動します。接続する場合はIPアドレスを「localhost」にしてポートを「10022」に指定します。
dockerの利点について
VMWareやVirtual Boxのようなハイパーバイザー型と比較されることがありますが、dockerの方が軽量です。
そのため、「とりあえずdockerでテストしてみて上手く動かない場合にハイパーバイザーで構築してみる」という使い分けをしています。
潤沢なリソースがあるのであれば、ハイパーバイザーだけでも良いと思いますが、OS起動だけで500MB~1GBなどのメモリを使用されてしまうので一般的なPCでは1つの環境と立ち上げるだけでも結構重くなります。
コメント