赞
踩
Docker 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.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,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.yml,可通过环境变量COMPOSE_FILE 或 -f 参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器
文档地址:https://docs.docker.com/compose/compose-file/compose-file-v3/
build 指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile 构建镜像上下文路径
context 可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法 scale
deploy 指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment 添加环境变量
networks 加入网络
ports 暴露容器端口,与 -p 相同,但端口不能低于 60
volumes 挂载宿主机路径或命令卷
hostname 容器主机名
restart 重启策略,默认 no,always,no-failure,unless-stoped
1.no,默认策略,在容器退出时不重启容器
2.on-failure,在容器非正常退出时(退出状态非0),才会重启容器
3.on-failure:3,在容器非正常退出时重启容器,最多重启3次
4.always,在容器退出时总是重启容器
5.unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器
- 官网文档: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-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.yml;
2. 定制docker-compose 内容;
3. 运行 docker-compose up ;
创建docker-compose.yml
- version: '3.3'
- services:
- mp:
- build: .
- image: mp # Dockerfile构建的镜像
- ports:
- - "8080:8080"
启动
docker-compose up -d # 创建并后台运行所有容器
Dockerfile文件
- FROM openjdk:11
- MAINTAINER zqd # 作者
- ADD boot02-1.0-SNAPSHOT.jar /boot02.jar
- ENTRYPOINT ["nohup","java","-jar","/boot02.jar","&"]
- EXPOSE 8080
- version: '3.3'
- services:
- boot02:
- build:
- context: /home/
- dockerfile: Dockerfile
- container_name: boot02
- ports:
- - "8080:8080"
docker pull redis:6.0.6 #后面可以带上tag号, 默认拉取最新版本
执行命令:
- 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模式
- cd /data/redis
- vim docker-compose.yml
写入下面的内容
- version: '3.8'
- services:
- myredis:
- container_name: myredis
- image: redis:6.0.6
- restart: always
- ports:
- - 6379:6379
- privileged: true
- command: redis-server /etc/redis/redis.conf --appendonly yes
- volumes:
- - /data/redis/data:/data
- - /data/redis/conf/redis.conf:/etc/redis/redis.conf
- networks:
- - myweb
-
- networks:
- myweb:
- driver: bridge
说明:
/etc/redis/redis.conf为容器里的目录
启动前的目录结构
yum -y install tree
- [root@localhost redis]# pwd
- /usr/local/docker/redis
-
- [root@localhost redis]# tree
- .
- ├── conf
- │ └── redis.conf
- ├── data
- │ └── appendonly.aof
- └── docker-compose.yml
-
- 2 directories, 3 files
docker-compose up -d
到这里就ok了,
启动后的目录结构
- [root@localhost redis]# tree
- .
- ├── conf
- │ └── redis.conf
- ├── data
- │ └── appendonly.aof
- └── docker-compose.yml
-
- 2 directories, 3 files
- mkdir -p /data/mysql
- cd /data/mysql
新建一个文件
vim docker-compose.yml
- version: '3'
- services:
- mysql:
- image: mysql
- restart: always
- container_name: mysql
- environment:
- MYSQL_ROOT_PASSWORD: 123456
- command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
- --lower_case_table_names=1
- --max_allowed_packet=128M;
- ports:
- - 3306:3306
- volumes:
- - /data/mysql/data:/var/lib/mysql
- - /etc/localtime:/etc/localtime:ro
默认数据库是账号是root
密码自己修改 MYSQL_ROOT_PASSWORD
保存
启动运行
docker-compose up -d
docker-compose 安装nginx
根据自己的需要存放位置
- mkdir -p /data/nginx
- mkdir -p /data/nginx/conf.d
- mkdir -p /data/nginx/log
- mkdir -p /data/nginx/conf
vim /data/nginx/docker-compose.yml
- version: '3'
- services:
- nginx:
- restart: always
- image: nginx
- ports:
- - 80:80
- - 443:443
- volumes:
- - /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
vim /data/nginx/conf.d/my.conf
- server {
- listen 80;
- server_name localhost;
-
- location / {
- root /usr/share/nginx/html;
- index index.html index.htm;
- }
- }
vim /data/nginx/conf/nginx.conf
- user 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.html
cd /data
- build:
- context: /home/df02 # 指定dockerfile目录
- dockerfile: Dockerfile # 指定dockerfile文件名
vim docker-compose.yml
- version: '3'
- services:
- boot02:
- build:
- context: /home/df02
- dockerfile: Dockerfile
- container_name: boot02
- ports:
- - "8080:8080"
-
- myredis:
- container_name: myredis
- image: redis:6.0.6
- restart: always
- ports:
- - 6379:6379
- privileged: true
- command: redis-server /etc/redis/redis.conf --appendonly yes
- volumes:
- - /data/redis/data:/data
- - /data/redis/conf/redis.conf:/etc/redis/redis.conf
- networks:
- - myweb
-
- mysql:
- image: mysql
- restart: always
- container_name: mysql
- environment:
- MYSQL_ROOT_PASSWORD: 123456
- command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_general_ci
- --explicit_defaults_for_timestamp=true
- --lower_case_table_names=1
- --max_allowed_packet=128M;
- ports:
- - 3306:3306
- volumes:
- - /data/mysql/data:/var/lib/mysql
- - /etc/localtime:/etc/localtime:ro
-
- nginx:
- container_name: nginx
- restart: always
- image: nginx
- ports:
- - 80:80
- - 443:443
- volumes:
- - /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
-
- networks:
- myweb:
- driver: bridge
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。