docker-compose 安装常用docker镜像(kafka、redis、mysql、elasticesarch、zookeeper、mongo)
Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
docker-compose常用命令:
在mac或windows系统中,只需要 下载Docker Desktop 应用,即可直接使用docker-compose脚本
在Linux系统中,安装docker-compose的步骤如下
先 安装docker
下载二进制文件(似乎需要与当前安装的docker大版本匹配,从1.29.1开始支持depend_on,建议使用2.0.1版本):
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m`" > /usr/local/bin/docker-compose
3. 授权:sudo chmod +x /usr/local/bin/docker-compose
4. 选做,创建一个软链接:sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose常用命令:
查看docker-compose版本(确认是否安装):docker-compose version
拉取docker-compose.yml文件中使用到的images:docker-compose pull
部署docker-compose服务:docker-compose [ -f docker-compose.yml ] [ -p dev ] up [ -d ] [ kafka mysql redis es kibana ]
-f 指定docker-compose要使用的配置文件,不指定时默认使用docker-compose.yml
-p 指定项目名称(project_name)
-d 指定应用在后台启动
最后的可选值,如果不指定,则启动配置文件中的所有service;如果指定了service名称,则只启动指定的service(如果此service需要依赖其他service,则被依赖的service也会启动)
重启已停止的 Compose 应用:docker-compose restart
停止 Compose 应用相关的所有容器(不删除):docker-compose stop
删除已停止的 Compose 应用:docker-compose rm
列出 Compose 应用中的各个容器:docker-compose ps
停止并删除运行中的 Compose 应用:docker-compose down
注意事项:
如果容器挂载了外部文件夹,则需要先创建文件夹,否则报错
低版本(1.*版本)要使用
docker-compose命令,桌面版docker高版本(docker-compose 2.*)可以使用docker compose命令关于`docker-compose.yml`文件中version与docker版本的对应关系,见 Compose-file
注意`docker-compose.yml`文件中双引号的使用!
docker-compose.yml文件
# docker compose commands --> # 后台启动配置文件中的所有服务: # docker compose -f docker-compose.yml -p dev up -d # 后台启动一部分服务 # docker compose -f docker-compose.yml -p dev up -d kafka mysql redis es kibana # 关闭所有服务 # docker compose down version: '3' services: kafka: image: wurstmeister/kafka:2.12-2.4.1 container_name: kafka # 依赖其他服务时,docker会先启动其他服务,注意service名称的对应 depends_on: [ zookeeper ] # 重启策略:在什么情况下服务会重启,可选值有no、always、on-failure、unless-stopped restart: "no" # 宿主机端口号到容器端口号的映射 ports: - "9092:9092" # 观景变量的配置,注意引号的使用,也可以使用另一种形式配置(冒号后有空格,且没有最前面的”-“) variable: 123 environment: # 如果需要允许其他客户端访问,可能需要将这里的ip改为自己宿主机实际使用的ip地址,如 192.168.2.236 - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.11.91:9092 # - KAFKA_ADVERTISED_HOST_NAME=127.0.0.1 - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_HEAP_OPTS="-Xms200m -Xmx512M" - KAFKA_AUTO_CREATE_TOPICS_ENABLE=true - KAFKA_BROKER_ID=0 # - KAFKA_LOG_DIRS="/kafka/kafka-logs-1" # volumes: # - /usr/local/kafka/logs:/kafka/kafka-logs-1 zookeeper: image: zookeeper:3.5.9 container_name: zookeeper restart: on-failure ports: - "2181:2181" # volumes: # - /usr/local/zookeeper/data:/data # - /usr/local/zookeeper/log:/datalog # --------------------------------------------------------- mysql: image: mysql:5.7.33 container_name: mysql ports: # 宿主机的端口:容器的端口 - "3306:3306" #让容器拥有root权 privileged: true command: --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --default-authentication-plugin=mysql_native_password #这行代码解决无法访问的问题 # ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; environment: - MYSQL_ROOT_PASSWORD=123456 # - MYSQL_USER=mysql # - MYSQL_PASS=123456 volumes: - ~/mysql_data:/var/lib/mysql # --------------------------------------------------------- redis: image: redis:6.2.1 container_name: redis ports: - "6379:6379" deploy: resources: limits: cpus: '0.50' memory: 500M environment: - TZ=Asia/Shanghai - LANG=en_US.UTF-8 # --------------------------------------------------------- mongo: image: mongo:4.4.9 container_name: mongo ports: - "27017:27017" environment: - MONGO_INITDB_ROOT_USERNAME=admin - MONGO_INITDB_ROOT_PASSWORD=123456 - TZ=Asia/Shanghai # --------------------------------------------------------- es: image: elasticsearch:7.11.2 container_name: es ports: - "9200:9200" - "9300:9300" environment: - ES_JAVA_OPTS=-Xms128m -Xmx1024m - cluster.name=elasticsearch - discovery.type=single-node - bootstrap.memory_lock=true - http.cors.enabled=true - http.cors.allow-origin=* - TZ=Asia/Shanghai ulimits: memlock: soft: -1 hard: -1 kibana: image: kibana:6.8.20 container_name: kibana ports: - "5601:5601" depends_on: [ es ] environment: - ELASTICSEARCH_URL=http://192.168.11.91:9200 # --------------------------------------------------------- eureka: image: eureka:local container_name: eureka ports: - 8761:8761 environment: PORT: "8761" SPRING_PROFILES_ACTIVE: dev # --------------------------------------------------------- hbase-master: image: bde2020/hbase-master:1.0.0-hbase1.2.6 container_name: hbase-master hostname: hbase-master env_file: - ~/hbase-distributed-local.env environment: SERVICE_PRECONDITION: "namenode:50070 datanode:50075 zookeeper:2181" ports: - 16010:16010 - 16000:16000 # 新添加 hbase-region: image: bde2020/hbase-regionserver:1.0.0-hbase1.2.6 container_name: hbase-regionserver hostname: hbase-regionserver env_file: - ~/hbase-distributed-local.env environment: HBASE_CONF_hbase_regionserver_hostname: hbase-region SERVICE_PRECONDITION: "namenode:50070 datanode:50075 zookeeper:2181 hbase-master:16010" ports: - 16030:16030 - 16020:16020 # 新添加





