dockerの基本的な使い方

アプリケーション
この記事は約7分で読めます。
スポンサーリンク

イメージとコンテナの違い

イメージはコンテナを作成する元となります。
イメージを使ってコンテナを作成します。
イメージが「インストール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つの環境と立ち上げるだけでも結構重くなります。

コメント

タイトルとURLをコピーしました