# 一.安装服务

# 1.nginx

# 1.yaml 文件

docker-compose.yaml

version: '3.7'
services:
  nginx:
    container_name: nginx
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./volumes/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./volumes/nginx/cert:/etc/nginx/cert
1
2
3
4
5
6
7
8
9
10
11

# 2.nginx 配置

nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;

pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events {
	worker_connections 1024;
}

http {
	log_format main
		'$remote_addr - $remote_user [$time_local] "$request" '
		'$status $body_bytes_sent "$http_referer" '
		'"$http_user_agent" "$http_x_forwarded_for"';

	access_log /var/log/nginx/access.log main;

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	include /etc/nginx/conf.d/*.conf;

	server {
		listen 80;
		root /usr/share/nginx/html;
    index index.html index.htm;

    include /etc/nginx/default.d/*.conf;
    location / {
    }
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 3.启动容器

docker-compose -f docker-compose.yaml up -d
1

# 4.基础信息

 docker inspect nginx
1

# 2.mysql

当历史数据的/var/lib/mysql 不存在时,可以去/etc/my.cnf 看看配置文件的配置信息

mysql:
  container_name: mysql
  image: mysql:8.2.0
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: heikeji@2024
    TZ: Asia/Shanghai
  volumes:
    - ./volumes/mysql/datadir:/var/lib/mysql
    - ./volumes/mysql/sql/:/docker-entrypoint-initdb.d
  ports:
    - "3306:3306"
  healthcheck:
    test: [ "CMD", "mysqladmin", "ping", "-h", "localhost" ]
    interval: 30s
    timeout: 10s
    retries: 5
    start_period: 30s
  command:
    --character-set-server=utf8mb4
    --collation-server=utf8mb4_unicode_ci
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 3.redis

redis:
  container_name: redis
  image: redis:6-alpine
  restart: always
  ports:
    - "6379:6379"
  volumes:
    - ./volumes/redis/data:/data
  command:
    - --appendonly yes
    - --requirepass heikeji@2024
1
2
3
4
5
6
7
8
9
10
11

# 4.PostgreSQL

# 1.说明

要在启动 PostgreSQL 容器时执行特定的初始化文件,可以使用 Docker 的 docker-entrypoint-initdb.d 目录。这个目录下的 SQL 文件会在容器启动时被自动执行。

# 2.初始化脚本

创建初始化 SQL 脚本文件: 在项目中创建一个 SQL 文件,例如 init.sql,并将需要执行的 SQL 命令写入其中。确保这个 SQL 文件包含需要的数据库结构和数据。

-- init.sql
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL
);

INSERT INTO users (username, password) VALUES ('admin', 'admin123');
1
2
3
4
5
6
7
8

# 3.添加挂在卷

更新 Docker Compose 配置: 在 docker-compose.yml 文件中,添加 volumes 配置,将包含初始化 SQL 脚本的目录映射到 PostgreSQL 容器的 docker-entrypoint-initdb.d 目录。

version: "3.8"

services:
  postgresql:
    container_name: postgresql
    image: 172.18.x.xxx:5000/postgres:15-alpine
    restart: always
    environment:
      POSTGRES_PASSWORD: dify
      POSTGRES_DB: dify
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - ./volumes/db/test/data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
    networks:
      - ssrf_proxy_network

networks:
  ssrf_proxy_network:
    driver: bridge
    internal: true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

在上面的配置中,我添加了一个 volumes 条目 - ./init-scripts:/docker-entrypoint-initdb.d,这将把本地目录 ./init-scripts 映射到 PostgreSQL 容器的 docker-entrypoint-initdb.d 目录下。

# 4.执行脚本

启动 PostgreSQL 容器: 运行以下命令启动的 PostgreSQL 容器,并让它执行初始化 SQL 脚本:

docker-compose up -d
1

PostgreSQL 容器会启动,并自动执行 docker-entrypoint-initdb.d 目录下的 SQL 脚本文件。这样,数据库就会被初始化,表和数据会被创建。

确保 SQL 脚本文件的命名符合 PostgreSQL 的执行顺序要求(通常按字母顺序执行)。这样,就可以在每次启动 PostgreSQL 容器时自动初始化数据库。

# 二.常用命令

# 1.查看版本

docker compose version
1

# 2.启动

docker-compose -f docker-compose.yaml -p mid --env-file ./.env.mid up -d
1

# 3.停止

docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid stop
1

# 4.停止并删除

docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid down
1
  • docker-compose stop:仅停止容器,但不删除容器、网络、卷或镜像。
  • docker-compose down:停止并删除容器、网络和可选的卷和镜像。

# 5.重启服务

docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid restart
1

# 6.启动单个服务

docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid up -d $1
1

# 7.删除镜像

要删除为服务构建的镜像,可以使用 --rmi 参数:

docker-compose down --rmi all
1
  • --rmi all:删除所有与服务关联的镜像(包括通过 docker-compose.yml 文件中 build 选项构建的镜像)。
  • --rmi local:仅删除本地构建的镜像,不会删除从镜像仓库拉取的镜像。

# 三.参数解释

# 1.depends_on

在 Docker Compose 文件 (docker-compose.yaml) 中,depends_on 是一个用来定义服务依赖关系的关键字。具体来说,它指定了一个或多个服务依赖于其他服务的启动顺序。

version: "3"

services:
  webapp:
    build: .
    depends_on:
      - db
      - redis

  db:
    image: postgres

  redis:
    image: redis
1
2
3
4
5
6
7
8
9
10
11
12
13
14

在这个例子中,webapp 服务依赖于 dbredis 服务。当使用 docker-compose up 启动服务时,Compose 将按照以下顺序启动这些服务:先启动 db,然后启动 redis,最后启动 webapp。然而,depends_on 并不会等待服务完全可用或健康,它只控制启动顺序。

请注意,从 Docker Compose 版本 3.0 开始,depends_on 不再等待服务完全启动或健康,因此可能需要结合使用其它工具或脚本来确保服务的可用性和连接。

上次更新: 11/29/2024, 10:12:16 AM