個人学習プロジェクト 「Security Learning Lab(SLL)」 の学習記録です。
今回は、Phase3「Docker」の入り口として、EC2にDockerをインストールし、Nginxコンテナを実際に起動するところまでの内容をまとめます。
学習時間
約1〜2時間
今日やったこと
- Dockerの概念(コンテナ・イメージ)を、素のNginx導入経験と比較しながら整理
- EC2にDockerをインストール・起動・自動起動設定
- Docker Hubからnginxイメージを取得し、コンテナを起動(ポート8080でホストと連携)
- SSH接続が切れる問題に対処するため、Mac側の
~/.ssh/configに接続維持設定を追加 docker psでコンテナの稼働状況を確認curlでEC2内部からコンテナへの疎通を確認
学習内容
Dockerの基本概念
Dockerは、1つのサーバーの中に「コンテナ」という独立した小部屋を複数作れる技術。素のままソフトを入れ続けると、ソフト同士の干渉や管理の煩雑化が起きやすいが、コンテナ単位で分離することでそれを防げる。
イメージとコンテナの関係
イメージは「設計図+材料一式」であり、コンテナはそのイメージをもとに実際に組み立てて動かした状態。イメージが先にあり、それをもとにDockerがコンテナを生成する、という順序になる。イメージはDocker Hubという場所から取得でき、ローカルになければ自動的にダウンロードされる。
ポートマッピング(-pオプション)
コンテナは外の世界(ホストOS)から隔離されているため、外部と通信するには-p ホスト側ポート:コンテナ側ポートで橋渡しの設定が必要。今回は-p 8080:80で、EC2の8080番とコンテナ内のNginx(80番)を紐付けた。
ホストのソフトとコンテナ内のソフトは別物
同じ「nginx」という名前でも、EC2に直接インストールしたNginxと、Dockerコンテナ内のNginxは完全に独立した別の存在。ホスト側の設定変更はコンテナに一切影響しない(逆も同様)。
curlコマンド
curlはコマンドラインからWebサイトにアクセスし、返ってきた中身をそのままテキストで表示するツール。ブラウザが使えない状況(SSH接続中のサーバー内部など)での動作確認に使える。
困ったこと・つまずいたこと
SSH接続がタイムアウトで頻繁に切れる
- 何に困ったか:操作していないとSSH接続が自動的に切断されてしまう
- どう解決したか:Mac側の
~/.ssh/configにServerAliveInterval 60を設定し、定期的に接続維持の信号を送るようにした。誤ってEC2側のファイルに書いてしまう一幕もあったが、Mac側で正しく設定し直して解決
外部ブラウザからコンテナにアクセスできなかった
- 何に困ったか:8080番ポートはセキュリティグループでまだ許可していないため、外部から直接アクセスできない
- どう解決したか:今回は
curl http://localhost:8080でEC2内部から疎通確認する方法に切り替えて対応した(外部公開は次回以降の課題)
今日の学び・気づき
- 「コンテナを作るには必ずイメージが必要」という点を通じて、Dockerが「空の箱を用意してから中身を入れる」のではなく「設計図をもとにその場でコンテナごと生成する」という仕組みだと理解できた
- 同じソフト名でも、ホストとコンテナでは完全に独立した別物として扱われるという性質が、Dockerの「干渉しない」という利点の核心だと実感した
- 外部からすぐに確認できない状況でも、
curlで内部から段階的に切り分けて検証する、という実務的な確認の進め方を体験できた
今日の達成
Dockerデビュー
EC2にDockerをインストールし、Nginxコンテナを実際に起動・動作確認するところまで完了した。
次回やること
- セキュリティグループで8080番を開放し、外部ブラウザからコンテナにアクセスできるようにする
- Docker Composeなど、複数コンテナの管理方法に進む
今日のひとこと
Dockerとはなんなのか、細かく確認したことでだいぶ理解が深まったように思う。ソフトウェアという言葉はよく聞くけど、概念が抽象的だから、細かい区分の理解に苦労する。それでも、少しずつ理解が進んでいる実感はあるので、これからもめげずに細かく確認していきます。

