学習内容
-
Linux での Web アプリケーションの環境構築の基礎
-
Docker での環境構築で前提となるネットワークの基礎知識
-
API を使った Web アプリケーションの仕組み
-
Docker の仕組みの基礎知識
-
Docker で開発環境を作るための基礎知識
関連トピックを探索
このコースの内容:
-
5時間のオンデマンドビデオ
-
3個の記事
-
28個のダウンロード可能なリソース
-
モバイルとPCからアクセス
-
字幕
-
修了証明書
コースの内容
要件
-
何らかのプログラミング言語で Web アプリケーションを作ったことがある
-
絶対パス・相対パス程度のコンピュータの基礎知識がある
-
ターミナルで ls、cd などの基本的なコマンドを実行したことがある
-
Vim や nano など、ターミナルで使用可能なエディタを使うことができる
-
Google Cloud (GCP) に登録して使用することができる (他の手段で同様の Linux 環境をご用意いただいても構いません)
-
Docker をインストール可能な PC を所有している
解説
このDockerとLinuxの学習コースについて、実務的な視点で詳しく解説していきますね。
Linuxの基礎とWebアプリケーション環境構築
Linux環境の準備 実務では、GCPだけでなくAWS EC2やさくらのVPSなども使われます。SSH接続は基本中の基本で、実際のコマンドはこんな感じです:
# SSH接続
ssh user@192.168.1.100
# よく使うファイル操作
ls -la # 隠しファイルも含めて詳細表示
cd /var/www/html # Webサーバのドキュメントルートへ移動
pwd # 現在のディレクトリを確認
mkdir -p project/src # 親ディレクトリも含めて作成
Webサーバの構築 nginxは現代のWeb開発で最も使われるWebサーバの一つです。Apacheから移行する企業も多いですね。
# nginxのインストール(Ubuntu/Debian)
sudo apt update
sudo apt install nginx
# nginxの起動・停止・再起動
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 設定ファイルの確認
sudo nginx -t # 文法チェック
プロセス管理の実務 システム管理者なら必須のスキルです:
# プロセスの確認
ps aux | grep nginx # nginxのプロセスを検索
top # リアルタイムでプロセス監視
htop # topの改良版(インストール必要)
# プロセスの終了
kill -9 12345 # PID 12345を強制終了
pkill nginx # nginxプロセスを全て終了
ネットワークの基礎知識
IPアドレスとポート番号 実務では、開発環境はlocalhost:3000、本番はexample.com:443(HTTPS)のような構成が一般的です。
# ネットワーク状態の確認
netstat -tuln # 待ち受けているポートを表示
ss -tuln # netstatの新しい版
lsof -i :3000 # ポート3000を使用しているプロセス確認
# 通信テスト
curl http://localhost:8080 # HTTPリクエスト送信
telnet localhost 80 # 低レベルな通信テスト
ping google.com # 疎通確認
実際のEchoサーバー例(Python)
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 8888))
s.listen(1)
while True:
conn, addr = s.accept()
data = conn.recv(1024)
conn.send(data) # 受信したデータをそのまま返す
conn.close()
API開発の実践(Ruby Sinatra)
実際の開発現場では SinatraはRuby on Railsより軽量で、小規模APIやマイクロサービスに最適です。
# app.rb
require 'sinatra'
require 'json'
require 'mysql2'
# CORS設定(フロントエンドとの疎通に必須)
before do
headers 'Access-Control-Allow-Origin' => '*'
end
# タスク一覧取得
get '/api/tasks' do
client = Mysql2::Client.new(
host: ENV['DB_HOST'] || 'localhost',
username: 'root',
database: 'taskapp'
)
tasks = client.query('SELECT * FROM tasks')
content_type :json
tasks.to_a.to_json
end
# タスク登録
post '/api/tasks' do
data = JSON.parse(request.body.read)
client = Mysql2::Client.new(...)
client.query("INSERT INTO tasks (title) VALUES ('#{data['title']}')")
status 201
end
nginxのリバースプロキシ設定 実務では、nginxがフロントエンド(ポート80/443)を受け付け、バックエンド(ポート3000など)に転送する構成が標準です。
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
# 静的ファイル
location / {
root /var/www/html;
try_files $uri $uri/ =404;
}
# APIへのプロキシ
location /api/ {
proxy_pass http://localhost:4567;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
MySQLとの連携
データベース環境構築
# MySQLのインストール
sudo apt install mysql-server
# セキュアインストール(本番環境では必須)
sudo mysql_secure_installation
# MySQLへのログイン
mysql -u root -p
# データベースとテーブル作成
CREATE DATABASE taskapp CHARACTER SET utf8mb4;
USE taskapp;
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
completed BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
業界でのベストプラクティス
- 本番環境では、アプリケーションユーザーとrootを分ける
- パスワードは環境変数で管理(
.envファイル) - マイグレーションツールを使う(RailsならActiveRecord、PythonならAlembic)
Dockerによる環境構築
Dockerの基本コマンド
# イメージ操作
docker images # イメージ一覧
docker pull nginx:latest # イメージのダウンロード
docker build -t myapp:1.0 . # Dockerfileからビルド
docker rmi image_id # イメージ削除
# コンテナ操作
docker ps # 実行中のコンテナ一覧
docker ps -a # 全てのコンテナ一覧
docker run -d -p 80:80 nginx # デタッチモードで起動
docker exec -it container_name bash # コンテナ内でコマンド実行
docker logs -f container_name # ログをリアルタイム表示
docker stop container_name # 停止
docker rm container_name # 削除
実践的なDockerfile例(Sinatra)
FROM ruby:3.2
WORKDIR /app
# 依存関係のインストール
COPY Gemfile Gemfile.lock ./
RUN bundle install
# アプリケーションコードのコピー
COPY . .
# ホットリロード用の設定
ENV RACK_ENV=development
# ポート公開
EXPOSE 4567
# 起動コマンド
CMD ["ruby", "app.rb", "-o", "0.0.0.0"]
ボリュームマウントの実務的な使い方
# 開発時はソースコードをマウント(ホットリロード可能)
docker run -v $(pwd):/app -p 4567:4567 myapp
# データベースのデータ永続化
docker run -v mysql_data:/var/lib/mysql mysql:8.0
Docker Composeの実践
実務で使われる構成
# docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
build: .
volumes:
- .:/app # ホットリロード用
environment:
- DB_HOST=db
- DB_USER=root
- DB_PASS=password
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=taskapp
volumes:
- mysql_data:/var/lib/mysql
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
mysql_data:
Docker Composeコマンド
# 全サービス起動
docker-compose up -d
# ログ確認
docker-compose logs -f app
# 特定サービスの再起動
docker-compose restart app
# 全て停止・削除
docker-compose down
# ボリュームも含めて削除
docker-compose down -v
# イメージの再ビルド
docker-compose build --no-cache
業界での実践的なTips
開発環境と本番環境の違い
- 開発:
docker-compose.ymlでホットリロード有効 - 本番: Kubernetes、ECS、Cloud Runなどのオーケストレーションツール使用
- CI/CD: GitHub ActionsやCircleCIで自動ビルド・デプロイ
よくあるトラブルと解決法
# ポートが既に使われている
sudo lsof -i :80
sudo kill -9 <PID>
# Dockerのディスク容量圧迫
docker system prune -a # 未使用リソース削除
# コンテナが起動しない
docker logs container_name # ログ確認
docker inspect container_name # 詳細情報確認
この学習コースは、実務で必要なスキルがバランスよく含まれています。特にDocker Composeでのマルチコンテナ構成は、現代のマイクロサービス開発の基礎となる重要なスキルです。