up:: 部署NginxOpenResty

说明:参考:

nginx+docker同一服务器上部署多个docker实现负载均衡_猴样鬼相的博客-CSDN博客

Docker Compose定义运行多个Docker容器- 刘较瘦丫 - 博客园

Docker-compose 部署jar包服务_葫芦胡的博客-CSDN博客_dockercompose部署jar

使用docker compose组合多个容器构成一个完整的项目 - 云往前面飘 - 博客园

docker-compose发布nginx和tomcat,实现nginx均衡tomcat,访问nginx即访问tomcat_阿蔡BLOG的博客-CSDN博客

命令学习:

通过docker-compose ps 就可以知道每个容器名。。。

docker-compose 命令 --help                     获得一个命令的帮助
docker-compose up -d nginx                     构建启动nignx容器
docker-compose exec nginx bash                 登录到nginx容器中
docker-compose down                            此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose ps                              列出项目中目前的所有容器
docker-compose restart nginx                   重新启动nginx容器
docker-compose build nginx                     构建镜像
docker-compose build --no-cache nginx          不带缓存的构建
docker-compose top                             查看各个服务容器内运行的进程
docker-compose logs -f nginx                   查看nginx的实时日志
docker-compose images                          列出 Compose 文件包含的镜像
docker-compose config                          验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。
docker-compose events --json nginx             以json的形式输出nginx的docker日志
docker-compose pause nginx                     暂停nignx容器
docker-compose unpause nginx                   恢复ningx容器
docker-compose rm nginx                        删除容器(删除前必须关闭容器,执行stop)
docker-compose stop nginx                      停止nignx容器
docker-compose start nginx                     启动nignx容器
docker-compose restart nginx                   重启项目中的nignx容器
docker-compose run --no-deps --rm php-fpm php -v   在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

使用docker-compose

准备工作-换源(重要必做!!!)

sudo mkdir -p /etc/docker
 
sudo tee /etc/docker/daemon.json <<-'EOF'
{ "registry-mirrors": ["https://ao4r990b.mirror.aliyuncs.com"] } EOF
 
 
sudo systemctl daemon-reload
 
sudo systemctl restart docker

还可加入下面的源:

 
{
 "registry-mirrors": [
        "https://ao4r990b.mirror.aliyuncs.com",
         "https://hub-mirror.c.163.com/",
         "https://mirror.baidubce.com/",
         "https://registry.docker-cn.com/",
         "https://reg-mirror.qiniu.com/",
         "https://dockerhub.azk8s.cn/",
        " https://docker.mirrors.ustc.edu.cn/"
 
]
 }
 
 

在本目录下新建docker-compose.yml

如果更改配置文件,需要先停止服务,在宿主机更改后,在启动,就能生效了。。。

docker-compose stop 容器名

systemctl restart docker 重启docker服务 docker-compose up -d 最好全部后台重启一下。。。

version: '3'        # 自定义版本号,一般是2,3
services:
 
#前端服务
  openresty:
    image: openresty/openresty     #镜像选择最新版本的
    container_name: openresty
    restart: always
    volumes:
    # :号左边是宿主机的nginx的文件路径,右边是nginx容器的文件路径
      - ./openresty/nginx/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf   # nginx配置文件
      - ./resources/:/usr/local/openresty/nginx/html/resources        # 前端打包文件
 
      #网址访问的端口 与Dockerfile文件的EXPOSE端口不同
      # :号左边是网址访问端口,右边是nginx.conf文件的listen端口,一般是默认80,不用改
    ports:
      - "8080:80"
    networks:
      data_security:
        ipv4_address: 192.128.0.8
    privileged: true      # 这个必须要,解决nginx的文件调用的权限问题
 
 
#数据库服务
  mysql:
    image: mysql:8.0.19
    container_name: mysql
    restart: always
    environment:
      - TZ=Asia/Shanghai                          #默认时区
      - MYSQL_ROOT_PASSWORD=20020829                #数据库初始话为root用户设置的默认密码,如果你的用户名不是root,记得添加用户名参数
      - MYSQL_DATABASE=miaosha                        # 项目数据库名
      # - MYSQL_USER:                           #自定义数据库的用户,权限只作用于MYSQL_DATABASE配置的数据库
      # - MYSQL_PASSWORD:                    #自定义数据库的用户,权限只作用于MYSQL_DATABASE配置的数据库
    volumes:
       - ./mysql/cnf/my.cnf:/etc/my.cnf
       - ./mysql/data:/var/lib/mysql
 
      # 数据库文件最好和Dockerfile放在一起,下面的文件路径是相对路径, : 号左边路径从当前路径写起, : 右边基本不用改
       - ./mysql/miaosha.sql:/var/lib/miaosha.sql        # 自己数据库sql文件
 
      #
 
      #数据库默认端口
    ports:
      - "3306:3306"
    networks:
      data_security:
        ipv4_address: 192.128.0.2
    command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --sql-mode='' --max-execution-time=1000
 
 
  # redis:
  #   image: redis:latest
  #   container_name: redis
  #   restart: always
  #   environment:
  #     - TZ=Asia/Shanghai
  #     - REDIS_ROOT_PASSWORD=passwd            # redis密码
  #   volumes:
  #     - ./config/redis/conf/redis.conf:/etc/redis/redis.conf   #挂载redis.conf不然后续重启redis密码会失效
  #     - ./config/redis/data:/data
  #     # - ./config/redis/log/redis.log:/logs/redis.log
  #   ports:
  #     - "6379:6379"
  #   networks:
  #     data_security:
  #       ipv4_address: 192.128.0.3
  #   # privileged: true
  #   command: redis-server /etc/redis/redis.conf --requirepass passwd          #指定配置文件启动redis
 
#后端服务
  miaosha1:
    image: java:8     # 镜像名
    #build: ./miaosha1        # 表示以当前目录下的Dockerfile开始构建镜像
    container_name: miaosha1
    restart: always
 
    volumes:
    # 本地jar包路径
      - /usr/local/miaosha/miaosha1/miaosha-1.0-SNAPSHOT.jar:/miaosha1/miaosha-1.0-SNAPSHOT.jar
    # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
 
      - /usr/local/miaosha/miaosha1/logs:/miaosha1/logs
 
    # 挂载后台启动文件
 
      - /usr/local/miaosha/miaosha1/deploy.sh:/miaosha1/deploy.sh
 
    # 挂载后台外挂配置文件
 
      - /usr/local/miaosha/miaosha1/application.properties:/miaosha1/application.properties
 
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
 
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    #entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=8090 -Dspring.profiles.active=local miaosha-1.0-SNAPSHOT.jar
 
    entrypoint: sh /miaosha1/deploy.sh
 
 
    # 后端服务端口,与Dockerfile的EXPOSE是一致的
    #容器的端口(: 号右边的端口)与项目代码的端口是一致的
    ports:
      - "8091:8090"
 
      #依赖
    depends_on:
      - mysql
    networks:
      data_security:
        ipv4_address: 192.128.0.4
 
 
 
  miaosha2:
    image: java:8     # 镜像名
    #build: ./miaosha2        # 表示以当前目录下的Dockerfile开始构建镜像
    container_name: miaosha2
    restart: always
 
    volumes:
    # 本地jar包路径
      - /usr/local/miaosha/miaosha2/miaosha-1.0-SNAPSHOT.jar:/miaosha2/miaosha-1.0-SNAPSHOT.jar
    # 挂载日志 -v A:B ,A指宿主机位置,B指容器位置
 
      - /usr/local/miaosha/miaosha2/logs:/miaosha2/logs
 
      # 挂载后台启动文件
 
      - /usr/local/miaosha/miaosha2/deploy.sh:/miaosha2/deploy.sh
 
    # 挂载后台外挂配置文件
 
      - /usr/local/miaosha/miaosha2/application.properties:/miaosha2/application.properties
 
      # 指定容器时间为宿主机时间
      - /etc/localtime:/etc/localtime
 
    environment:
      # 指定时区
      - TZ="Asia/Shanghai"
    #启动容器后执行的命令
    #entrypoint: java -server -Xms256m -Xmx256m -jar -Dserver.port=8090 -Dspring.profiles.active=local miaosha-1.0-SNAPSHOT.jar
    entrypoint: sh /miaosha2/deploy.sh
 
    # 后端服务端口,与Dockerfile的EXPOSE是一致的
    #容器的端口(: 号右边的端口)与项目代码的端口是一致的
    ports:
      - "8092:8090"
 
      #依赖
    depends_on:
      - mysql
    networks:
      data_security:
        ipv4_address: 192.128.0.5
 
#网络服务
networks:
  data_security:      # 自定义网络名字
    driver: bridge
    ipam:
      config:
        - subnet: 192.128.0.0/16           #自定义固定容器ip 实现容器间通讯,增强docker-compose项目可移植性
 

第一个端口是容器内部服务映射到外部进行访问的端口号!!!第二个端口号是容器内部服务端口号!!! 因为容器之间互不干涉,相当于独立一台服务器,所以端口号可以相同,但是映射到宿主机的端口不能相同,必须唯一!!!

目录结构:

记得在阿里云控制台开放安全组,开放防火墙的端口。。。

容器内部

坑爹: docker安装完成后报错:Process: 3660 ExecStart=/usr/bin/dockerd $OPTIONS (code=exited, status=1/FAILURE)_进击的小陈的博客-CSDN博客_execstart=/usr/bin/dockerd

先改成.conf结尾,再改成.json,加入阿里云镜像源。。。

可以发现,容器目录和服务器目录很相似。。。。

是不是容器相当于服务器的一个盘?就像windows里的C盘D盘一样。。。。

不用管宿主机或者容器是否存在文件夹,只要你写了,他就会进行创建

image指镜像,docker-compose他会拉去下载解压到docker容器中,而非宿主机中,但是我们可以通过docker将宿主机内容映射到容器中,就像我们上述配置文件对待miaosha1和miaosha2这两个容器一样。。。

最后就是mysql容器,需要进入,让后导入我们的miaosha.sql文件。。。

结果

未完待续…