• 记录使用docker-compose搭建中间件基础环境


    docker常用命令

    docker stop `docker ps -aq`---------停止本地电脑上的所有环境容器进程
    docker rm `docker ps -aq`---------删除所有容器
    docker rmi `docker images`---------删除所有镜像
    docker ps -a ---------查看所有容器
    docker images ---------查看所有镜像
    docker search ---------查找相关镜像
    docker pull 镜像:版本 ---------拉取镜像
    docker run -d(后台运行) -v(容器卷挂载) -p(端口映射) --name(自定义容器名) --restart=always(开机自启动) ---------运行容器
    docker logs 容器名/容器id ---------查看容器运行日志
    docker login -u 用户名 -p 密码 ---------登陆到dockerhub
    docker commit -m "描述信息" -a "作者" 基础镜像名 你想要的镜像名:版本号(不填默认为latest)---------提交镜像到dockerhub 
    docker logout---------退出dockerhub
    docker exec -it 容器id /bin/bash ---------后台运行进入容器内部
    docker rmi `docker images -f dangling=true`-------删除tag为<none>的镜像。这些镜像为在构建过程中产生的中间镜像
    docker system prune------清理没有使用的数据,包括镜像数据,已经停止的容器
    docker system df-------Docker整体磁盘使用率的概况,包括镜像、容器和(本地)volume
    docker inspect --format{{.State.Running}}’ 容器名-------查看容器是否在运行,若是返回true
    docker ps -q-------显示所有容器的容器ID
    docker ps -f name=容器名-----过滤并展示name=容器名的容器信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    提交个人镜像上传到dockerhub

    • 登陆dockerhub
      docker login -u 用户名 -p 密码
    • 打包镜像
      docker commit -m "test nginx commit" -a "hzhii" nginx hzhnginx:v1.0
      -m表示镜像信息,-a表示作者情况
      在这里插入图片描述
    • 修改镜像名格式
      docker tag hzhnginx:v1.0 5925docker/hzhnginx:v1.0
      上传到dockerhub中镜像的格式要求为 用户名/镜像名:Tag信息
      在这里插入图片描述
    • 提交镜像
      docker push 用户名/镜像名:Tag
      若不添加tag则默认为latest
      在这里插入图片描述
    • 查看结果
      在这里插入图片描述
    • 退出ssh登陆的dockerhub
      docker logout
      在这里插入图片描述

    dockerfile(以记录的方式构建镜像)

    占一个坑,后续补充

    安装docker-compose

    • 安装最新稳定版docker-compose
      sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    • 授权
      sudo chmod +x /usr/local/bin/docker-compose
    • 查看安装结果
      docker-compose version

    docker-compose各参数说明

    docker-compose.yml 配置文件编写详解

    docker-compose minio

    version: "3.5" #表示使用第几代语法来构建 docker-compose.yaml 文件
    services: #compose 需要启动的服务,多个服务之间保留一个空格行
      minio: #需要配置minio的服务
        image: minio/minio #镜像名称,可通过docker search查找或去docker hub查找
        container_name: "minio" #自定义镜像的名称
        ports: #端口绑定
          - "9000:9000"
          - "9010:9010"
        volumes: #容器卷挂载目录
          - "/mydata/minio/data:/data"
        environment: #minio配置文件参数
          MINIO_ACCESS_KEY: "minioadmin"
          MINIO_SECRET_KEY: "minioadmin"
        command: server /data --console-address ":9010" #表示以这个命令来启动容器
        deploy: #指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。
          restart_policy: #重试策略
            condition: on-failure
        restart: always #是否开机自启动
        logging: #日志文件相关信息
          driver: json-file #通过json格式记录
          options:
            max-size: "200k" #单个文件最大值
            max-file: "10" #最多多少个文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    docker-compose 搭建Redis+Tomcat+mysql+rabbitMq+jenkins基础环境

    version: '3.3'
    services:
      mysql:
        image: mysql:5.7
        container_name: mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
          TZ: Asia/Shanghai
          MYSQL_DATABASE: pro
        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
        ports:
          - 3306:3306
        volumes:
          - /mydata/mysql/data:/var/lib/mysql
          - /mydata/mysql/conf:/etc/mysql/conf.d
          - /mydata/mysql/init:/docker-entrypoint-initdb.d/ 
      redis:
        image: redis:5.0.14-alpine3.15
        container_name: redis
        restart: always
        command: ["redis-server","/etc/redis/redis.conf"]
        ports:
         - 6379:6379
        volumes:
         - /mydata/redis/data:/data
         - /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
      rabbitmq:
        image: rabbitmq:3.8.3-management
        container_name: rabbitmq
        restart: always
        ports:
         - 15672:15672
         - 5672:5672
        volumes:
         - /mydata/rabbitmq/data:/var/lib/rabbitmq
        environment:
         - RABBITMQ_DEFAULT_USER=root
         - RABBITMQ_DEFAULT_PASS=root
      nginx:
        image: nginx:stable-alpine-perl
        container_name: nginx
        restart: always
        ports:
         - 80:80
        volumes:
         - /mydata/nginx/html:/usr/share/nginx/html
         - /mydata/nginx/logs:/var/log/nginx
         - /mydata/nginx/conf.d:/etc/nginx/conf.d
         - /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      tomcat:
        restart: always
        image: tomcat:9.0
        container_name: tomcat
        privileged: true
        ports:
         - 8080:8080
        volumes:
         - /mydata/tomcat/webapps:/usr/local/tomcat/webapps
         - /mydata/tomcat/conf:/usr/local/tomcat/conf
         - /mydata/tomcat/logs:/usr/local/tomcat/logs
        environment:
          TZ: Asia/Shanghai
      jenkins:
        restart: always
        image:  jenkins/jenkins:lts-centos7-jdk8
        container_name: jenkins
        ports:
         - 10240:8080
         - 10241:50000
        volumes:
         - /mydata/jenkins/home:/var/jenkins_home
         - $(which docker):/usr/bin/docker
         - /var/run/docker.sock:/var/run/docker.sock
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 由于Tomcat镜像初始化运行时挂载的目录没有配置文件,所以如果直接通过以上配置文件进行启动,会报错。正确的做法时先运行一个临时的Tomcat容器,并将其相关配置文件复制保存到自己挂载的宿主机目录下,删除容器。然后再通过docker-compose up -d执行以上的compose文件。具体的相关操作可以看以下的shell脚本,在tomcat部分展示了如何获取配置文件并通过docker cp命令复制到自己的目录的流程。
    echo -e "\e[1;31m运行镜像生成临时容器....\e[0m"
    docker run --name tomcat -d -p 8080:8080 tomcat:9.0
    echo -e "\e[1;31m进行文件复制....\e[0m"
    docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat
    docker cp tomcat:/usr/local/tomcat/logs /mydata/tomcat
    docker cp tomcat:/usr/local/tomcat/webapps /mydata/tomcat
    echo -e "\e[1;31m停止tomcat并删除临时容器....\e[0m"
    docker stop tomcat
    docker rm tomcat
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 补充-v与-mount的说明:

    docker中“-v”与“-mount”的区别是:挂载主机目录使用“-v”时,如果宿主机上没有指定文件不会报错,会自动创建指定文件;当使用“-mount”时,如果宿主机中没有这个文件会报错找不到指定文件,不会自动创建指定文件

    通过shell脚本完成基础容器环境搭建

    需要提前创建/mydata文件夹,并把该shell放置在该目录下。确保该shell生成的yaml文件,能在该目录下被docker-compose up -d启动

    echo -e "\e[1;31m创建mysql相关目录....\e[0m"
    mkdir -p /mydata/mysql/data
    mkdir -p /mydata/mysql/conf
    mkdir -p /mydata/mysql/init
    chmod -R 777 /mydata/mysql
    rm -rf /mydata/mysql/data/*
    echo -e "\e[1;31m复制sql文件到初始化目录....\e[0m"
    cp /sql/pro.sql /mydata/mysql/init
    echo -e "\e[1;31m写入mysql配置文件....\e[0m"
    cat > /mydata/mysql/conf/my.cnf << EOF
    [mysqld]
    user=mysql
    default-storage-engine=INNODB
    character-set-server=utf8mb4
    collation-server = utf8mb4_general_ci
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    EOF
    echo -e "\e[1;31m创建redis相关目录....\e[0m"
    mkdir -p /mydata/redis/data
    mkdir -p /mydata/redis/conf
    chmod -R 777 /mydata/redis
    rm -rf /mydata/redis/data/*rm -rf /mydata/redis/conf/*
    echo -e "\e[1;31m写入redis相关配置文件....\e[0m"
    cat > /mydata/redis/conf/redis.conf << EOF
    appendonly yes
    EOF
    chmod 777 /mydata/redis/conf/redis.conf
    echo -e "\e[1;31m创建rabbitmq相关配置文件\e[0m"
    mkdir -p /mydata/rabbitmq/data
    chmod -R 777 /mydata/rabbitmq
    rm -rf /mydata/rabbitmq/data/*
    echo -e "\e[1;31m创建Nginx相关配置文件\e[0m"
    mkdir -p /mydata/nginx/html /mydata/nginx/conf /mydata/nginx/conf.d /mydata/nginx/logs
    rm -rf /mydata/nginx/html/*
    rm -rf /mydata/nginx/conf/*
    rm -rf /mydata/nginx/conf.d/*
    rm -rf /mydata/nginx/logs/*
    chmod -R 777 /mydata/nginx
    echo -e "\e[1;31m写入nginx相关配置文件\e[0m"
    cat > /mydata/nginx/conf/nginx.conf << EOF
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
    
        keepalive_timeout  300;
        server {
            listen       80;
            server_name  192.168.56.103;
          
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }
          
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    EOF
    echo -e "\e[1;31m写入nginx默认首页\e[0m"
    cat > /mydata/nginx/html/index.html << EOF
    

    welcome to Nginx!</h3> EOF echo -e "\e[1;31m创建Tomcat文件夹\e[0m" mkdir -p /mydata/tomcat chmod -R 777 /mydata/tomcat echo -e "\e[1;31m清除docker-compose.yaml文件\e[0m" rm -rf /mydata/docker-compose.yaml echo -e "\e[1;31m写入docker-compose.yaml文件....\e[0m" cat > /mydata/docker-compose.yaml << EOF version: '3.3' services: mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 TZ: Asia/Shanghai MYSQL_DATABASE: pro 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 ports: - 3306:3306 volumes: - /mydata/mysql/data:/var/lib/mysql - /mydata/mysql/conf:/etc/mysql/conf.d - /mydata/mysql/init:/docker-entrypoint-initdb.d/ redis: image: redis:5.0.14-alpine3.15 container_name: redis restart: always command: ["redis-server","/etc/redis/redis.conf"] ports: - 6379:6379 volumes: - /mydata/redis/data:/data - /mydata/redis/conf/redis.conf:/etc/redis/redis.conf rabbitmq: image: rabbitmq:3.8.3-management container_name: rabbitmq restart: always ports: - 15672:15672 - 5672:5672 volumes: - /mydata/rabbitmq/data:/var/lib/rabbitmq environment: - RABBITMQ_DEFAULT_USER=root - RABBITMQ_DEFAULT_PASS=root nginx: image: nginx:stable-alpine-perl container_name: nginx restart: always ports: - 80:80 volumes: - /mydata/nginx/html:/usr/share/nginx/html - /mydata/nginx/logs:/var/log/nginx - /mydata/nginx/conf.d:/etc/nginx/conf.d - /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf tomcat: restart: always image: tomcat:9.0 container_name: tomcat privileged: true ports: - 8080:8080 volumes: - /mydata/tomcat/webapps:/usr/local/tomcat/webapps - /mydata/tomcat/conf:/usr/local/tomcat/conf - /mydata/tomcat/logs:/usr/local/tomcat/logs environment: TZ: Asia/Shanghai EOF echo -e "\e[1;31m创建临时tomcat并获取配置文件....\e[0m" docker run --name tomcat -d -p 8080:8080 tomcat:9.0 echo -e "\e[1;31m进行文件复制....\e[0m" docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat docker cp tomcat:/usr/local/tomcat/logs /mydata/tomcat docker cp tomcat:/usr/local/tomcat/webapps /mydata/tomcat echo -e "\e[1;31m停止tomcat并删除临时容器....\e[0m" docker stop tomcat docker rm tomcat echo -e "\e[1;31m启动所有基础环境中....\e[0m" docker-compose up -d echo -e "\e[1;31m请核对docker进程的状态\e[0m" docker ps -a
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164

    踩坑记录

    $‘\r‘: command not found

    出现该问题的原因是因为Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致运行错误。
    解决办法:请参考$‘\r‘: command not found的解决方法

    tomcat提示找不到配置文件,一直重试启动

    首先先看一段代码:
    docker cp tomcat:/usr/local/tomcat/conf /mydata/test/conf
    docker cp tomcat:/usr/local/tomcat/logs /mydata/test/logs
    docker cp tomcat:/usr/local/tomcat/webapps /mydata/test/webapps
    很正常的一段代码吧,看着也没问题。这段代码的意思是将容器内conf,logs,webapps的所有配置文件拷贝到我们自己的相关目录下。那我们运行其中一段试试看。
    目录结构如下:
    [root@localhost test]# tree -a
    .
    ├── conf
    ├── logs
    └── webapps
    3 directories, 0 files
    在这里插入图片描述
    执行命令docker cp tomcat:/usr/local/tomcat/conf /mydata/test/conf,查看目录复制情况
    在这里插入图片描述
    [root@localhost test]# tree
    .
    ├── conf
    │ └── conf
    │ ├── Catalina
    │ │ └── localhost
    │ ├── catalina.policy
    │ ├── catalina.properties
    │ ├── context.xml
    │ ├── jaspic-providers.xml
    │ ├── jaspic-providers.xsd
    │ ├── logging.properties
    │ ├── server.xml
    │ ├── tomcat-users.xml
    │ ├── tomcat-users.xsd
    │ └── web.xml
    ├── logs
    └── webapps
    6 directories, 10 files
    发现问题了吗,问题就在docker cp命令,他把整个conf目录复制过来了,而我们本意是想要conf下的配置文件。我们进行容器卷挂载的时候,我们挂载的目录为: - /mydata/test/conf:/usr/local/tomcat/conf,而现在我们的挂载目录为 /mydata/test/conf/conf/…配置文件。挂载就对不上了呀,对不上就自然无法启动了
    解决办法:docker cp tomcat:/usr/local/tomcat/conf /mydata/tomcat既然它直接复制整个文件夹,那我们就让它复制到我们的tomcat目录下就可以了,无需再自己创建\conf,\logs,\webapp的文件夹了

  • 相关阅读:
    Qt5.14.2使用虚拟键盘
    Hadoop源码阅读(三):HDFS上传
    sql语句-如何以一个表中的数据为条件据查询另一个表中的数据
    [Azure VM] Azure virtual machine agent status is not ready
    构建一个商业智能 BI 分析平台,公司CIO应该重点关注什么?
    20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示
    基于检索增强的 GPT-3.5 的文本到 SQL 框架,具有样本感知提示和动态修订链。
    做这么多年程序员了,才把ELK和springboot的日志解决方案弄明白
    【好文鉴赏】优秀的后端应该有哪些开发习惯
    CocosCreator 面试题(三)JavaScript闭包原理和作用
  • 原文地址:https://blog.csdn.net/ptGrapes/article/details/127421230