Docker学习(6):Docker Compose部署案例

 人参与 | 时间:2025-06-24 12:30:45

一、docker-compose部署mysql

1、准备镜像

2、编写my.cnf配置文件

# 服务端参数配置[mysqld]user=mysql                     # MySQL启动用户default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎character-set-server=utf8mb4   # 设置mysql服务端默认字符集collation-server = utf8mb4_general_ci # 数据库字符集对应一些排序等规则,注意要和character-set-server对应pid-file=/var/lib/mysql/mysqld.pid  # pid文件所在目录socket=/var/lib/mysql/mysqld.sock # 用于本地连接的socket套接字datadir=/var/lib/mysql             # 数据文件存放的目录#bind-address=127.0.0.1                  # MySQL绑定IPexpire_logs_days=7                            # 定义清除过期日志的时间(这里设置为7天)# 设置client连接mysql时的字符集,防止乱码init_connect='SET NAMES utf8mb4'# 是否对sql语句大小写敏感,1表示不敏感lower_case_table_names=1# 执行sql的模式,规定了sql的安全等级, 暂时屏蔽,my.cnf文件中配置报错#sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION# 事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)transaction_isolation=READ-COMMITTED# TIMESTAMP如果没有显示声明NOT NULL,允许NULL值explicit_defaults_for_timestamp=true#它控制着mysqld进程能使用的最大文件描述(FD)符数量。#需要注意的是这个变量的值并不一定是你设定的值,mysqld会在系统允许的情况下尽量获取更多的FD数量open_files_limit=65535# 允许最大连接数max_connections=200#最大错误连接数max_connect_errors=600#禁用DNS解析skip-name-resolve=1[client]default-character-set=utf8mb4  # 设置mysql客户端默认字符集

3、编写docker-compose.yml配置文件

version: '3'services:  mysql:    restart: unless-stopped    image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2    container_name: mysql8    ports:      - "13306:3306"    volumes:     - ./conf/my.cnf:/etc/my.cnf     - ./data/mysql:/var/lib/mysql      - ./logs:/var/log/mysql      environment:      - TZ=Asia/Shanghai      - LANG=en_US.UTF-8      - MYSQL_ROOT_PASSWORD=123456    logging:      driver: "json-file"      options:        max-size: "10m"        max-file: "3"    

4、使用docker-compose up启动mysql

        连接数据库,部署完成。

二、docker-compose部署redis

1、准备镜像

2、编写redis.conf配置文件

        创建目录:

        在conf目录下编写配置文件redis.conf配置文件:

# 关闭保护模式,允许远程连接protected-mode no# 开启AOF持久化appendonly yes # 密码# requirepass 123456

3、编写docker-compose.yml文件

version: '3'services:  redis: # 服务名称    image: redis:latest # redis镜像版本    container_name: redis # 容器名称    ports:      - 6379:6379 # 指定宿主机端口与容器端口映射关系,宿主机:容器    volumes:      - ./conf/redis.conf:/etc/redis/redis.conf # 映射配置文件目录,宿主机:容器      - ./data:/data # 映射数据目录,宿主机:容器    restart: always # 容器开机自启    privileged: true # 获取宿主机root权限    command: ["redis-server","/etc/redis/redis.conf"] # 指定配置文件启动redis-server进程

4、启动容器

        使用docker-compose up启动容器:

        使用命令docker exec -it redis redis-cli,进入容器测试:

三、docker-compose部署springboot项目

1、下载jdk镜像

        这里以 jdk8 为例(其他版本一样的操作),直接搜索 jdk8 镜像,选择一个下载即可。

        目录结构如下:

2、编写docker-compose.yml文件

version: '3'services:  demo:    build: ./demo    volumes:      - ./demo/logs:/usr/local/logs    ports:      - 8082:8082

3、编写 Dockerfile

# 基础镜像FROM dockette/jdk8# 拷贝jar包到容器中COPY jx-project-manager.jar /usr/local/demo.jar# 容器工作目录WORKDIR /usr/local# 设置字符集ENV LANG C.UTF-8# 启动命令(注意,这里一定要用ENTRYPOINT,不能用CMD)ENTRYPOINT ["java", "-jar", "/usr/local/demo.jar"]

4、启动容器

        启动成功使用接口测试工具测试。

四、docker-compose部署vue项目

1、编写Dockerfile文件

# nginx镜像FROM nginx# 维护者信息MAINTAINER gaoyt "ywz@qq.com"# 移除nginx容器的default.conf文件、nginx配置文件# RUN rm /etc/nginx/conf.d/default.conf# RUN rm /etc/nginx/nginx.conf# ENV PROXY_HOST ${ PROXY_HOST}# ENV PROXY_IP ${ PROXY_IP}# 把主机的nginx.conf文件复制到nginx容器的/etc/nginx文件夹下COPY ./nginx.conf /etc/nginx/# 拷贝前端vue项目打包后生成的文件到nginx下运行COPY ./dist /usr/share/nginx/html# 暴露9000端口EXPOSE 9000# 注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。#    RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache# 使用daemon off的方式将nginx运行在前台保证镜像不至于退出CMD ["nginx", "-g", "daemon off;"]

2、编写nginx.conf配置文件

user  nginx;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;events {     worker_connections  1024;}http {     include       /etc/nginx/mime.types;    default_type  application/octet-stream;    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;    keepalive_timeout  65;    # include /etc/nginx/conf.d/*.conf;  	server {         listen       9000;        charset utf-8;        server_name  192.168.197.131;# vue项目所在的服务器地址    	# start --------------------------------        location / {            root   /usr/share/nginx/html;           try_files $uri $uri/ /index.html;        }		location /api/{                 proxy_set_header Host $http_host;                proxy_set_header X-Real-IP $remote_addr;                proxy_set_header REMOTE-HOST $remote_addr;                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                proxy_pass http://192.168.197.131:8800/; # 后端服务器地址        }        # end ----------------------------------        error_page   500 502 503 504  /50x.html;        location = /50x.html {             root   /usr/share/nginx/html;        }   }}

3、docker-compose.yml文件

version: '3'services:   vue-program:      # image: imageName      container_name: vue      build: ./demo # Dockerfile所在目录      environment:         TZ: Asia/Shanghai          # 依赖于api容器,被依赖容器启动后此web容器才可启动      depends_on:         - webimage      extra_hosts:         - "192.168.197.131:192.168.197.131"      ports:         - "9000:9000"

4、启动容器

        使用docker-compose up启动:

        通过浏览器访问项目: 

顶: 6踩: 8749