最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Docker搭建本地開發(fā)環(huán)境的詳細指南

 更新時間:2025年04月30日 10:44:24   作者:小寶哥Code  
這篇文章主要介紹了使用Docker搭建本地開發(fā)環(huán)境的詳細指南,涵蓋了從基礎(chǔ)Docker準備到多容器管理、安全強化等各個方面,通過使用Docker,可以確保開發(fā)環(huán)境的一致性、可移植性和可版本控制,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

使用 Docker 搭建本地開發(fā)環(huán)境

Docker 容器化技術(shù)讓開發(fā)環(huán)境的搭建變得快速、一致且可移植。以下是使用 Docker 快速搭建各類開發(fā)環(huán)境的詳細指南。

1. Docker 基礎(chǔ)準備

安裝 Docker

  • Windows: 安裝 Docker Desktop for Windows
  • macOS: 安裝 Docker Desktop for Mac
  • Linux:
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    

Docker Compose 安裝

最新版 Docker Desktop 已包含 Docker Compose。如需單獨安裝:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. 通用開發(fā)環(huán)境模板

創(chuàng)建基礎(chǔ) docker-compose.yml

在項目根目錄創(chuàng)建 docker-compose.yml

version: '3.8'

services:
  # 這里會添加各種服務(wù)
  
volumes:
  # 持久化數(shù)據(jù)卷
  
networks:
  # 自定義網(wǎng)絡(luò)
  app-network:
    driver: bridge

3. Web 開發(fā)環(huán)境

Node.js 環(huán)境

services:
  node-app:
    image: node:18
    container_name: node-dev
    working_dir: /app
    volumes:
      - ./:/app
      - node_modules:/app/node_modules
    ports:
      - "3000:3000"
    command: sh -c "npm install && npm start"
    environment:
      - NODE_ENV=development

volumes:
  node_modules:

LAMP 環(huán)境 (Linux + Apache + MySQL + PHP)

services:
  webserver:
    image: php:8.2-apache
    container_name: php-apache
    volumes:
      - ./src:/var/www/html
    ports:
      - "80:80"
    depends_on:
      - db
      
  db:
    image: mysql:8.0
    container_name: mysql
    volumes:
      - mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
      
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    ports:
      - "8080:80"
    environment:
      PMA_HOST: db
    depends_on:
      - db

volumes:
  mysql_data:

MERN 環(huán)境 (MongoDB + Express + React + Node.js)

services:
  backend:
    image: node:18
    container_name: express-backend
    working_dir: /app/backend
    volumes:
      - ./backend:/app/backend
    ports:
      - "5000:5000"
    command: sh -c "npm install && npm start"
    depends_on:
      - mongo
      
  frontend:
    image: node:18
    container_name: react-frontend
    working_dir: /app/frontend
    volumes:
      - ./frontend:/app/frontend
    ports:
      - "3000:3000"
    command: sh -c "npm install && npm start"
    stdin_open: true
    
  mongo:
    image: mongo:6
    container_name: mongodb
    volumes:
      - mongo_data:/data/db
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: rootpassword

volumes:
  mongo_data:

4. Python 開發(fā)環(huán)境

Django 開發(fā)環(huán)境

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    container_name: django-app
    volumes:
      - ./:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
    command: python manage.py runserver 0.0.0.0:8000
    
  db:
    image: postgres:15
    container_name: postgres-db
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres

volumes:
  postgres_data:

Dockerfile.dev:

FROM python:3.11

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

Flask + Redis 環(huán)境

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    container_name: flask-app
    volumes:
      - ./:/app
    ports:
      - "5000:5000"
    depends_on:
      - redis
    environment:
      - FLASK_APP=app.py
      - FLASK_ENV=development
    command: flask run --host=0.0.0.0
    
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"

5. Java/Kotlin 開發(fā)環(huán)境

Spring Boot 環(huán)境

services:
  app:
    image: gradle:8.5-jdk17
    container_name: spring-app
    working_dir: /app
    volumes:
      - ./:/app
      - gradle-cache:/home/gradle/.gradle
    ports:
      - "8080:8080"
    command: gradle bootRun
    depends_on:
      - db
      
  db:
    image: mysql:8.0
    container_name: mysql
    volumes:
      - mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: springapp
    ports:
      - "3306:3306"

volumes:
  gradle-cache:
  mysql_data:

Android 開發(fā)環(huán)境

services:
  android:
    image: thyrlian/android-sdk:latest
    container_name: android-sdk
    working_dir: /app
    volumes:
      - ./:/app
      - gradle-cache:/root/.gradle
      - android-sdk:/opt/android-sdk
    environment:
      - JAVA_OPTS=-Xmx2048m
    
volumes:
  gradle-cache:
  android-sdk:

6. 數(shù)據(jù)科學環(huán)境

Jupyter Notebook 環(huán)境

services:
  jupyter:
    image: jupyter/datascience-notebook:latest
    container_name: jupyter-notebook
    volumes:
      - ./notebooks:/home/jovyan/work
    ports:
      - "8888:8888"
    environment:
      - JUPYTER_ENABLE_LAB=yes
    command: start-notebook.sh --NotebookApp.token='' --NotebookApp.password=''

TensorFlow 環(huán)境

services:
  tensorflow:
    image: tensorflow/tensorflow:latest-gpu-jupyter
    container_name: tensorflow-gpu
    volumes:
      - ./notebooks:/tf/notebooks
    ports:
      - "8888:8888"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

7. 數(shù)據(jù)庫環(huán)境組合

多數(shù)據(jù)庫開發(fā)環(huán)境

services:
  postgres:
    image: postgres:15
    container_name: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: testdb
    ports:
      - "5432:5432"
      
  mysql:
    image: mysql:8.0
    container_name: mysql
    volumes:
      - mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"
      
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
      
  mongo:
    image: mongo:6
    container_name: mongodb
    volumes:
      - mongo_data:/data/db
    ports:
      - "27017:27017"

volumes:
  postgres_data:
  mysql_data:
  mongo_data:

8. 開發(fā)工具集成

Git + VS Code Server

services:
  code-server:
    image: codercom/code-server:latest
    container_name: vscode-server
    volumes:
      - ./:/home/coder/project
      - ~/.ssh:/home/coder/.ssh
    ports:
      - "8080:8080"
    environment:
      - PASSWORD=yourpassword
    command: --auth password --host 0.0.0.0

代碼質(zhì)量工具

services:
  sonarqube:
    image: sonarqube:latest
    container_name: sonarqube
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
    ports:
      - "9000:9000"

volumes:
  sonarqube_data:
  sonarqube_extensions:

9. 完整全棧開發(fā)環(huán)境示例

企業(yè)級全棧開發(fā)環(huán)境

version: '3.8'

services:
  frontend:
    image: node:18
    container_name: frontend
    working_dir: /app/frontend
    volumes:
      - ./frontend:/app/frontend
      - frontend_node_modules:/app/frontend/node_modules
    ports:
      - "3000:3000"
    command: sh -c "npm install && npm start"
    
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    container_name: backend
    volumes:
      - ./backend:/app
      - backend_node_modules:/app/node_modules
    ports:
      - "5000:5000"
    depends_on:
      - postgres
      - redis
      - mongo
    environment:
      - DB_HOST=postgres
      - DB_NAME=appdb
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - REDIS_HOST=redis
      - MONGO_URI=mongodb://mongo:27017/appdb
      
  postgres:
    image: postgres:15
    container_name: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: appdb
    ports:
      - "5432:5432"
      
  redis:
    image: redis:alpine
    container_name: redis
    ports:
      - "6379:6379"
      
  mongo:
    image: mongo:6
    container_name: mongodb
    volumes:
      - mongo_data:/data/db
    ports:
      - "27017:27017"
      
  mailhog:
    image: mailhog/mailhog
    container_name: mailhog
    ports:
      - "1025:1025"
      - "8025:8025"
      
  nginx:
    image: nginx:alpine
    container_name: nginx
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend

volumes:
  frontend_node_modules:
  backend_node_modules:
  postgres_data:
  mongo_data:

10. 快速啟動與使用技巧

啟動環(huán)境

# 啟動所有服務(wù)
docker-compose up

# 后臺啟動
docker-compose up -d

# 啟動特定服務(wù)
docker-compose up backend db

# 重建鏡像并啟動
docker-compose up --build

管理技巧

# 查看容器日志
docker-compose logs -f backend

# 進入容器
docker-compose exec backend bash

# 停止環(huán)境
docker-compose down

# 停止并刪除卷
docker-compose down -v

環(huán)境配置文件化

創(chuàng)建多環(huán)境配置:

  • docker-compose.yml - 基本配置
  • docker-compose.override.yml - 開發(fā)環(huán)境默認覆蓋
  • docker-compose.prod.yml - 生產(chǎn)環(huán)境配置

啟動生產(chǎn)環(huán)境:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

總結(jié)

使用 Docker 搭建本地開發(fā)環(huán)境的優(yōu)勢:

  • 一致性 - 確保所有團隊成員使用相同環(huán)境
  • 隔離性 - 不同項目的依賴不會相互干擾
  • 可移植性 - 環(huán)境可以在任何支持 Docker 的系統(tǒng)上運行
  • 可版本控制 - 環(huán)境配置可以通過 Git 管理
  • 快速啟動 - 新成員加入只需幾分鐘即可完成環(huán)境搭建

關(guān)鍵最佳實踐:

  • 使用命名卷而非匿名卷保存數(shù)據(jù)
  • 配置環(huán)境變量以適應(yīng)不同場景
  • 為容器命名以便于管理
  • 將常用命令添加到 Makefile 或 npm scripts 中以簡化操作

通過本指南的配置模板,您可以根據(jù)項目需求快速組合和定制適合的開發(fā)環(huán)境,大大提高開發(fā)效率。

使用 Docker 瞬間搭建本地開發(fā)環(huán)境(續(xù))

11. 多架構(gòu)開發(fā)環(huán)境

微服務(wù)架構(gòu)開發(fā)環(huán)境

針對微服務(wù)開發(fā),可以使用更復雜的 Docker Compose 配置:

version: '3.8'

services:
  # API Gateway
  gateway:
    image: nginx:alpine
    container_name: api-gateway
    volumes:
      - ./gateway/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - auth-service
      - user-service
      - product-service
    networks:
      - microservice-network
      
  # 認證服務(wù)
  auth-service:
    build: 
      context: ./auth-service
      dockerfile: Dockerfile.dev
    container_name: auth-service
    volumes:
      - ./auth-service:/app
    ports:
      - "8001:8000"
    environment:
      - DB_HOST=auth-db
    depends_on:
      - auth-db
    networks:
      - microservice-network
      - auth-network
      
  auth-db:
    image: postgres:15
    container_name: auth-db
    volumes:
      - auth_db_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=auth
    networks:
      - auth-network
      
  # 用戶服務(wù)  
  user-service:
    build:
      context: ./user-service
      dockerfile: Dockerfile.dev
    container_name: user-service
    volumes:
      - ./user-service:/app
    ports:
      - "8002:8000"
    environment:
      - MONGO_URI=mongodb://user-db:27017/users
    depends_on:
      - user-db
    networks:
      - microservice-network
      - user-network
      
  user-db:
    image: mongo:6
    container_name: user-db
    volumes:
      - user_db_data:/data/db
    networks:
      - user-network
      
  # 產(chǎn)品服務(wù)
  product-service:
    build:
      context: ./product-service
      dockerfile: Dockerfile.dev
    container_name: product-service
    volumes:
      - ./product-service:/app
    ports:
      - "8003:8000"
    environment:
      - MYSQL_HOST=product-db
    depends_on:
      - product-db
    networks:
      - microservice-network
      - product-network
      
  product-db:
    image: mysql:8.0
    container_name: product-db
    volumes:
      - product_db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=products
    networks:
      - product-network
      
  # 監(jiān)控與日志
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    networks:
      - monitoring-network
      - microservice-network
      
  grafana:
    image: grafana/grafana
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - monitoring-network

networks:
  microservice-network:
  auth-network:
  user-network:
  product-network:
  monitoring-network:

volumes:
  auth_db_data:
  user_db_data:
  product_db_data:
  grafana_data:

12. 云原生開發(fā)環(huán)境

Kubernetes 本地開發(fā)

使用 Kind(Kubernetes in Docker)或 Minikube 創(chuàng)建本地 K8s 集群:

services:
  kind:
    image: docker:dind
    container_name: kind-cluster
    privileged: true
    volumes:
      - ./k8s-config:/config
      - kind-data:/var/lib/docker
    ports:
      - "8443:8443" # Kubernetes API
    environment:
      - DOCKER_TLS_CERTDIR=""
    command: sh -c "dockerd-entrypoint.sh & sleep 5 && kind create cluster --config=/config/kind-config.yaml && tail -f /dev/null"

  kubectl:
    image: bitnami/kubectl:latest
    container_name: kubectl
    volumes:
      - ~/.kube:/root/.kube
    depends_on:
      - kind
    command: sh -c "sleep 10 && kubectl get nodes && tail -f /dev/null"

volumes:
  kind-data:

kind-config.yaml:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
- role: worker
- role: worker

13. DevOps 工具鏈環(huán)境

CI/CD 本地開發(fā)環(huán)境

version: '3.8'

services:
  # Git服務(wù)器
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    hostname: gitlab.local
    ports:
      - "80:80"
      - "443:443"
      - "22:22"
    volumes:
      - gitlab_config:/etc/gitlab
      - gitlab_logs:/var/log/gitlab
      - gitlab_data:/var/opt/gitlab
    shm_size: '256m'
    
  # CI/CD服務(wù)
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    restart: always
    privileged: true
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false
    
  # 制品庫
  nexus:
    image: sonatype/nexus3
    container_name: nexus
    restart: always
    ports:
      - "8081:8081"
    volumes:
      - nexus_data:/nexus-data
      
  # 代碼質(zhì)量
  sonarqube:
    image: sonarqube:latest
    container_name: sonarqube
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://sonarqube-db:5432/sonar
      - SONARQUBE_JDBC_USERNAME=sonar
      - SONARQUBE_JDBC_PASSWORD=sonar
    depends_on:
      - sonarqube-db
      
  sonarqube-db:
    image: postgres:15
    container_name: sonarqube-db
    restart: always
    volumes:
      - sonarqube_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonar

volumes:
  gitlab_config:
  gitlab_logs:
  gitlab_data:
  jenkins_home:
  nexus_data:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  sonarqube_db:

14. 前端開發(fā)專用環(huán)境

現(xiàn)代前端工具鏈

version: '3.8'

services:
  # 主應(yīng)用開發(fā)環(huán)境
  app:
    image: node:18
    container_name: frontend-app
    working_dir: /app
    volumes:
      - ./:/app
      - node_modules:/app/node_modules
    ports:
      - "3000:3000" # React/Vue/Angular
      - "5173:5173" # Vite
    command: sh -c "npm install && npm run dev"
    stdin_open: true
    tty: true
    
  # 靜態(tài)分析
  eslint:
    image: node:18
    container_name: eslint
    working_dir: /app
    volumes:
      - ./:/app
    command: sh -c "npm install && npm run lint"
    profiles: ["tools"]
    
  # 測試環(huán)境
  test:
    image: node:18
    container_name: test
    working_dir: /app
    volumes:
      - ./:/app
    command: sh -c "npm install && npm test"
    environment:
      - CI=true
    profiles: ["tools"]
    
  # 組件文檔
  storybook:
    image: node:18
    container_name: storybook
    working_dir: /app
    volumes:
      - ./:/app
    ports:
      - "6006:6006"
    command: sh -c "npm install && npm run storybook"
    profiles: ["tools"]
    
  # API Mock服務(wù)
  mock-api:
    image: node:18
    container_name: mock-api
    working_dir: /app/mock-server
    volumes:
      - ./mock-server:/app/mock-server
    ports:
      - "3001:3001"
    command: sh -c "npm install && node server.js"

volumes:
  node_modules:

15. 嵌入式系統(tǒng)開發(fā)環(huán)境

IoT和嵌入式開發(fā)容器

version: '3.8'

services:
  # 嵌入式開發(fā)環(huán)境
  embedded-dev:
    image: gcc:latest
    container_name: embedded-dev
    working_dir: /workspace
    volumes:
      - ./:/workspace
    command: tail -f /dev/null
    
  # 交叉編譯
  arm-toolchain:
    build:
      context: .
      dockerfile: ARM.Dockerfile
    container_name: arm-compiler
    working_dir: /workspace
    volumes:
      - ./:/workspace
    command: tail -f /dev/null
    
  # IoT模擬器
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mqtt-broker
    ports:
      - "1883:1883"
      - "9001:9001"
    volumes:
      - ./mosquitto/config:/mosquitto/config
      - mosquitto_data:/mosquitto/data
      - mosquitto_log:/mosquitto/log
      
  # 數(shù)據(jù)采集與存儲
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "8086:8086"
    volumes:
      - influxdb_data:/var/lib/influxdb2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=password123
      - DOCKER_INFLUXDB_INIT_ORG=my-org
      - DOCKER_INFLUXDB_INIT_BUCKET=iot-data
      
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - influxdb

volumes:
  mosquitto_data:
  mosquitto_log:
  influxdb_data:
  grafana_data:

ARM.Dockerfile:

FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
    build-essential \
    gcc-arm-linux-gnueabihf \
    g++-arm-linux-gnueabihf \
    cmake \
    make \
    git \
    && rm -rf /var/lib/apt/lists/*

ENV PATH="/usr/arm-linux-gnueabihf/bin:${PATH}"
WORKDIR /workspace

16. 多容器管理與優(yōu)化

使用 Docker Compose 配置文件實現(xiàn)環(huán)境分離

基礎(chǔ)配置 docker-compose.yml:

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./:/app
    ports:
      - "3000:3000"

開發(fā)環(huán)境配置 docker-compose.dev.yml:

version: '3.8'

services:
  app:
    build:
      dockerfile: Dockerfile.dev
    command: npm run dev
    environment:
      - NODE_ENV=development
    volumes:
      - ./:/app
      - /app/node_modules

測試環(huán)境配置 docker-compose.test.yml:

version: '3.8'

services:
  app:
    command: npm test
    environment:
      - NODE_ENV=test

啟動開發(fā)環(huán)境:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

Makefile 簡化操作

創(chuàng)建 Makefile:

.PHONY: dev test prod down

dev:
	docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d

test:
	docker-compose -f docker-compose.yml -f docker-compose.test.yml up --abort-on-container-exit

prod:
	docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

down:
	docker-compose down

logs:
	docker-compose logs -f

使用: make dev 快速啟動開發(fā)環(huán)境。

17. 容器資源管理

設(shè)置資源限制

services:
  app:
    image: node:18
    container_name: web-app
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

使用Docker Compose輕松實現(xiàn)應(yīng)用伸縮

# 啟動3個應(yīng)用實例
docker-compose up -d --scale app=3

18. 高級網(wǎng)絡(luò)配置

創(chuàng)建自定義網(wǎng)絡(luò)拓撲

version: '3.8'

services:
  frontend:
    image: nginx:alpine
    networks:
      - frontend-network
      - app-network
      
  backend:
    image: node:18
    networks:
      - app-network
      - database-network
      
  database:
    image: postgres:15
    networks:
      - database-network

networks:
  frontend-network:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          
  app-network:
    driver: bridge
    
  database-network:
    driver: bridge
    internal: true  # 內(nèi)部網(wǎng)絡(luò),不能訪問外網(wǎng)

19. 安全強化

安全開發(fā)環(huán)境

version: '3.8'

services:
  secure-app:
    image: node:18
    container_name: secure-app
    user: node  # 非root用戶
    read_only: true  # 只讀文件系統(tǒng)
    cap_drop:  # 刪除所有權(quán)能
      - ALL
    security_opt:
      - no-new-privileges:true
    volumes:
      - ./app:/home/node/app:ro  # 只讀掛載
      - node_modules:/home/node/app/node_modules
      - tmp_data:/tmp  # 可寫臨時目錄
    working_dir: /home/node/app
    command: node server.js
    
  # 安全掃描
  security-scan:
    image: aquasec/trivy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: image secure-app
    profiles: ["scan"]

volumes:
  node_modules:
  tmp_data:

20. 一體化開發(fā)環(huán)境終極示例

以下是一個完整的全棧應(yīng)用開發(fā)環(huán)境,包含前端、后端、數(shù)據(jù)庫、緩存、監(jiān)控等所有組件:

version: '3.8'

services:
  # 前端服務(wù)
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    container_name: frontend
    volumes:
      - ./frontend:/app
      - /app/node_modules
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
      - REACT_APP_API_URL=http://localhost/api
    depends_on:
      - backend
    networks:
      - frontend-network
      - backend-network
      
  # 后端API服務(wù)
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    container_name: backend
    volumes:
      - ./backend:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
      - DATABASE_URL=postgres://postgres:postgres@postgres:5432/app
      - REDIS_URL=redis://redis:6379
      - PORT=4000
      - JWT_SECRET=development_secret
    depends_on:
      - postgres
      - redis
    networks:
      - backend-network
      - db-network
      
  # 網(wǎng)關(guān)
  nginx:
    image: nginx:alpine
    container_name: nginx
    volumes:
      - ./nginx/default.dev.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - frontend-network
      - backend-network
      
  # 數(shù)據(jù)庫
  postgres:
    image: postgres:15
    container_name: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_DB=app
    ports:
      - "5432:5432"
    networks:
      - db-network
      
  # 緩存
  redis:
    image: redis:alpine
    container_name: redis
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    networks:
      - db-network
      
  # 數(shù)據(jù)庫管理工具
  pgadmin:
    image: dpage/pgadmin4
    container_name: pgadmin
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@example.com
      - PGADMIN_DEFAULT_PASSWORD=admin
    ports:
      - "5050:80"
    depends_on:
      - postgres
    networks:
      - db-network
      
  # 消息隊列
  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - backend-network
      
  # 搜索引擎
  elasticsearch:
    image: elasticsearch:8.6.2
    container_name: elasticsearch
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    networks:
      - db-network
      
  # 監(jiān)控
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    ports:
      - "9090:9090"
    networks:
      - monitoring-network
      - backend-network
      
  grafana:
    image: grafana/grafana
    container_name: grafana
    volumes:
      - grafana_data:/var/lib/grafana
    ports:
      - "3030:3000"
    depends_on:
      - prometheus
    networks:
      - monitoring-network
      
  # 日志聚合
  loki:
    image: grafana/loki
    container_name: loki
    ports:
      - "3100:3100"
    networks:
      - monitoring-network
      
  promtail:
    image: grafana/promtail
    container_name: promtail
    volumes:
      - ./logs:/var/log
      - ./promtail:/etc/promtail
    command: -config.file=/etc/promtail/config.yml
    networks:
      - monitoring-network
      
  # 郵件測試
  mailhog:
    image: mailhog/mailhog
    container_name: mailhog
    ports:
      - "1025:1025"
      - "8025:8025"
    networks:
      - backend-network

networks:
  frontend-network:
  backend-network:
  db-network:
  monitoring-network:

volumes:
  postgres_data:
  redis_data:
  rabbitmq_data:
  elasticsearch_data:
  prometheus_data:
  grafana_data:

使用小貼士

  • 啟動項目:新克隆項目后立即能啟動開發(fā)環(huán)境

    git clone your-project-url
    cd your-project
    docker-compose up -d
    
  • 保持環(huán)境一致:將 Docker 配置文件納入版本控制,確保團隊所有成員使用相同環(huán)境

  • 優(yōu)化構(gòu)建速度

    • 利用多階段構(gòu)建
    • 使用 .dockerignore 排除不需要的文件
    • 優(yōu)化層緩存
  • 環(huán)境變量管理

    • 使用 .env 文件管理環(huán)境變量
    • 在代碼存儲庫中保留 .env.example 作為模板
  • 持久化管理

    • 為持久化數(shù)據(jù)創(chuàng)建命名卷
    • 定期備份重要卷
    • 考慮將數(shù)據(jù)卷掛載到主機目錄以便于備份

通過 Docker 構(gòu)建的開發(fā)環(huán)境為開發(fā)者提供了極大的便利,不僅確保了環(huán)境的一致性與可重現(xiàn)性,還大幅降低了配置時間,讓團隊成員可以專注于代碼開發(fā)而非環(huán)境配置。不論是簡單的單一技術(shù)棧應(yīng)用還是復雜的微服務(wù)架構(gòu),Docker 都能提供快速、可靠的開發(fā)環(huán)境搭建方案。

總結(jié)

到此這篇關(guān)于使用Docker搭建本地開發(fā)環(huán)境的文章就介紹到這了,更多相關(guān)Docker搭建本地開發(fā)環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker容器強制刪除及文件系統(tǒng)修復的完整指南

    Docker容器強制刪除及文件系統(tǒng)修復的完整指南

    這篇文章主要為大家詳細介紹了Docker容器強制刪除及文件系統(tǒng)修復的完整指南,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-11-11
  • Docker保存鏡像和導入鏡像文件完整圖文教程

    Docker保存鏡像和導入鏡像文件完整圖文教程

    這篇文章主要給大家介紹了關(guān)于Docker保存鏡像和導入鏡像文件的完整圖文教程,適用于備份、遷移和版本控制等場景,文中通過代碼及圖文介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • Docker中的COPY指令和ADD指令詳解

    Docker中的COPY指令和ADD指令詳解

    COPY?和?ADD?都是?Dockerfile?中的指令,有著類似的作用。它們允許我們將文件從特定位置復制到?Docker?鏡像中,這篇文章主要介紹了Docker中的COPY指令和ADD指令,需要的朋友可以參考下
    2022-06-06
  • docker 容器數(shù)據(jù)在盤與盤之間遷移方法

    docker 容器數(shù)據(jù)在盤與盤之間遷移方法

    這篇文章主要介紹了docker 容器數(shù)據(jù)在盤與盤之間遷移方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 阿里云服務(wù)器部署?Docker?Swarm集群

    阿里云服務(wù)器部署?Docker?Swarm集群

    這篇文章主要介紹了阿里云服務(wù)器部署?Docker?Swarm集群,Docker Swarm 的作用就是用來管理Docker集群的平臺,本文給大家介紹了Docker Swarm的基本概念和Docker Swarm 和 k8s的區(qū)別,需要的朋友可以參考下
    2022-07-07
  • Docker磁盤滿了的高效又安全清理方案小結(jié)

    Docker磁盤滿了的高效又安全清理方案小結(jié)

    明明代碼邏輯沒問題,部署時卻頻頻報錯,排查半天發(fā)現(xiàn)是服務(wù)器磁盤被占滿了,下面我們就來看看解決思路,希望可以幫助大家快速釋放磁盤空間
    2025-10-10
  • 一些常見的精簡Docker?file規(guī)則總結(jié)

    一些常見的精簡Docker?file規(guī)則總結(jié)

    這篇文章主要介紹了一些常見的精簡Docker?file規(guī)則的相關(guān)資料,這些精簡規(guī)則有助于優(yōu)化Dockerfile,生成更高效、簡潔的鏡像,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-11-11
  • Docker默認網(wǎng)段的正確修改步驟

    Docker默認網(wǎng)段的正確修改步驟

    這篇文章主要給大家介紹了關(guān)于Docker默認網(wǎng)段修改的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者使用Docker具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 一文搞定Docker安裝ElasticSearch的過程

    一文搞定Docker安裝ElasticSearch的過程

    通過本文可以幫助大家快速學習Docker安裝ElasticSearch的過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-08-08
  • 一文學會docker?安裝mysql的方法

    一文學會docker?安裝mysql的方法

    這篇文章主要介紹了docker?安裝?mysql的方法,通過使用docker命令下載mysql接著使用docker命令創(chuàng)建實例并啟動,對docker?安裝?mysql相關(guān)知識感興趣的朋友一起看看吧
    2022-04-04

最新評論

区。| 色达县| 吕梁市| 门源| 怀柔区| 贺州市| 格尔木市| 湘潭县| 富宁县| 三穗县| 翁牛特旗| 嘉兴市| 那曲县| 昌都县| 刚察县| 霍州市| 于田县| 密云县| 咸阳市| 共和县| 奇台县| 大渡口区| 九龙坡区| 永新县| 呼和浩特市| 清流县| 张家川| 措美县| 长兴县| 兰坪| 岗巴县| 福建省| 衢州市| 双鸭山市| 天镇县| 大理市| 霍山县| 武威市| 崇明县| 昭觉县| 陵水|