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项目可移植性
第一个端口是容器内部服务映射到外部进行访问的端口号!!!第二个端口号是容器内部服务端口号!!! 因为容器之间互不干涉,相当于独立一台服务器,所以端口号可以相同,但是映射到宿主机的端口不能相同,必须唯一!!!
目录结构:
记得在阿里云控制台开放安全组,开放防火墙的端口。。。
容器内部
先改成.conf结尾,再改成.json,加入阿里云镜像源。。。
可以发现,容器目录和服务器目录很相似。。。。
是不是容器相当于服务器的一个盘?就像windows里的C盘D盘一样。。。。
不用管宿主机或者容器是否存在文件夹,只要你写了,他就会进行创建
image指镜像,docker-compose他会拉去下载解压到docker容器中,而非宿主机中,但是我们可以通过docker将宿主机内容映射到容器中,就像我们上述配置文件对待miaosha1和miaosha2这两个容器一样。。。
最后就是mysql容器,需要进入,让后导入我们的miaosha.sql文件。。。
结果
未完待续…