佛山网站建设凤软,如何建设网站安全管理制度,学python可以做什么,北京中小企业网站建设为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目#xff0c;需要依赖Redis、mysql、nginx。如果使用docker原生部署的话#xff0c;则需要安装Redis、mysql、nginx容器#xff0c;才可以启动我们springboot项目#xff0c;这样的…为什么需要使用Docker ComposeDocker Compose 容器编排技术1、现在我们有一个springboot项目需要依赖Redis、mysql、nginx。如果使用docker原生部署的话则需要安装Redis、mysql、nginx容器才可以启动我们springboot项目这样的话部署项目的流程非常复杂所以需要引入我们的Docker compose实现容器编排技术。基本的概念Docker-Compose项目是Docker官方的开源项目负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层分别是工程project服务service以及容器container。Docker-Compose运行目录下的所有文件docker-compose.ymlextends文件或环境变量文件等组成一个工程若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务每个服务中定义了容器运行的镜像参数依赖。一个服务当中可包括多个容器实例Docker-Compose并没有解决负载均衡的问题因此需要借助其它工具实现服务发现及负载均衡。 Docker-Compose的工程配置文件默认为docker-compose.yml可通过环境变量COMPOSE_FILE或-f参数自定义配置文件其定义了多个有依赖关系的服务及每个服务运行的容器。Compose 中有两个重要的概念服务 (service) 一个应用的容器实际上可以包括若干运行相同镜像的容器实例。项目 (project) 由一组关联的应用容器组成的一个完整业务单元在 docker-compose.yml 文件中定义。一个项目可以由多个服务容器关联而成Compose 面向项目进行管理通过子命令对项目中的一组容器进行便捷地生命周期管理。Compose 项目由 Python 编写实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此只要所操作的平台支持 Docker API就可以在其上利用 Compose 来进行编排管理。Docker-Compose 的配置文件Docker-Compose 的工程配置文件默认为 docker-compose.yml可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件其定义了多个有依赖关系的服务及每个服务运行的容器Docker-Compose 配置常用字段文档地址https://docs.docker.com/compose/compose-file/compose-file-v3/build 指定 Dockerfile 文件名要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定dockerfile 构建镜像上下文路径context 可以是 dockerfile 的路径或者是指向 git 仓库的 url 地址image 指定镜像command 执行命令覆盖默认命令container name 指定容器名称由于容器名称是唯一的如果指定自定义名称则无法 scaledeploy 指定部署和运行服务相关配置只能在 Swarm 模式使用environment 添加环境变量networks 加入网络ports 暴露容器端口与 -p 相同但端口不能低于 60volumes 挂载宿主机路径或命令卷hostname 容器主机名restart 重启策略默认 noalwaysno-failureunless-stoped1.no默认策略在容器退出时不重启容器2.on-failure在容器非正常退出时退出状态非0才会重启容器3.on-failure:3在容器非正常退出时重启容器最多重启3次4.always在容器退出时总是重启容器5.unless-stopped在容器退出时总是重启容器但是不考虑在 Docker 守护进程启动时就已经停止了的容器安装docker-compose从GitHub上下载官网文档https://docs.docker.com/compose/install/
https://github.com/docker/compose/releases
下载版本docker-compose-linux-x86_64
放到目录/usr/local/bin/ 修改文件名docker-compose这里已经上传到CSDN一份了https://download.csdn.net/download/zhou9898/87490141添加可执行权限chmod x /usr/local/bin/docker-composedocker-compose常用命令docker-compose -h # 查看帮助docker-compose up # 创建并运行所有容器
docker-compose up -d # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并删除容器、网络、卷、镜像。docker-compose logs # 查看容器输出日志
docker-compose pull # 拉取依赖镜像
dokcer-compose config # 检查配置
dokcer-compose config -q # 检查配置有问题才有输出docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务docker-compose ps 列出项目中所有的容器
docker-compose logs 查看容器中日志信息1. 需要定义一个docker-compose.yml文件----工程2. 需要在docker-compose文件配置依赖服务3. docker-compose up 执行该文件 1. 创建一个docker-compose.yml2. 定制docker-compose 内容3. 运行 docker-compose up docker-compose 部署项目创建docker-compose.yml version: 3.3
services:mp:build: .image: mp # Dockerfile构建的镜像ports:- 8080:8080
启动docker-compose up -d # 创建并后台运行所有容器docker-compose配合Dockerfile使用Dockerfile文件FROM openjdk:11
MAINTAINER zqd # 作者
ADD boot02-1.0-SNAPSHOT.jar /boot02.jar
ENTRYPOINT [nohup,java,-jar,/boot02.jar,]
EXPOSE 8080version: 3.3
services:boot02:build: context: /home/dockerfile: Dockerfilecontainer_name: boot02ports:- 8080:8080docker-compose 安装redis一、 docker 拉去最新版本的redisdocker pull redis:6.0.6 #后面可以带上tag号, 默认拉取最新版本二、 docker安装redis执行命令:mkdir -p /data/redis/conf
cd /data/redis/conf新增配置文件vim /data/redis/conf/redis.conf内容只有如下这些#开启保护
protected-mode yes
#开启远程连接
#bind 127.0.0.1
#自定义密码
requirepass 12345678
port 6379
timeout 0
# 900s内至少一次写操作则执行bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec保存退出参数说明1.修改保护模式protected-mode yes 默认为yes 可以跳过这一步Redis protected-mode属性解读设置外部网络连接redis服务设置说明如下a.关闭protected-mode模式此时外部网络可以直接访问b.开启protected-mode保护模式需配置bind ip 和设置访问密码 redis3.2版本后新增protected-mode配置默认是yes即开启。2.把bind 127.0.0.1 注释掉 #bind 127.0.0.1, 这样所有的ip都可以访问了3.设置密码根据自己的需要4.appendonly yes #开启AOF模式三、编写 docker-compose.yaml文件cd /data/redis
vim docker-compose.yml写入下面的内容version: 3.8
services:myredis:container_name: myredisimage: redis:6.0.6restart: alwaysports:- 6379:6379privileged: truecommand: redis-server /etc/redis/redis.conf --appendonly yesvolumes:- /data/redis/data:/data- /data/redis/conf/redis.conf:/etc/redis/redis.confnetworks:- mywebnetworks:myweb:driver: bridge说明:/etc/redis/redis.conf为容器里的目录启动前的目录结构yum -y install tree[rootlocalhost redis]# pwd
/usr/local/docker/redis[rootlocalhost redis]# tree
.
├── conf
│ └── redis.conf
├── data
│ └── appendonly.aof
└── docker-compose.yml2 directories, 3 files四、启动容器docker-compose up -d到这里就ok了启动后的目录结构[rootlocalhost redis]# tree
.
├── conf
│ └── redis.conf
├── data
│ └── appendonly.aof
└── docker-compose.yml2 directories, 3 filesdocker-compose 安装mysqlmkdir -p /data/mysql
cd /data/mysql新建一个文件vim docker-compose.ymlversion: 3
services:mysql:image: mysqlrestart: alwayscontainer_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456command:--default-authentication-pluginmysql_native_password--character-set-serverutf8mb4--collation-serverutf8mb4_general_ci--explicit_defaults_for_timestamptrue--lower_case_table_names1--max_allowed_packet128M;ports:- 3306:3306volumes:- /data/mysql/data:/var/lib/mysql- /etc/localtime:/etc/localtime:ro默认数据库是账号是root密码自己修改 MYSQL_ROOT_PASSWORD保存启动运行docker-compose up -ddocker-compose 安装nginx创建目录根据自己的需要存放位置mkdir -p /data/nginx
mkdir -p /data/nginx/conf.d
mkdir -p /data/nginx/log
mkdir -p /data/nginx/conf
docker-compose.ymlvim /data/nginx/docker-compose.ymlversion: 3
services:nginx:restart: alwaysimage: nginxports:- 80:80- 443:443volumes:- /data/nginx/conf.d:/etc/nginx/conf.d- /data/nginx/log:/var/log/nginx- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /data/nginx/html:/usr/share/nginx/html- /etc/letsencrypt:/etc/letsencrypt
为应用存放位置(该目录下要有 index.html)mkdir -p /data/nginx/html
vim /data/nginx/html/index.html
nginx相关配置vim /data/nginx/conf.d/my.confserver { listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;}
}
vim /data/nginx/conf/nginx.confuser root;
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;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
启动cd /data/nginx
docker-compose up -d访问主页可能是centos欢迎页需要替换或者访问具体index.htmldocker-compose批量部署1、在docker-compose中构建Dockerfilecd /databuild: context: /home/df02 # 指定dockerfile目录dockerfile: Dockerfile # 指定dockerfile文件名vim docker-compose.ymlversion: 3
services:boot02:build: context: /home/df02dockerfile: Dockerfilecontainer_name: boot02ports:- 8080:8080myredis:container_name: myredisimage: redis:6.0.6restart: alwaysports:- 6379:6379privileged: truecommand: redis-server /etc/redis/redis.conf --appendonly yesvolumes:- /data/redis/data:/data- /data/redis/conf/redis.conf:/etc/redis/redis.confnetworks:- mywebmysql:image: mysqlrestart: alwayscontainer_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456command:--default-authentication-pluginmysql_native_password--character-set-serverutf8mb4--collation-serverutf8mb4_general_ci--explicit_defaults_for_timestamptrue--lower_case_table_names1--max_allowed_packet128M;ports:- 3306:3306volumes:- /data/mysql/data:/var/lib/mysql- /etc/localtime:/etc/localtime:ronginx:container_name: nginxrestart: alwaysimage: nginxports:- 80:80- 443:443volumes:- /data/nginx/conf.d:/etc/nginx/conf.d- /data/nginx/log:/var/log/nginx- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf- /data/nginx/html:/usr/share/nginx/html- /etc/letsencrypt:/etc/letsencryptnetworks:myweb:driver: bridge