一、安装docker

1.安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.配置阿里镜像
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker
yum install -y docker-ce
4.启动docker命令
systemctl start docker
5.设置开机自启命令
systemctl enable docker
6.查看docker版本命令
docker version
7.创建docker配置文件目录
mkdir -p /etc/docker 
8.添加配置内容
tee /etc/docker/daemon.json <<-'EOF'
 {
  "registry-mirrors": [
    "https://docker.1panelproxy.com",
    "https://2m11665s.mirror.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://dockerhub.azk8s.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com",
    "https://k8s.gcr.io",
    "https://github-releases.githubusercontent.com",
    "https://vsxcs7sq.mirror.aliyuncs.com",
    "https://ustc-edu-cn.mirror.aliyuncs.com"]
}
EOF
9.重启docker
systemctl restart docker

二、安装docker-compose

1.安装docker-compose
wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64
2.移动下载软件到/usr/local/bin/docker-compose覆盖旧版本
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
3.赋予执行权限
chmod +x /usr/local/bin/docker-compose
4.查看是否安装成功
docker-compose --version

三、编写docker-compose.yaml文件

version: '3.0'
name: ronqi_1
services:
  # Nginx
  nginx:  
    image: nginx:latest  
    container_name: my_nginx  
    ports:  
      - "80:80"  
      - "443:443"  
    volumes:  
       - ./html:/usr/share/nginx/html
       - ./conf/nginx.conf:/etc/nginx/nginx.conf
       - ./logs:/var/log/nginx
       - ./nginxSSL:/nginxSSL
    networks:
       - my_custom_network
    restart: always
  # MySQL
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    container_name: mysql_education
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=stx@123456 # root用户密码
    volumes:
      - /home/docker/mysql8/log:/var/log/mysql # 映射日志目录,宿主机:容器
      - /home/docker/mysql8/data:/var/lib/mysql # 映射数据目录,宿主机:容器
      - /home/docker/mysql8/conf.d:/etc/mysql/conf.d # 映射配置目录,宿主机:容器
      - /etc/localtime:/etc/localtime:ro # 让容器的时钟与宿主机时钟同步,避免时间的问题,ro是read only的意思,就是只读
    networks:
      - my_custom_network 
  # Redis
  redis:
    image: redis:5.0.3
    container_name: redis_education
    command: "/usr/local/bin/redis-server /usr/local/etc/redis/redis.conf --appendonly yes"
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./redis:/data
      - ./redis.conf:/usr/local/etc/redis/redis.conf
      - ./logs/redis:/logs
    networks:
      - my_custom_network
  #tomcat
  tomcat:  
    image: tomcat:9.0  # 或者指定具体的 Tomcat 版本,如 tomcat:9.0  
    container_name: tomcat_education  # 可选,为容器指定一个名称  
    ports:  
      - "8080:8080"  # 将宿主机的 8080 端口映射到容器的 8080 端口  
    volumes:  
      - ./webapps:/usr/local/tomcat/webapps  # 将宿主机的 webapps 目录映射到容器的 webapps 目录  
      - ./logs:/usr/local/tomcat/logs  # 将宿主机的 logs 目录映射到容器的 logs 目录(可选)
      - ./cert:/usr/local/tomcat/cert  
    environment:  
      TZ: "Asia/Shanghai"  # 设置时区(可选)
    networks:
       - my_custom_network  
    restart: always  # 确保容器在退出时总是重新启动(可选)
networks:
  my_custom_network:
    external: true

四、使用docker-compose部署

1.在有docker-compose.yaml文件的目录使用命令
docker-compose up -d
2.创建网络
docker network create my_custom_network

部署nginx会出现问题,创建nginx.conf时是创建的目录,重新在宿主机目录上传一个nginx.conf

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  300;
    server {
        listen       80;
        server_name  8.130.72.61;

      
        location / {
            root   /usr/share/nginx/html/dist;
            index  index.html index.htm;
        }

       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

mysql也需要在宿主机的conf.d目录下上传my.cnf

###### [client]配置模块 ######
[client]
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock

###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock

###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1

# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password

# 禁用符号链接以防止各种安全风险
symbolic-links=0

# 允许最大连接数
max_connections=1000

# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 0: 表名将按指定方式存储,并且比较区分大小写;
# 1: 表名以小写形式存储在磁盘上,比较不区分大小写;
lower_case_table_names=0

max_allowed_packet=16M 

# 设置时区
default-time_zone='+8:00'

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐