
Dockerコンテナを使用すると、アプリやサービスをネットワーク上に展開するのが非常に簡単になります。これにより、ビジネスオファリングを拡張したり、新しいサーバーやサービスを迅速にテストしたりできます。これらのアプリをコンテナ化することで、パッケージマネージャーを介したアプリケーションの管理やソースからのインストールが不要になり、システム管理のオーバーヘッドを削減できます。NGINXなどをDockerコンテナとしてインストールすれば、新しいアップデートがリリースされたときにイメージを簡単に置き換えることができます。
では、NGINXをDockerコンテナとしてデプロイするにはどうすればいいのでしょうか?手順を順にご説明いたします。Ubuntu 16.04を例に、既にDockerがインストールされ、準備が整っていることを前提としています。
大きな課題
Dockerコンテナの実行自体は難しくありません。ただし、コンテナをローカルネットワークで利用できるようにするのは少し難しいです(サーバーで作業する際には重要な点です)。プロセス自体はそれほど難しくなく、適切なコマンドの使い方さえ知っていれば大丈夫です。
イメージを引っ張る
次のコマンドで公式 NGINX イメージを取得します。
docker pull nginx
注: 標準ユーザーを Docker グループに追加していない場合は、次のコマンドで追加します。
sudo gpasswd -a ${USER} docker
このコマンドを実行した後、ログアウトして再度ログインします。これで、sudo を使用せずに Docker を実行できるようになります。
ポートをネットワークに公開する
次に、Dockerコンテナのポートをネットワークポートに公開するようにNGINXイメージを実行する必要があります。これを行うには、次のコマンドでイメージを実行します。
docker run --name docker-nginx -p 80:80 nginx
そのコマンドの内訳は次のとおりです。
- docker – 実際のDockerコマンド
- run – これはdockerにイメージをコンテナとして実行することを指示します
- –name – これはDockerにコンテナの名前を指定します
- -p 80:80 は、Docker にポートをどのように公開するかを通知します (ネットワーク ポート:コンテナ ポートの形式)
- nginx – これはDockerにコンテナに使用するイメージを指示します
これで、ネットワーク上のブラウザで NGINX Docker コンテナをホストしているサーバーの IP アドレスを指定して、NGINX スプラッシュ ページを表示できるようになります。
Dockerをホストするマシンで既にポート80が使用されているとします(Apacheや他のサーバー用かもしれません)。その場合は、コンテナのポート80に別の外部ポートを公開する必要があります。コンテナのポート80をホストのポート8080に公開してみましょう。コマンドは以下のとおりです。
docker run --name docker-nginx -p 8080:80 nginx
ネットワーク上のブラウザでホスト マシンの IP アドレス (ポート 8080) を指定すると、NGINX スプラッシュ ページが表示されます。
デタッチドモードで実行
そのコンテナをデタッチ モードで実行する必要がある場合があります (そうしないと、コンテナを強制終了しないとコマンド プロンプトが返されません)。このコンテナをデタッチ モードで実行するには、コマンドは次のようになります。
docker run --name docker-nginx -p 8080:80 -d nginx
プロンプトが返され (コンテナ ID が表示されます)、作業の準備が整います。
コンテナへのアクセス
ほとんどのコンテナはあらかじめ用意された環境として作成されますが、実行中のコンテナにアクセスして、少し設定を行いたい場合もあるでしょう。そのためには、次のコマンドを実行します。
docker exec -it CONTAINER_ID bash
CONTAINER_ID は実行中のコンテナの実際のIDです。これで、ローカルで作業しているかのようにコンテナ内で作業できます。コンテナ内で作業するために必要なツール(viやnanoなど)をインストールする必要があるかもしれません。これらは通常の方法(例:apt-get install nano)でインストールできます。ただし、通常の方法(vi、nano、lessなど)ではファイルを表示できないというエラーが発生します。これを回避するには、コンテナの実行コマンドを変更して、xterm変数を設定する必要があります。例:
docker run --name docker-nginx-new -p 8080:80 -e TERM=xterm -d nginx
これで、コンテナに入ると、選択したエディターをインストールして実際に操作できるようになります。
コンテナを簡単に
これで完了です。Dockerコンテナ経由で動作するNGINXインスタンスが完成し、ローカルネットワークからアクセスできるようになりました。それほど難しくなかったでしょう?Dockerコンテナのスキルを全く新しいレベルに、しかも簡単に引き上げることができました。