当前位置:   article > 正文

Docker Compose_docker-compose 启动

docker-compose 启动

为什么需要使用Docker Compose

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 的工程配置文件默认为 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 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法 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 守护进程启动时就已经停止了的容器

安装docker-compose

从GitHub上下载

  1. 官网文档:https://docs.docker.com/compose/install/
  2. https://github.com/docker/compose/releases
  3. 下载版本:docker-compose-linux-x86_64
  4. 放到目录:/usr/local/bin/ 修改文件名:docker-compose

这里已经上传到CSDN一份了

https://download.csdn.net/download/zhou9898/87490141

添加可执行权限

chmod +x /usr/local/bin/docker-compose

docker-compose常用命令

  1. docker-compose -h # 查看帮助
  2. docker-compose up # 创建并运行所有容器
  3. docker-compose up -d # 创建并后台运行所有容器
  4. docker-compose -f docker-compose.yml up -d # 指定模板
  5. docker-compose down # 停止并删除容器、网络、卷、镜像。
  6. docker-compose logs # 查看容器输出日志
  7. docker-compose pull # 拉取依赖镜像
  8. dokcer-compose config # 检查配置
  9. dokcer-compose config -q # 检查配置,有问题才有输出
  10. docker-compose restart # 重启服务
  11. docker-compose start # 启动服务
  12. docker-compose stop # 停止服务
  13. docker-compose ps 列出项目中所有的容器
  14. 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 部署项目

创建docker-compose.yml

  1. version: '3.3'
  2. services:
  3. mp:
  4. build: .
  5. image: mp # Dockerfile构建的镜像
  6. ports:
  7. - "8080:8080"

启动

docker-compose up -d # 创建并后台运行所有容器

docker-compose配合Dockerfile使用

Dockerfile文件

  1. FROM openjdk:11
  2. MAINTAINER zqd # 作者
  3. ADD boot02-1.0-SNAPSHOT.jar /boot02.jar
  4. ENTRYPOINT ["nohup","java","-jar","/boot02.jar","&"]
  5. EXPOSE 8080
  1. version: '3.3'
  2. services:
  3. boot02:
  4. build:
  5. context: /home/
  6. dockerfile: Dockerfile
  7. container_name: boot02
  8. ports:
  9. - "8080:8080"

docker-compose 安装redis

一、 docker 拉去最新版本的redis

docker pull redis:6.0.6 #后面可以带上tag号, 默认拉取最新版本

二、 docker安装redis

执行命令:

  1. mkdir -p /data/redis/conf
  2. cd /data/redis/conf

新增配置文件

vim /data/redis/conf/redis.conf

内容只有如下这些:

  1. #开启保护
  2. protected-mode yes
  3. #开启远程连接
  4. #bind 127.0.0.1
  5. #自定义密码
  6. requirepass 12345678
  7. port 6379
  8. timeout 0
  9. # 900s内至少一次写操作则执行bgsave进行RDB持久化
  10. save 900 1
  11. save 300 10
  12. save 60 10000
  13. rdbcompression yes
  14. dbfilename dump.rdb
  15. dir /data
  16. appendonly yes
  17. 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文件

  1. cd /data/redis
  2. vim docker-compose.yml

写入下面的内容

  1. version: '3.8'
  2. services:
  3. myredis:
  4. container_name: myredis
  5. image: redis:6.0.6
  6. restart: always
  7. ports:
  8. - 6379:6379
  9. privileged: true
  10. command: redis-server /etc/redis/redis.conf --appendonly yes
  11. volumes:
  12. - /data/redis/data:/data
  13. - /data/redis/conf/redis.conf:/etc/redis/redis.conf
  14. networks:
  15. - myweb
  16. networks:
  17. myweb:
  18. driver: bridge

说明:

/etc/redis/redis.conf为容器里的目录

启动前的目录结构

yum -y install tree
  1. [root@localhost redis]# pwd
  2. /usr/local/docker/redis
  3. [root@localhost redis]# tree
  4. .
  5. ├── conf
  6. │ └── redis.conf
  7. ├── data
  8. │ └── appendonly.aof
  9. └── docker-compose.yml
  10. 2 directories, 3 files

四、启动容器

docker-compose up -d

到这里就ok了,

启动后的目录结构

  1. [root@localhost redis]# tree
  2. .
  3. ├── conf
  4. │ └── redis.conf
  5. ├── data
  6. │ └── appendonly.aof
  7. └── docker-compose.yml
  8. 2 directories, 3 files

docker-compose 安装mysql

  1. mkdir -p /data/mysql
  2. cd /data/mysql

新建一个文件

vim docker-compose.yml
  1. version: '3'
  2. services:
  3. mysql:
  4. image: mysql
  5. restart: always
  6. container_name: mysql
  7. environment:
  8. MYSQL_ROOT_PASSWORD: 123456
  9. command:
  10. --default-authentication-plugin=mysql_native_password
  11. --character-set-server=utf8mb4
  12. --collation-server=utf8mb4_general_ci
  13. --explicit_defaults_for_timestamp=true
  14. --lower_case_table_names=1
  15. --max_allowed_packet=128M;
  16. ports:
  17. - 3306:3306
  18. volumes:
  19. - /data/mysql/data:/var/lib/mysql
  20. - /etc/localtime:/etc/localtime:ro

默认数据库是账号是root

密码自己修改 MYSQL_ROOT_PASSWORD

保存

启动运行

docker-compose up -d

docker-compose 安装nginx

创建目录

根据自己的需要存放位置

  1. mkdir -p /data/nginx
  2. mkdir -p /data/nginx/conf.d
  3. mkdir -p /data/nginx/log
  4. mkdir -p /data/nginx/conf

docker-compose.yml

vim /data/nginx/docker-compose.yml

  1. version: '3'
  2. services:
  3. nginx:
  4. restart: always
  5. image: nginx
  6. ports:
  7. - 80:80
  8. - 443:443
  9. volumes:
  10. - /data/nginx/conf.d:/etc/nginx/conf.d
  11. - /data/nginx/log:/var/log/nginx
  12. - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  13. - /data/nginx/html:/usr/share/nginx/html
  14. - /etc/letsencrypt:/etc/letsencrypt

为应用存放位置(该目录下要有 index.html)

  1. mkdir -p /data/nginx/html
  2. vim /data/nginx/html/index.html

nginx相关配置

vim /data/nginx/conf.d/my.conf

  1. server {
  2. listen 80;
  3. server_name localhost;
  4. location / {
  5. root /usr/share/nginx/html;
  6. index index.html index.htm;
  7. }
  8. }

vim /data/nginx/conf/nginx.conf

  1. user root;
  2. worker_processes 1;
  3. error_log /var/log/nginx/error.log warn;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. }

启动

  1. cd /data/nginx
  2. docker-compose up -d

访问

主页可能是centos欢迎页,需要替换,或者访问具体index.html

docker-compose批量部署

1、在docker-compose中构建Dockerfile

cd /data
  1. build:
  2. context: /home/df02 # 指定dockerfile目录
  3. dockerfile: Dockerfile # 指定dockerfile文件名

vim docker-compose.yml

  1. version: '3'
  2. services:
  3. boot02:
  4. build:
  5. context: /home/df02
  6. dockerfile: Dockerfile
  7. container_name: boot02
  8. ports:
  9. - "8080:8080"
  10. myredis:
  11. container_name: myredis
  12. image: redis:6.0.6
  13. restart: always
  14. ports:
  15. - 6379:6379
  16. privileged: true
  17. command: redis-server /etc/redis/redis.conf --appendonly yes
  18. volumes:
  19. - /data/redis/data:/data
  20. - /data/redis/conf/redis.conf:/etc/redis/redis.conf
  21. networks:
  22. - myweb
  23. mysql:
  24. image: mysql
  25. restart: always
  26. container_name: mysql
  27. environment:
  28. MYSQL_ROOT_PASSWORD: 123456
  29. command:
  30. --default-authentication-plugin=mysql_native_password
  31. --character-set-server=utf8mb4
  32. --collation-server=utf8mb4_general_ci
  33. --explicit_defaults_for_timestamp=true
  34. --lower_case_table_names=1
  35. --max_allowed_packet=128M;
  36. ports:
  37. - 3306:3306
  38. volumes:
  39. - /data/mysql/data:/var/lib/mysql
  40. - /etc/localtime:/etc/localtime:ro
  41. nginx:
  42. container_name: nginx
  43. restart: always
  44. image: nginx
  45. ports:
  46. - 80:80
  47. - 443:443
  48. volumes:
  49. - /data/nginx/conf.d:/etc/nginx/conf.d
  50. - /data/nginx/log:/var/log/nginx
  51. - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  52. - /data/nginx/html:/usr/share/nginx/html
  53. - /etc/letsencrypt:/etc/letsencrypt
  54. networks:
  55. myweb:
  56. driver: bridge

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号