# 一.安装服务
# 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
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 / {
}
}
}
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
# 4.基础信息
docker inspect nginx
# 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
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
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');
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
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
PostgreSQL 容器会启动,并自动执行 docker-entrypoint-initdb.d
目录下的 SQL 脚本文件。这样,数据库就会被初始化,表和数据会被创建。
确保 SQL 脚本文件的命名符合 PostgreSQL 的执行顺序要求(通常按字母顺序执行)。这样,就可以在每次启动 PostgreSQL 容器时自动初始化数据库。
# 二.常用命令
# 1.查看版本
docker compose version
# 2.启动
docker-compose -f docker-compose.yaml -p mid --env-file ./.env.mid up -d
# 3.停止
docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid stop
# 4.停止并删除
docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid down
docker-compose stop
:仅停止容器,但不删除容器、网络、卷或镜像。docker-compose down
:停止并删除容器、网络和可选的卷和镜像。
# 5.重启服务
docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid restart
# 6.启动单个服务
docker-compose -f docker-compose-mid.yaml -p mid --env-file ./.env.mid up -d $1
# 7.删除镜像
要删除为服务构建的镜像,可以使用 --rmi
参数:
docker-compose down --rmi all
--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
2
3
4
5
6
7
8
9
10
11
12
13
14
在这个例子中,webapp
服务依赖于 db
和 redis
服务。当使用 docker-compose up
启动服务时,Compose 将按照以下顺序启动这些服务:先启动 db
,然后启动 redis
,最后启动 webapp
。然而,depends_on
并不会等待服务完全可用或健康,它只控制启动顺序。
请注意,从 Docker Compose 版本 3.0 开始,depends_on
不再等待服务完全启动或健康,因此可能需要结合使用其它工具或脚本来确保服务的可用性和连接。