【コンテナ作成】
例:Oracle Linux環境構築
◆1. Dokerイメージの取得
docker pull oraclelinux:9
解説:
-
docker pull: Docker Hubからイメージをダウンロードするコマンド - 他のバージョンも選択可能:
oraclelinux:8,oraclelinux:9など
◆2. コンテナの起動
■docker run基本オプション
docker run -it -d -p 8080:80 --name container1 oraclelinux:9
各オプションの解説:
-
-i(interactive): 標準入力を開いたままにする -
-t(tty): 疑似ターミナルを割り当てる -
-d(detach): バックグラウンドで実行 -
-e(): 環境変数を設定 -
-p 8080:80: ポートマッピング-
8080: ホストマシンのポート -
80: コンテナ内のポート - ホストの8080番にアクセスすると、コンテナの80番に転送される
-
-
--name container1: コンテナに識別しやすい名前を付ける -
oraclelinux:9: 使用するイメージ名
◆3. コンテナ内部への接続
docker exec -it container1 bash
解説:
-
docker exec: 実行中のコンテナでコマンドを実行 -
-it: インタラクティブなターミナルセッション -
container1: 接続先のコンテナ名 -
bash: 実行するシェル
【基本コマンド】
# コンテナの状態確認
docker ps
# コンテナの停止
docker stop container1
# 既存コンテナの起動(停止後)
docker start container1
# コンテナの削除
docker rm container1
# イメージの確認
docker images
#ログを確認
docker logs container1
【ネットワーク設定】
◆ネットワークの種類
1. bridge(デフォルト)
# デフォルトのbridgeネットワーク
docker run -d --name app nginx
# 自動的に172.17.0.x/16のIPが割り当てられる
2. host(ホストと同じネットワーク)
# ホストのIPアドレスを直接使用
docker run -d --network host --name web nginx
# コンテナはホストのIPアドレスを共有
注意:
- ポートマッピング(
-p)は不要 - 複数コンテナで同じポートは使えない
3. none(ネットワークなし)
# ネットワーク接続なし
docker run -d --network none --name isolated nginx
4. カスタムネットワーク(推奨)
# 自分で設計したネットワーク
docker network create mynetwork
docker run -d --network mynetwork --name app nginx
◆固定IPアドレスを割り当てる方法
# ネットワーク作成
docker network create --subnet=192.168.50.0/24 mynetwork
# IPアドレスを割り当てたコンテナを作成
docker run -it -d --name container1 --network mynetwork --ip 192.168.50.10 oraclelinux:9
# 既存コンテナに別のネットワークを追加
docker network connect mynetwork container1 --ip 192.168.50.11
◆ネットワーク管理コマンド
# ネットワーク一覧
docker network ls
# ネットワークの詳細情報
docker network inspect ネットワーク名
# ネットワーク削除
docker network rm ネットワーク名
# 未使用ネットワークを一括削除
docker network prune
# コンテナをネットワークから切断
docker network disconnect ネットワーク名 コンテナ名
# コンテナをネットワークに接続
docker network connect ネットワーク名 コンテナ名
【Docker Volume】
コンテナ用の外付けストレージのようなもの
- コンテナを削除してもデータが消えない
- 複数コンテナでデータを安全に共有できる
- ホストのファイルシステムから独立している
◆Volume管理コマンド
-v ホストのパス:コンテナのパス
左側: Dockerホストマシンのパス
右側: コンテナ内部のパス
1. Named Volume(名前付きボリューム)- 推奨
# Volumeを作成
docker volume create myvolume
# 使用
docker run -d -v myvolume:/var/lib/mysql --name db -e "MYSQL_ROOT_PASSWORD=xxxx" mysql:8.0
# 確認
docker volume ls
# DRIVER VOLUME NAME
# local myvolume
#コンテナ内部への接続
docker exec -it db mysql -uroot -pxxxx
特徴:
- Dockerが管理する場所に保存(通常:
/var/lib/docker/volumes/) - 名前で識別しやすい
- 複数コンテナで共有可能
- 本番環境で推奨
2. Bind Mount(バインドマウント)
# ホストの特定ディレクトリをマウント
docker run -d \
-v /home/kudo/myapp:/app \
--name webapp \
myapp:latest
# 相対パスも使える(現在のディレクトリ)
docker run -d -v $(pwd)/data:/data --name app myapp
特徴:
- ホストの実際のディレクトリパスを指定
- ホスト側で直接ファイル編集可能
- 開発環境でよく使う
- パスが明示的なのでわかりやすい
違いの例:
# Named Volume: Dockerが管理
-v mydata:/data
# Bind Mount: 絶対パスまたは相対パス
-v /home/kudo/data:/data
-v $(pwd)/data:/data