Dockerの主な利点
- 環境構築の簡素化
- アプリケーションの隔離
- 開発・テスト・運用の一貫性確保
- 高速なデプロイとスケーリング
- CI/CDパイプラインとの統合
1. Dockerのインストールと起動(CentOS 7)
# リポジトリ設定
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# インストールと起動
sudo yum install -y docker-ce
sudo systemctl start docker
sudo systemctl enable docker
2. リモートアクセスとミラーレジストリの設定
/etc/docker/daemon.json を作成または編集:
{
"registry-mirrors": ["https://hub-mirror.c.163.com"],
"data-root": "/opt/docker",
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
次に、/usr/lib/systemd/system/docker.service の ExecStart 行を削除またはコメントアウトし、再読み込み:
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 基本的なDocker操作
# イメージ操作
docker images
docker pull nginx
docker save nginx > nginx.tar
docker load < nginx.tar
docker rmi nginx
# コンテナ操作
docker run -d --name web nginx
docker ps -a
docker logs web
docker exec -it web bash
docker stop web
docker rm web
# ボリュームマウント
docker run -d -v /host/data:/container/data --name app nginx
docker run -d --volumes-from app --name app2 nginx
# 一括クリーンアップ
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
4. コンテナへの接続方法
docker attach:非推奨(セッション共有のため)docker exec -it container_name bash:推奨nsenter:低レベルプロセス空間への直接アクセス(特殊用途)
5. ポートマッピング
# 自動ポート割り当て(-P)
docker run -d -P nginx
# 手動ポートマッピング(-p)
docker run -d -p 8080:80 nginx
docker run -d -p 192.168.1.100:8080:80 nginx
6. コンテナ間通信
--link は非推奨。代わりにカスタムネットワークを使用:
docker network create mynet
docker run -d --network mynet --name web1 nginx
docker run -it --network mynet --name client busybox ping web1
7. イメージの手動ビルド
docker run -it --name builder centos
# コンテナ内でnginxをインストール
docker commit builder myrepo/nginx:v1
8. Dockerfileによる自動ビルド
# Dockerfile
FROM centos
RUN yum install -y epel-release && yum install -y nginx && yum clean all
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
ビルドと実行:
docker build -t myrepo/nginx:v2 .
docker run -d -p 80:80 myrepo/nginx:v2
9. Dockerネットワーク詳細
カスタムブリッジネットワーク
docker network create --driver bridge --subnet=10.20.0.0/24 --gateway=10.20.0.1 mynet
docker run -it --rm --network=mynet --ip=10.20.0.10 alpine
デフォルトネットワークモード
- bridge:NAT経由(デフォルト)
- host:ホストネットワークを共有(ポート競合注意)
- none:ネットワークなし(ループバックのみ)
マルチホスト通信(Overlay + Consul)
Consulサーバーを起動:
docker run -d -p 8500:8500 --name consul progrium/consul -server -bootstrap
各Dockerホストの /etc/docker/daemon.json に以下を追加:
{
"cluster-store": "consul://192.168.1.99:8500",
"cluster-advertise": "192.168.1.100:2375"
}
再起動後、overlayネットワークを作成:
docker network create -d overlay shared_net
docker run -it --network shared_net alpine
10. ログ収集(ELK + Fluentd)
ELKコンテナ起動:
docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 --name elk sebp/elk
Fluentd起動:
docker run -d -p 24224:24224 -v /fluentd_log:/fluentd/log fluent/fluentd
Filebeat設定(/etc/filebeat/filebeat.yml):
filebeat.inputs:
- type: log
paths:
- /fluentd_log/*
output.elasticsearch:
hosts: ["192.168.1.50:9200"]
Dockerログドライバー設定(/etc/docker/daemon.json):
{
"log-driver": "fluentd",
"log-opts": {
"fluentd-address": "192.168.1.50:24224",
"tag": "node01.example.com"
}
}
11. Docker Composeによる単一ホストオーケストレーション
docker-compose.yml:
version: '3'
services:
web1:
image: nginx
volumes:
- ./index1.html:/usr/share/nginx/html/index.html
web2:
image: nginx
volumes:
- ./index2.html:/usr/share/nginx/html/index.html
lb:
image: haproxy
volumes:
- ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
ports:
- "80:80"
depends_on:
- web1
- web2
起動:
docker-compose up -d
12. Harborによるプライベートレジストリ構築
前提条件
- Docker CE 18.03+
- Docker Compose 1.22+
インストール手順
wget https://github.com/goharbor/harbor/releases/download/v1.7.0/harbor-online-installer-v1.7.0.tgz
tar xvf harbor-online-installer-v1.7.0.tgz
cd harbor
harbor.cfg 編集例:
hostname = registry.example.com
ui_url_protocol = http
harbor_admin_password = SecurePass123
db_password = dbSecurePass
インストール実行:
./install.sh
クライアント設定(HTTPレジストリ許可)
/etc/docker/daemon.json:
{
"insecure-registries": ["registry.example.com"]
}
再起動後、ログインとプッシュ:
docker login registry.example.com
docker tag nginx registry.example.com/library/nginx:latest
docker push registry.example.com/library/nginx:latest
13. データ永続化と管理
ボリューム操作
# 名前付きボリューム
docker volume create myvol
docker run -d -v myvol:/data nginx
# ボリューム確認
docker volume inspect myvol
docker volume ls
# 不要なリソースの削除
docker system prune -a
docker volume prune