docker-compose

Dear 丶 2022-01-23 08:47 225阅读 0赞

#

docker-compose安装

官网地址:https://docs.docker.com/compose/install/

  • 运行此命令以下载Docker Compose的当前稳定版本

    sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose

由于网络问题,常常安装不上,换成国内的

  1. sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • 添加可执行权限

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

  • 测试安装结果

    docker-compose -v

docker-compose version 1.22.0, build 1719ceb

docker-compose基本使用

  1. mkdir -p /usr/local/docker/tomcat
  2. cd /usr/local/docker/tomcat
  3. vi docker-compose.yml
  4. version: ‘3’
    services:
    tomcat:
    1. restart: always
    2. image: tomcat
    3. container_name: tomcat
    4. ports:
    5. - 8080:8080
  1. systemctl start docker
  2. docker-compose up -d (后台运行)
  3. watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70
  4. docker-compose logs tomcat (查看日志) docker-compose logs -f tomcat (监听)
  5. docker-compose down (删除容器)

    • 启动mysql

    version: ‘3’
    services:
    mysql:

    1. restart: always
    2. image: mysql:8.0.17
    3. container_name: mysql
    4. ports:
    5. - 3306:3306
    6. environment:
    7. TZ: Asia/Shanghai
    8. MYSQL_ROOT_PASSWORD: r9PRv1$JncnjWRbq
    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. volumes:
    16. - /usr/local/docker/mysql/data:/var/lib/mysql
    17. - /usr/local/docker/mysql/conf/mysql:/etc/mysql
    18. - /usr/local/docker/mysql/log:/var/log/mysql
    19. - /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files/

第二种:

  1. 首先拉取镜像 docker pull mysql:5.7
  2. 运行容器 docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  3. 查看mysql容器ID docker ps
  4. 将容器中mysql的配置拷贝到conf中,注意目录层级关系会影响docker-compose挂载的配置

    1. mkdir -p /usr/local/docker/mysql/conf
    2. docker cp ae2e8348e6ea:/etc/mysql /usr/local/docker/mysql/conf
  5. 删除容器 docker -rm -f ae2e8348e6ea 通过docker-compose的方式启动

    version: ‘3’
    services:
    mysql:

    1. restart: always
    2. image: mysql:5.7
    3. container_name: mysql
    4. ports:
    5. - 3306:3306
    6. environment:
    7. TZ: Asia/Shanghai
    8. MYSQL_ROOT_PASSWORD: r9PRv1$JncnjWRbq
    9. command:
    10. --default-authentication-plugin=mysql_native_password
    11. --character-set-server=utf8mb4
    12. --collation-server=utf8mb4_unicode_ci
    13. --explicit_defaults_for_timestamp=true
    14. --lower_case_table_names=1
    15. --max_allowed_packet=128M
    16. --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    17. volumes:
    18. - /usr/local/docker/mysql/data:/var/lib/mysql
    19. - /usr/local/docker/mysql/conf/mysql:/etc/mysql
    20. - /usr/local/docker/mysql/log:/var/log/mysql

连接的时候出现错误 access denied for user ‘root’@’*****‘ (using password:YES)

解决办法:进入mysql容器,mysql -uroot -pxxxx.

use mysql;

GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘你的root密码’;

flush privileges;

备份

  1. docker exec -it mysql mysqldump -uroot -pr9PRv1$JncnjWRbq leyou > ./leyou.sql
  • 启动gitlab ,首先下载镜像docker pull twang2218/gitlab-ce-zh ,这里下载的是汉化版

进入/usr/local/docker/gitlab目录,创建docker-compose.yml

  1. version: '3'
  2. services:
  3. gitlab:
  4. image: 'twang2218/gitlab-ce-zh'
  5. restart: always
  6. hostname: '192.168.0.184'
  7. environment:
  8. TZ: 'Asia/Shanghai'
  9. GITLAB_OMNIBUS_CONFIG: |
  10. external_url 'http://192.168.0.184:3000'
  11. gitlab_rails['time_zone'] = 'Asia/Shanghai'
  12. gitlab_rails['gitlab_shell_ssh_port'] = 2222
  13. unicorn['port'] = 8888
  14. nginx['listen_port'] = 3000
  15. ports:
  16. - '3000:3000'
  17. - '8443:443'
  18. - '2222:22'
  19. volumes:
  20. - /usr/local/docker/gitlab/config:/etc/gitlab
  21. - /usr/local/docker/gitlab/data:/var/opt/gitlab
  22. - /usr/local/docker/gitlab/logs:/var/log/gitlab

gitlab配置免密登录,使用ssh.进入D:\Program Files\Git\usr\bin

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 1

打开cmd,执行ssh-keygen -t rsa -C “31346337@qq.com” 将邮箱替换成自己的gitlab登录邮箱

一路回车,生成后的路径

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 2

找到id_rsa.pub文件,打开它,这就是sha256加密后的

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 3

全选复制.

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 4

配置ssh.修改成git的ssh

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 5

#

就可以使用shh免密pull和push了.

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 6

  • 启动nexus3.提前创建data, mkdir -p /docker/nexus/data, 并给与读写权限 chmod 777 data

    version: ‘3.1’
    services:
    nexus:

    1. restart: always
    2. image: sonatype/nexus3
    3. container_name: nexus
    4. ports:
    5. - 8081:8081
    6. volumes:
    7. - /usr/local/docker/nexus/data:/nexus-data
  • 启动docker registry(docker镜像仓库)

    version: ‘3.1’
    services:
    registry:

    1. restart: always
    2. image: registry
    3. container_name: registry
    4. ports:
    5. - 5000:5000
    6. volumes:
    7. - /usr/local/docker/registry/data:/var/lib/registry

查看全部镜像 http://192.168.0.184:5000/v2/_catalog

20190915173905201.png

配置客户端”insecure-registries”:[“192.168.0.184:5000”]

vi /etc/docker/daemon.json

  1. {
  2. "registry-mirrors": ["https://7lr4t6cd.mirror.aliyuncs.com"],
  3. "insecure-registries":["192.168.0.184:5000"]
  4. }

Docker开启远程API

  1. vi /usr/lib/systemd/system/docker.service

需要修改的部分:

  1. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

修改后的部分:

  1. ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重启docker,使修改生效. systemctl daemon-reload systemctl restart docker

docker info 可以查看20190915164958549.png

开启防火墙的Docker构建端口 (查看端口开放情况 netstat -ntpl)

  1. firewall-cmd --zone=public --add-port=2375/tcp --permanent
  2. firewall-cmd --reload

开启防火墙systemctl start firewalld 防火墙开机启动systemctl enable firewalld

使用Maven构建Docker镜像.在应用的pom.xml文件中添加docker-maven-plugin的依赖

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. </plugin>
  7. <!-- docker的maven插件,官网:https://github.com/spotify/docker‐maven‐plugin -->
  8. <plugin>
  9. <groupId>com.spotify</groupId>
  10. <artifactId>docker-maven-plugin</artifactId>
  11. <version>1.1.0</version>
  12. <executions>
  13. <execution>
  14. <id>build-image</id>
  15. <phase>package</phase>
  16. <goals>
  17. <goal>build</goal>
  18. </goals>
  19. </execution>
  20. </executions>
  21. <configuration>
  22. <imageName>192.168.10.89:5000/${project.artifactId}:${project.version}</imageName>
  23. <dockerHost>http://192.168.10.89:2375</dockerHost>
  24. <baseImage>java:8</baseImage>
  25. <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
  26. </entryPoint>
  27. <resources>
  28. <resource>
  29. <targetPath>/</targetPath>
  30. <directory>${project.build.directory}</directory>
  31. <include>${project.build.finalName}.jar</include>
  32. </resource>
  33. </resources>
  34. </configuration>
  35. </plugin>
  36. </plugins>
  37. </build>

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 7

  • 启动nginx (需要提前创建nginx.conf配置文件及html/xx下面的静态文件)

每个静态资源文件夹都必须放在挂载的目录下(/usr/local/docker/nginx/html),不同的静态资源文件夹在nginx.conf中配置不同的server,将root指向各自具体的目录

  1. version: '3.1'
  2. services:
  3. nginx:
  4. restart: always
  5. image: nginx
  6. container_name: nginx
  7. ports:
  8. # 暴露监听的端口
  9. - 80:80
  10. volumes:
  11. - ./conf/nginx.conf:/etc/nginx/nginx.conf
  12. - ./html:/usr/share/nginx/html
  13. - ./logs:/var/log/nginx

最简默认配置

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. server {
  11. listen 80;
  12. server_name localhost;
  13. location / {
  14. root /usr/share/nginx/html;
  15. index index.html index.htm;
  16. }
  17. error_page 500 502 503 504 /50x.html;
  18. location = /50x.html {
  19. root html;
  20. }
  21. }
  22. }
  23. # 启动进程,通常设置成和 CPU 的数量相等
  24. worker_processes 1;
  25. events {
  26. # epoll 是多路复用 IO(I/O Multiplexing) 中的一种方式
  27. # 但是仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能
  28. use epoll;
  29. # 单个后台 worker process 进程的最大并发链接数
  30. worker_connections 1024;
  31. }
  32. http {
  33. # 设定 mime 类型,类型由 mime.type 文件定义
  34. include mime.types;
  35. default_type application/octet-stream;
  36. # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
  37. # 必须设为 on,如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime.
  38. sendfile on;
  39. # 连接超时时间
  40. keepalive_timeout 65;
  41. # 设定请求缓冲
  42. client_header_buffer_size 2k;
  43. # 配置虚拟主机 192.168.141.121
  44. server {
  45. # 监听的 IP 和端口,配置 192.168.141.121:80
  46. listen 80;
  47. # 虚拟主机名称这里配置 IP 地址
  48. server_name 192.168.141.121;
  49. # 所有的请求都以 / 开始,所有的请求都可以匹配此 location
  50. location / {
  51. # 使用 root 指令指定虚拟主机目录即网页存放目录
  52. # 比如访问 http://ip/index.html 将找到 /usr/local/docker/nginx/html/html80/index.html
  53. # 比如访问 http://ip/item/index.html 将找到 /usr/local/docker/nginx/html/html80/item/index.html
  54. root /usr/share/nginx/html/html80;
  55. # 指定欢迎页面,按从左到右顺序查找
  56. index index.html index.htm;
  57. }
  58. }
  59. # 配置虚拟主机 192.168.141.121
  60. server {
  61. listen 8080;
  62. server_name 192.168.141.121;
  63. location / {
  64. root /usr/share/nginx/html/html8080;
  65. index index.html index.htm;
  66. }
  67. }
  68. }

启动redis高可用集群(一主两从三哨兵)

1.创建目录 mkdir /usr/local/docker/redis/sentinel

2.在redis目录创建 vi docker-compose.yml

  1. version: '3.1'
  2. services:
  3. redis-master:
  4. image: redis:5
  5. ports:
  6. - 6379:6379
  7. restart: always
  8. container_name: redis-master
  9. command: redis-server --appendonly yes
  10. volumes:
  11. - ./data:/data
  12. redis-slave-1:
  13. image: redis:5
  14. ports:
  15. - 6380:6379
  16. restart: always
  17. container_name: redis-slave-1
  18. command: redis-server --slaveof redis-master 6379 --appendonly yes
  19. volumes:
  20. - ./data:/data
  21. links:
  22. - redis-master
  23. redis-slave-2:
  24. image: redis:5
  25. ports:
  26. - 6381:6379
  27. restart: always
  28. container_name: redis-slave-2
  29. command: redis-server --slaveof redis-master 6379 --appendonly yes
  30. volumes:
  31. - ./data:/data
  32. links:
  33. - redis-master
  34. redis-sentinel-1:
  35. build: sentinel
  36. ports:
  37. - 26379:26379
  38. container_name: redis-sentinel-1
  39. environment:
  40. - SENTINEL_DOWN_AFTER=5000
  41. - SENTINEL_FAILOVER=5000
  42. links:
  43. - redis-master
  44. - redis-slave-1
  45. - redis-slave-2
  46. redis-sentinel-2:
  47. build: sentinel
  48. ports:
  49. - 26380:26379
  50. container_name: redis-sentinel-2
  51. environment:
  52. - SENTINEL_DOWN_AFTER=5000
  53. - SENTINEL_FAILOVER=5000
  54. links:
  55. - redis-master
  56. - redis-slave-1
  57. - redis-slave-2
  58. redis-sentinel-3:
  59. build: sentinel
  60. ports:
  61. - 26381:26379
  62. container_name: redis-sentinel-3
  63. environment:
  64. - SENTINEL_DOWN_AFTER=5000
  65. - SENTINEL_FAILOVER=5000
  66. links:
  67. - redis-master
  68. - redis-slave-1
  69. - redis-slave-2

3.进入sentinel目录 创建 vi Dockerfile

  1. FROM redis:5
  2. MAINTAINER jiangli <31346337@qq.com>
  3. EXPOSE 26379
  4. ADD sentinel.conf /etc/redis/sentinel.conf
  5. RUN chown redis:redis /etc/redis/sentinel.conf
  6. ENV SENTINEL_QUORUM 2
  7. ENV SENTINEL_DOWN_AFTER 30000
  8. ENV SENTINEL_FAILOVER 180000
  9. ENV SENTINEL_AUTH_PASS 31346337
  10. COPY sentinel-entrypoint.sh /usr/local/bin/
  11. RUN chmod +x /usr/local/bin/sentinel-entrypoint.sh
  12. ENTRYPOINT ["sentinel-entrypoint.sh"]

3.在sentinel目录 创建 vi sentinel.conf

  1. port 26379
  2. dir /tmp
  3. sentinel monitor mymaster redis-master 6379 $SENTINEL_QUORUM
  4. sentinel down-after-milliseconds mymaster $SENTINEL_DOWN_AFTER
  5. sentinel parallel-syncs mymaster 1
  6. sentinel auth-pass mymaster $SENTINEL_AUTH_PASS
  7. sentinel failover-timeout mymaster $SENTINEL_FAILOVER
  1. 在sentinel目录 创建 vi sentinel-entrypoint.sh

    !/bin/sh

    sed -i “s/\$SENTINEL_QUORUM/$SENTINEL_QUORUM/g” /etc/redis/sentinel.conf
    sed -i “s/\$SENTINEL_DOWN_AFTER/$SENTINEL_DOWN_AFTER/g” /etc/redis/sentinel.conf
    sed -i “s/\$SENTINEL_FAILOVER/$SENTINEL_FAILOVER/g” /etc/redis/sentinel.conf

    exec docker-entrypoint.sh redis-server /etc/redis/sentinel.conf —sentinel

5.回到redis目录,执行 docker-compose up -d

验证集群是否成功.进入主容器写数据,进入从容器查(从容器没有写的权限)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 8

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 9

查看日志 docker logs -f redis-sentinel-1 ,停掉redis-master, 观察日志,故障迁移

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 10

进入容器查看集群是否成功 docker exec -it redis-sentinel-1 bash

连接客户端 redis-cli -p 26379, 查看redis主信息 sentinel master mymaster

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 11

查看从redis信息 sentinel slaves mymaster

  • 启动rabbitmaq

    version: ‘3.1’
    services:
    rabbitmq:

    1. restart: always
    2. image: rabbitmq:management
    3. container_name: rabbitmq
    4. ports:
    5. - 5672:5672
    6. - 15672:15672
    7. environment:
    8. TZ: Asia/Shanghai
    9. volumes:
    10. - ./data:/var/lib/rabbitmq
  • 启动mysql集群一主两从

  1. 首先拉取镜像 docker pull mysql:5.7
  2. 运行容器 docker run -d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  3. 查看mysql容器ID docker ps
  4. 将容器中mysql的配置拷贝到主库的conf中,注意目录层级关系会影响docker-compose挂载的配置

    1. mkdir -p /usr/local/docker/mysql/master/conf
    2. docker cp ae2e8348e6ea:/etc/mysql /usr/local/docker/mysql/master/conf
  1. 删除mysql容器 docker rm -f ae2e8348e6ea (以上5步的作用是获取mysql的配置文件)
  2. 给从库拷贝配置, 两个从库,拷贝两份

    1. cp -r /usr/local/docker/mysql/master /usr/local/docker/mysql/slave1
    2. cp -r /usr/local/docker/mysql/master /usr/local/docker/mysql/slave2
  1. 修改配置文件.首先我们要知道容器中要加载的配置文件是/etc/mysql/mysql.conf.d/mysqld.cnf, 所以对应的我们要修改 vi /usr/local/docker/mysql/master(slave1和slave2)/conf/mysql/mysql.conf.d/mysqld.cnf ,主从3个配置文件

    1. vi /usr/local/docker/mysql/master/conf/mysql/mysql.conf.d/mysqld.cnf
    2. log-bin=mysql-bin
    3. server_id=1

    从库设置server_id不相同即可

    1. vi /usr/local/docker/mysql/slave1/conf/mysql/mysql.conf.d/mysqld.cnf
    2. server_id=2
    3. vi /usr/local/docker/mysql/slave2/conf/mysql/mysql.conf.d/mysqld.cnf
    4. server_id=3
  1. 编写docker-compose.yml. vi docker-compose.yml

    1. version: '3'
    2. services:
    3. mysql-master:
    4. restart: always
    5. image: mysql:5.7
    6. networks:
    7. mysqlnet:
    8. ipv4_address: 172.18.0.2
    9. container_name: mysql-master
    10. ports:
    11. - 3306:3306
    12. environment:
    13. TZ: Asia/Shanghai
    14. MYSQL_ROOT_PASSWORD: 123456
    15. command:
    16. --character-set-server=utf8mb4
    17. --collation-server=utf8mb4_unicode_ci
    18. --explicit_defaults_for_timestamp=true
    19. --lower_case_table_names=1
    20. --max_allowed_packet=128M
    21. --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    22. volumes:
    23. - /usr/local/docker/mysql/master/data:/var/lib/mysql
    24. - /usr/local/docker/mysql/master/conf/mysql:/etc/mysql
    25. - /usr/local/docker/mysql/master/log:/var/log/mysql
    26. mysql-slave1:
    27. restart: always
    28. image: mysql:5.7
    29. networks:
    30. mysqlnet:
    31. ipv4_address: 172.18.0.3
    32. container_name: mysql-slave1
    33. ports:
    34. - 3307:3306
    35. depends_on:
    36. - mysql-master
    37. links:
    38. - mysql-master
    39. environment:
    40. TZ: Asia/Shanghai
    41. MYSQL_ROOT_PASSWORD: 123456
    42. command:
    43. --character-set-server=utf8mb4
    44. --collation-server=utf8mb4_unicode_ci
    45. --explicit_defaults_for_timestamp=true
    46. --lower_case_table_names=1
    47. --max_allowed_packet=128M
    48. --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    49. volumes:
    50. - /usr/local/docker/mysql/slave1/data:/var/lib/mysql
    51. - /usr/local/docker/mysql/slave1/conf/mysql:/etc/mysql
    52. - /usr/local/docker/mysql/slave1/log:/var/log/mysql
    53. mysql-slave2:
    54. restart: always
    55. image: mysql:5.7
    56. networks:
    57. mysqlnet:
    58. ipv4_address: 172.18.0.4
    59. container_name: mysql-slave2
    60. ports:
    61. - 3308:3306
    62. depends_on:
    63. - mysql-master
    64. links:
    65. - mysql-master
    66. environment:
    67. TZ: Asia/Shanghai
    68. MYSQL_ROOT_PASSWORD: 123456
    69. command:
    70. --character-set-server=utf8mb4
    71. --collation-server=utf8mb4_unicode_ci
    72. --explicit_defaults_for_timestamp=true
    73. --lower_case_table_names=1
    74. --max_allowed_packet=128M
    75. --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    76. volumes:
    77. - /usr/local/docker/mysql/slave2/data:/var/lib/mysql
    78. - /usr/local/docker/mysql/slave2/conf/mysql:/etc/mysql
    79. - /usr/local/docker/mysql/slave2/log:/var/log/mysql
    80. networks:
    81. mysqlnet:
    82. driver: bridge
    83. ipam:
    84. driver: default
    85. config:
    86. - subnet: 172.18.0.0/26
  1. 当前目录结构20191009003451402.png ,启动容器

    1. docker-compose up -d

    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 12

  2. 授权与配置主从

    进入主容器

    1.docker exec -it mysql-master /bin/bash

    调用mysql-cli:

    2.mysql -uroot -p123456

    创建用户用于同步数据

    3.create user ‘worker’@’%’ identified by ‘worker’;

    为worker用户赋予 REPLICATION SLAVE 权限。

    4.grant replication slave on . to ‘worker’@’%’;

    刷新权限

    5.FLUSH PRIVILEGES ;

    查看 master 状态

    6.show master status;

    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 1320191009011629802.pngFile和Position从库设置会用到

  3. 查看容器ip

    1. docker inspect -f '{
    2. {range .NetworkSettings.Networks}}{
    3. {.IPAddress}}{
    4. {end}}' mysql-master

    20191009014107377.png与我们在docker-compose.yml中设置的一致

  4. 进入从容器

    1.docker exec -it mysql-slave1 /bin/bash

    调用mysql-cli:

    2.mysql -uroot -p123456

    将从节点挂载到主节点上

    3.change master to master_host=’172.18.0.2’,master_port=3306,master_user=’worker’,master_password=’worker’,master_log_file=’mysql-bin.000001’,master_log_pos=154;

    启动同步

    4.START SLAVE;

    查看同步状态

    5.show slave status \G;

    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 14

  5. Slave_IO_Running和Slave_SQL_Running都是Yes则设置成功
  6. 设置从库mysql-slave2,同mysql-slave1
  7. 用数据库管理工具连接主库进行测试

    CREATE DATABASE test01;
    USE test01;
    DROP TABLE IF EXISTS course;
    CREATE TABLE course (

    1. `id` INT(11) NOT NULL AUTO_INCREMENT,
    2. `name` VARCHAR(20) NOT NULL,
    3. `lesson_period` DOUBLE(5,0) DEFAULT NULL,
    4. `score` DOUBLE(10,0) DEFAULT NULL,
    5. PRIMARY KEY (`id`)

    ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

    watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 15

  8. 连接从库查看
  9. 在主库添加数据,在从库查看

    • 启动elasticsearch+ik+head+kibana

修改系统参数 sudo vi /etc/sysctl.conf 文件最后添加一行

  1. vm.max_map_count=262144
  2. sudo sysctl -p

此参数是elasticsearch需要修改的值,如果不修改,在生产模式下elasticsearch会启动失败。

  1. version: '3'
  2. services:
  3. elasticsearch:
  4. restart: always
  5. image: bolingcavalry/elasticsearch-with-ik:6.5.0
  6. container_name: elasticsearch
  7. environment:
  8. - cluster.name=docker-cluster
  9. - bootstrap.memory_lock=true
  10. - http.cors.enabled=true
  11. - http.cors.allow-origin=*
  12. - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
  13. ulimits:
  14. memlock:
  15. soft: -1
  16. hard: -1
  17. volumes:
  18. - esdata1:/usr/share/elasticsearch/data
  19. ports:
  20. - 9200:9200
  21. - 9300:9300
  22. networks:
  23. - esnet
  24. head:
  25. restart: always
  26. image: bolingcavalry/elasticsearch-head:6
  27. container_name: head
  28. ports:
  29. - 9100:9100
  30. networks:
  31. - esnet
  32. kibana:
  33. restart: always
  34. image: docker.elastic.co/kibana/kibana-oss:6.1.4
  35. container_name: kibana
  36. networks:
  37. - esnet
  38. ports:
  39. - 5601:5601
  40. volumes:
  41. esdata1:
  42. driver: local
  43. esdata2:
  44. driver: local
  45. networks:
  46. esnet:
  47. driver: bridge

需要开放9100.9200.9300.5601端口. 测试一下

curl -X PUT http://127.0.0.1:9200/test001

curl -X POST \
‘http://127.0.0.1:9200/test001/\_analyze?pretty=true‘ \
-H ‘Content-Type: application/json’ \
-d ‘{“text”:”我们是软件工程师”,”tokenizer”:”ik_smart”}‘

curl -X DELETE http://127.0.0.1:9200/test001

查看挂载的data放哪儿了? docker inspect -f “{ {.Mounts}}“ elasticsearch

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 16

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTQwMjA1_size_16_color_FFFFFF_t_70 17

  • 启动mongo

    version: ‘3’
    services:

    1. image: mongo
    2. container_name: mongo
    3. restart: always
    4. ports:
    5. - 27017:27017
    6. networks:
    7. default:
    8. ipv4_address: 172.18.0.9
    9. environment:
    10. TZ: Asia/Shanghai
    11. MONGO_INITDB_ROOT_USERNAME: root
    12. MONGO_INITDB_ROOT_PASSWORD: 123456
    13. volumes:
    14. - mongodata:/data/db
    15. command: --auth

    volumes:
    esdata:

    1. driver: local

    mongodata:

    networks:
    default:

    1. external:
    2. name: net
  • 启动alibaba-sentinel

    version: ‘3.1’
    services:
    sentinel:

    1. image: bladex/sentinel-dashboard
    2. restart: always
    3. container_name: sentinel
    4. ports:
    5. - 8858:8858

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读