docker 安装镜像及使用命令

目录

  • 1. Mysql
  • 2. Redis
  • 3. Nginx
  • 4. Elasticsearch
    • 单机
    • ik分词器
    • 官网集群指导
    • 个人集群
  • 5. RocketMQ

docker pull 容器名:版本号 拉取容器, 不指定版本号默认最新的
docker exec -it 容器名称 bash 可以进入该容器,进行操作

run命令 解释
-d 后台启动
-p 宿主机端口:容器端口
--name 容器名称
-e pass_word=123456 (环境变量,k=v)
-v 目录映射,宿主机目录:容器目录
sh 指定那个脚本启动

docker-compose up -d 后台启动
docker-compose down 停止

1. Mysql

# 拉去mysql
docker pull mysql:version
# 启动mysql
docker run -p 3306:3306 --name xyy_mysql -e MYSQL_ROOT_PASSWORD=123456 -v D:/docker/mysql/data:/var/lib/mysql -d mysql:版本 --character-set-server=utf8mb4

后续不需要重复这么启动, 只需要以下方式即可启动, 其他同理

docker start xyy_mysql

2. Redis

docker pull redis:version
  1. 创建网络 里面有个IPAM.Config.Gateway 的值记下来, 是网络ip
    # 删除网络信息
    docker network rm redis_network
    # 重新创建子网指定subnet, 172.21这个很重要
    docker network create --subnet 172.21.0.0/16 redis_network
    # 查看网络信息 `IPAM.Config.Subnet`的值
    docker network inspect redis_network
    
    
  2. 创建本地磁盘和容器映射
    vim conf\node-1\redis.conf
    vim conf\node-2\redis.conf
    vim conf\node-3\redis.conf
    
    `vim redis.conf`
    # 分别写入以下配置
    port 6379 #端口
    bind 0.0.0.0 #开其他设备访问权限
    cluster-enabled yes #集群支持
    cluster-config-file nodes.conf # 节点配置文件
    cluster-node-timeout 5000 # 节点超时
    cluster-announce-ip 172.21.0.11 ##node2 node3 分别+1
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    appendonly yes #持久化
    requirepass 123456 # 密码
    
  3. 启动redis
    docker run -p 6371:6379 -p 16371:16379 --name redis-1 -v D:\docker\redis\data\node-1:/data -v D:\docker\redis\conf\node-1\redis.conf:/etc/redis/redis.conf --net redis_network --ip 172.21.0.11 -d redis redis-server /etc/redis/redis.conf
    docker run -p 6372:6379 -p 16372:16379 --name redis-2 -v D:\docker\redis\data\node-2:/data -v D:\docker\redis\conf\node-2\redis.conf:/etc/redis/redis.conf --net redis_network --ip 172.21.0.12 -d redis redis-server /etc/redis/redis.conf
    docker run -p 6373:6379 -p 16373:16379 --name redis-3 -v D:\docker\redis\data\node-3:/data -v D:\docker\redis\conf\node-3\redis.conf:/etc/redis/redis.conf --net redis_network --ip 172.21.0.13 -d redis redis-server /etc/redis/redis.conf
    
  4. 集群配置
    –cluster-replicas 1 表示每台主节点至少需要一个从节点
    -a 123456 表示需要密码认证
    	# 进入redis-1 控制台
    	docker exec -it redis-1 bash
    	# 集群配置
    	redis-cli [-a password] --cluster [-replicas 1] create 172.21.0.11:6379 172.21.0.12:6379 172.21.0.13:6379
    
  5. 检查集群信息
    # 登录
    redis-cli -c 
    # 认证密码
    auth "123456"
    # 集群信息
    cluster info
    # 节点信息
    cluster nodes
    

3. Nginx

  1. 拉取nginx

    docker pull nginx:version
    
  2. 启动 nginx 并查看容器id

    docker run -p 9998:80 --name nginx -d nginx:版本
    docker ps # 查看容器id
    
  3. 将nginx中的conf文件复制出来

    docker下nginx的目录就是这里

    	docker cp 容器ID:/etc/nginx/nginx.conf /server/nginx/conf
    
  4. 创建几个文件夹

    mkdir -p /server/nginx/logs #日志
    mkdir -p /server/nginx/conf #配置
    
  5. 停止之前的镜像并删除

    docker stop nginx
    docker rm nginx
    
  6. 重新启动nginx镜像配置

    docker run -d -p 9999:80 --name nginx -v /server/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /server/nginx/logs:/var/log/nginx --privileged=true nginx:1.17.8
    

4. Elasticsearch

默认账号: elastic
默认密码: 环境变量ELASTIC_PASSWORD

单机

  1. 拉取es

    docker pull docker.elastic.co/elasticsearch/elasticsearch:8.13.3
    
  2. 创建网络

    docker network create es_network
    
  3. 创建映射文件夹

    mkdir -p D:/docker/es/conf
    mkdir -p D:/docker/es/data
    mkdir -p D:/docker/es/plugins
    echo "http.host : 0.0.0.0" >> D:/docker/es/conf/elasticsearch.yml
    
  4. 启动
    discovery.type=single-node 单节点启动

    docker run --name es -p 9200:9200 -p 9300:9300 \
    -e "discovery.type=single-node"\
    -e ES_JAVA_OPTS="-Xms64m -Xmx128m"
    -v D:/docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml\
    -v D:/docker/es/data:/usr/share/elasticsearch/data\
    -v D:/docker/es/plugins:/usr/share/elasticsearch/plugins\
    -d elasticsearch:8.13.3
    
    docker run --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" -v D:/docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v D:/docker/es/data:/usr/share/elasticsearch/data -v D:/docker/es/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:8.13.3
    

    ik分词器

  5. 下载ik分词器
    下载地址: https://release.infinilabs.com/analysis-ik/stable/
    将对应下载好的zip安装包解压到 D:/docker/es/plugins 因为之前做了映射. (ps: 不要将压缩包放到目录下, 这个目录只放插件)

  6. 将ik分词器作为默认分词器
    ES的默认分词是standard, 会在分割中文时将每个汉字都拆分开,
    IK分词器有两种设置, 一种是 ik_smart 最少分片, 会将 “清华大学” 分为 “清华大学” , 另一种是 ik_max_word 最细分片 会将"清华大学" 分为 “清华”,“大学”

    PUT /school_index
    {
    	"setting":{
    		"index":{
    			"analysis.analyzer.default.type":"ik_max_word"
    		}	
    	}
    }
    

官网集群指导

官方指导链接: https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

  1. .env 文件

    # es 密码, 6位数起
    ELASTIC_PASSWORD=123456
    
    # kabana 密码, 6位数起
    KIBANA_PASSWORD=123456
    
    # es安装版本
    STACK_VERSION=8.13.3
    
    # 集群名称
    CLUSTER_NAME=docker-es-cluster
    
    # 简单模式或者试用模式(30)
    LICENSE=basic
    #LICENSE=trial
    
    # 映射ip, 如果指定端口则只有指定机器可以访问
    ES_PORT=9200
    #ES_PORT=127.0.0.1:9200
    
    # kabana端口
    KIBANA_PORT=5601
    #KIBANA_PORT=80
    
    # 内存大小(in bytes 1G)
    MEM_LIMIT=1073741824
    
    # 集群节点名称前缀, (默认当前文件夹名称)
    COMPOSE_PROJECT_NAME=es
    

    个人集群

    1. .env文件用官网推荐的

    2. 先下载ik分词器,

      1. 手动: 下载 https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.13.3.zip。 放到/var/lib/docker/volumes/esplugins
      2. 自动:
        等执行完docker-compose后再执行, 然后重启es
        # 登录es01
        docker exec -it es01 bash
        # 安装
        elasticsearch-plugin install  https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.13.3.zip
        # 切到插件目录
        cd /usr/share/elasticsearch/plugins
        # 查看是否存在
        ll -a
        
    3. 这里要注意几个问题:

      1. 设置密码
      2. 因为使用了ssh,所有配置都使用 https 而不是http
      3. prots下的端口为 宿主机端口:容器端口(使用kibana的情况下 需要使用https://es01:9200地址)
      4. 如果报错什么文件夹没有啊, mkdir命令创建一下
    # version: "2.2" # 默认用最新版本
    
    services:
      setup:
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        volumes:
          - certs:/usr/share/elasticsearch/config/certs
        user: "0" # 以root用户运行
        # 设置命令
        # 1. 如果密码为空,则退出
        # 2. 如果CA证书不存在,则创建CA证书
        # 3. 如果证书不存在,则创建证书
        # 4. 设置文件权限
        command: >
          bash -c '
            if [ x${ELASTIC_PASSWORD} == x ]; then
              echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
              exit 1;
            elif [ x${KIBANA_PASSWORD} == x ]; then
              echo "Set the KIBANA_PASSWORD environment variable in the .env file";
              exit 1;
            fi;
            if [ ! -f config/certs/ca.zip ]; then
              echo "Creating CA";
              bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
              unzip config/certs/ca.zip -d config/certs;
            fi;
            if [ ! -f config/certs/certs.zip ]; then
              echo "Creating certs";
              echo -ne \
              "instances:\n"\
              "  - name: es01\n"\
              "    dns:\n"\
              "      - es01\n"\
              "      - localhost\n"\
              "    ip:\n"\
              "      - 127.0.0.1\n"\
              "  - name: es02\n"\
              "    dns:\n"\
              "      - es02\n"\
              "      - localhost\n"\
              "    ip:\n"\
              "      - 127.0.0.1\n"\
              "  - name: es03\n"\
              "    dns:\n"\
              "      - es03\n"\
              "      - localhost\n"\
              "    ip:\n"\
              "      - 127.0.0.1\n"\
              > config/certs/instances.yml;
              bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
              unzip config/certs/certs.zip -d config/certs;
            fi;
            echo "Setting file permissions"
            chown -R root:root config/certs;
            find . -type d -exec chmod 750 \{\} \;;
            find . -type f -exec chmod 640 \{\} \;;
          '
        healthcheck:
          test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"]
          interval: 1s
          timeout: 5s
          retries: 120
    
      es01:
        depends_on:
          setup:
            condition: service_healthy  # 等待setup服务健康
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        
        container_name: es01
        volumes:
          - certs:/usr/share/elasticsearch/config/certs
          - esdata01:/usr/share/elasticsearch/data
          - eslogs01:/usr/share/elasticsearch/logs
          - esconfig01:/usr/share/elasticsearch/config
          - esplugins:/usr/share/elasticsearch/plugins
        ports:
          - 9201:9200
          - 9301:9300
        environment:
        # 基础配置
          - node.name=es01 # 节点名称
          - cluster.name=${CLUSTER_NAME} # 集群名称
          - cluster.initial_master_nodes=es01,es02,es03 # 初始主节点
          - discovery.seed_hosts=es02,es03 # 发现种子节点
          # 安全配置
          - ELASTIC_PASSWORD=${ELASTIC_PASSWORD} # 密码
          - bootstrap.memory_lock=true # 内存锁定
          - xpack.security.enabled=true # 安全配置
          # HTTP SSL配置
          - xpack.security.http.ssl.enabled=true # 启用HTTP SSL
          - xpack.security.http.ssl.key=certs/es01/es01.key # 密钥
          - xpack.security.http.ssl.certificate=certs/es01/es01.crt # 证书
          - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt # 证书颁发机构
          # 传输SSL配置
          - xpack.security.transport.ssl.enabled=true # 启用传输SSL
          - xpack.security.transport.ssl.key=certs/es01/es01.key # 密钥地址
          - xpack.security.transport.ssl.certificate=certs/es01/es01.crt # 证书地址
          - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt # 证书颁发机构地址
          - xpack.security.transport.ssl.verification_mode=certificate # 验证模式
          # 其他配置
          - xpack.license.self_generated.type=${LICENSE} # 许可证类型 Set to 'basic' or 'trial' to automatically start the 30-day trial
          - xpack.ml.use_auto_machine_memory_percent=true # 机器学习自动内存管理
        mem_limit: ${MEM_LIMIT} # 内存限制  
        ulimits:
          memlock:
            soft: -1
            hard: -1
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "curl -s --cacert config/certs/ca/ca.crt https://localhost:9201 | grep -q 'missing authentication credentials'",
            ]
          interval: 10s
          timeout: 10s
          retries: 120
    
      es02:
        depends_on:
          - es01
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: es02
        volumes:
          - certs:/usr/share/elasticsearch/config/certs
          - esdata02:/usr/share/elasticsearch/data
          - eslogs02:/usr/share/elasticsearch/logs
          - esconfig02:/usr/share/elasticsearch/config
          - esplugins:/usr/share/elasticsearch/plugins
        ports:
          - 9202:9200
          - 9302:9300
        environment:
          - node.name=es02
          - cluster.name=${CLUSTER_NAME}
          - cluster.initial_master_nodes=es01,es02,es03
          - discovery.seed_hosts=es01,es03
          - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
          - bootstrap.memory_lock=true
          - xpack.security.enabled=true
          - xpack.security.http.ssl.enabled=true
          - xpack.security.http.ssl.key=certs/es02/es02.key
          - xpack.security.http.ssl.certificate=certs/es02/es02.crt
          - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
          - xpack.security.transport.ssl.enabled=true
          - xpack.security.transport.ssl.key=certs/es02/es02.key
          - xpack.security.transport.ssl.certificate=certs/es02/es02.crt
          - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
          - xpack.security.transport.ssl.verification_mode=certificate
          - xpack.license.self_generated.type=${LICENSE}
          - xpack.ml.use_auto_machine_memory_percent=true
        mem_limit: ${MEM_LIMIT}
        ulimits:
          memlock:
            soft: -1
            hard: -1
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "curl -s --cacert config/certs/ca/ca.crt https://localhost:9202 | grep -q 'missing authentication credentials'",
            ]
          interval: 10s
          timeout: 10s
          retries: 120
    
      es03:
        depends_on:
          - es02
        image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
        container_name: es03
        volumes:
          - certs:/usr/share/elasticsearch/config/certs
          - esdata03:/usr/share/elasticsearch/data
          - eslogs03:/usr/share/elasticsearch/logs
          - esconfig03:/usr/share/elasticsearch/config
          - esplugins:/usr/share/elasticsearch/plugins
        ports:
          - 9203:9200
          - 9303:9300
        environment:
          - node.name=es03
          - cluster.name=${CLUSTER_NAME}
          - cluster.initial_master_nodes=es01,es02,es03
          - discovery.seed_hosts=es01,es02
          - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
          - bootstrap.memory_lock=true
          - xpack.security.enabled=true
          - xpack.security.http.ssl.enabled=true
          - xpack.security.http.ssl.key=certs/es03/es03.key
          - xpack.security.http.ssl.certificate=certs/es03/es03.crt
          - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
          - xpack.security.transport.ssl.enabled=true
          - xpack.security.transport.ssl.key=certs/es03/es03.key
          - xpack.security.transport.ssl.certificate=certs/es03/es03.crt
          - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
          - xpack.security.transport.ssl.verification_mode=certificate
          - xpack.license.self_generated.type=${LICENSE}
          - xpack.ml.use_auto_machine_memory_percent=true
        mem_limit: ${MEM_LIMIT}
        ulimits:
          memlock:
            soft: -1
            hard: -1
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "curl -s --cacert config/certs/ca/ca.crt https://localhost:9203 | grep -q 'missing authentication credentials'",
            ]
          interval: 10s
          timeout: 10s
          retries: 120
    # 卷 默认目录为: /var/lib/docker/volumes下创建
    volumes:
      certs:
        driver: local
    
      esdata01:
        driver: local
      esdata02:
        driver: local
      esdata03:
        driver: local
    
      eslogs01:
        driver: local
      eslogs02:
        driver: local
      eslogs03:
        driver: local
    
      esconfig01:
        driver: local
      esconfig02:
        driver: local
      esconfig03:
        driver: local
    
      esplugins:
        driver: local
    

5. RocketMQ

官网指导:https://rocketmq.apache.org/zh/docs/quickStart/03quickstartWithDockercompose
参考:https://blog.csdn.net/Anbang713/article/details/107050264

文件有点多:confbin目录是rocketmq中的示例文件
https://gitee.com/xyyzjj/docker-compose-script/tree/master/rocketmq
启动成功后访问: http://f:8999/

你可能感兴趣的:(docker,容器,运维)