Docker実践ガイド:インストールからネットワーク、プライベートレジストリまで

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.serviceExecStart 行を削除またはコメントアウトし、再読み込み:

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

タグ: Docker Harbor Docker Compose Container Networking ELK Stack

7月2日 17:34 投稿