サイトアイコン puti se blog

インフラエンジニアが始める初めてのDockerで必要な概要コマンド

いよいよ、インフラエンジニアもユーザーからのニュース記事イメージ先行の根拠の無いコンテナ・マイクロサービス化の要望が来る時代になりました。
実際、コンテナはどうなのか?と言う意味合いで、
インフラエンジニアの初心者Dockerに必要な知識情報をまとめます。

前提条件・環境

を使用し、Docker環境を構築し、コンテナ起動をさせてみました。

Dockerのインストール、構築方法

1、LinuxにDockerパッケージをインストールします。

sudo yum update -y

sudo amazon-linux-extras install docker

2、Dockerサービスを起動します

sudo service docker start

基本は、これで終わりです。

参考、rootユーザー以外でdockerサービスにアタッチできるようにする

AWSの一般ユーザー「ec2-user」でdockerサービスを操作できるようにするためには、

sudo usermod -a -G docker ec2-user

一度、sshのターミナルをログアウト切断し、再度sshでec2-userでログインする。すると、sudoを使用せずにdockerコマンドが利用できることが確認できます。

docker info

上記dockerコマンドでエラーが出ないことを確認します。

参考、Amazon ECS における Docker の基本 - Amazon Elastic Container Service

インフラエンジニアに理解しやすいsshdのDockerイメージの作成

1、ec2-userでDockerfileを作成する。

vi Dockerfile

以下のインフラエンジニアが試せ、理解しやすいsshdのDockerfileの内容で作成する。

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

SSH login fix. Otherwise user is kicked off after login

RUN sed 's@session\srequired\spam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

Dockerファイルを理解するポイントは、最後のCMD。
最後のCMDでデーモンプロセスを一つ起動させるのがコンテナの特徴。
基本的に、複数のデーモンプロセスは起動できず(頑張れば可能)、一つのデーモンをワンパッケージに出来るのがコンテナの特徴であり、インフラエンジニアが理解するためのポイントになります。

2、DockerfileからDockerイメージを作成する

※ ポイントですが「Dockerイメージ名≠コンテナ名」です。

docker build -t hello-sshd .

上記コマンドで、Dockerfileイメージファイルをビルドします。

docker images --filter reference=hello-sshd

上のコマンドで、イマージファイルが正しく作成されて管理されていることを確認します。

3、Dockerイメージからのコンテナ起動

docker run -t -i -p 1022:22 hello-sshd

上記コマンドを実行するとプロンプトは戻ってきません。
デーモンをコンテナと言うワンパッケージで起動できている状態です。
そして、DockerfileからではなくビルドしたDockerイメージから毎回コンテナは起動します(docker run起動のたびに毎回、 apt-get でインストールしているわけでは無く、イメージファイルが出来上がりそこからrun起動している)。

Dockerのネットワーク的な理解も必要なのですが、上記コマンドはDockerホストの1022ポートに、Dockerコンテナの22番ポートをマッピングしコンテナを起動するという意味合いです。

4、コンテナにネットワーク接続してみる

Dockerホストの1022番ポートにssh接続すると、Dockerコンテナに接続できます。

ssh root@127.0.0.1 -p 1022

上記、Dockerホストからssh接続したコマンドです。
今回はDockerホストから接続してみたので、127.0.0.1ですが、実際はDockerホストのIPアドレスで接続できます。
パスワードは、Dockerfileでデーモンを実施する前に設定した「password」になっています。

Dockerコンテナの起動・停止・コンソール接続といったよく使用するトラブルシューティングにも使えるDocker操作コマンド

Dockerイメージを起動させるコマンド

docker run -t -i -p 1022:22 hello-sshd

これでイメージ名「hello-sshd」からコンテナが起動できました。
コンテナ名は、hello-sshdでは無いです。

コンテナ名の確認方法コマンド

docker ps

コマンドを実行し、出力のNAMESに記載されているのがコンテナ名です。

コンテナに入りコンソール接続するdockerコマンド。トラブルシューティングに便利

docker exec -it <コンテナ名> <コンテナ内で実行するコマンド>

上記コマンドで、コンテナ内のシェルに接続できます。
コンテナの挙動がわからない時に、コンテナに入りトラブルシューティングが出来ます。(ただしワンパッケージコンテナのなので、インストールされているパッケージは標準で少ないです。pingも無し)

コンテナを停止するdockerコマンド

docker stop <コンテナ名>

で、実行中のコンテナを停止できます。
プロンプトが返ってこなかったdockerホストの実行コマンドは終了されプロンプトが戻ってきます。
また、

docker ps

を実施してもコンテナが一つも動いていないことが確認できます。

モバイルバージョンを終了