# Docker-Compose笔记

  1. Docker-compose官网 (opens new window)
  2. Docker-compose命令 (opens new window)
  3. Docker Compose详解 (opens new window)
  4. Docker-compose版本说明 (opens new window)

在线安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

启动Compose

# 后台方式启动(默认配置文件名为docker-compose.yml)
docker-compose up -d

# 指定文件名后台方式启动
docker-compose -f docker-compose-app.yml up -d

注意:不要轻易修改docker-compose镜像,不同镜像可能会有不同运行结果。

卸载

sudo rm /usr/local/bin/docker-compose
sudo pip uninstall docker-compose

参考命令

docker-compose up	# 构建、启动容器
docker-compose ps	# 列出项目中目前的所有容器
docker-compose start # 启动容器
docker-compose stop	# 停止正在运行的容器
docker-compose -h	# 查看帮助
docker-compose down	# 停止和删除容器、网络、卷、镜像。
docker-compose logs	# 查看服务容器的输出
docker-compose build # 构建(重新构建)项目中的服务容器
docker-compose pull	# 拉取服务依赖的镜像
docker-compose restart	# 重启项目中的服务
docker-compose rm	# 删除所有(停止状态的)服务容器。
docker-compose run	# 在指定服务上执行一个命令。
docker-compose scale	# 设置指定服务运行的容器个数
docker-compose pause	# 暂停一个服务容器
docker-compose kill	# 通过发送SIGKILL信号来强制停止服务容器。
dokcer-compose config	# 验证并查看compose文件配置
docker-compose create	# 为服务创建容器。
docker-compose exec	#
docker-compose port	# 显示某个容器端口所映射的公共端口。
docker-compose push	# 推送服务依的镜像。
docker-compose stop	# 显示各个容器运行的进程情况。
docker-compose unpause	# 恢复处于暂停状态中的服务。
docker-compose version	# 打印版本信息。

links 作用:
第二种:在 yml 文件中的使用方法:

links:
 - db
 - db:database     //连接到 db 服务,并命名为 database
 - redis
1
2
3
4

使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:

172.12.2.186  db
172.12.2.186  database
172.12.2.187  redis
1
2
3

参考示例

第一个Compose

version: '2'    # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:       # 服务列表
  ciot-web:     # 此处自定义服务名称,如ciot-web本身就是一个
    build: .    # Dockerfile所在目录
    container_name: "ciot-web"  # 容器名称
    ports:              
      - "8080:8080" # 主机映射端口
	  - "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号 

========================================================================
version: '2'
services: 
  mysql:
    image: mymysql:5.7
    expose:
        - 3306
    #ports: 
    #  - "3306:3306"    
    container_name: "rzxMySql"
    environment:
       - MYSQL_ROOT_PASSWORD=123456
    volumes:
       - /opt/docker/mysql/conf:/etc/mysql/conf.d
       - /opt/docker/mysql/logs:/var/log/mysql
       - /opt/docker/mysql/data:/var/lib/mysql
        
        
  ciot-web:     
    build: .
    container_name: "ciot-web"
    depends_on:
      - mysql
    ports: 
      - "8080:8080"
    links:
      - mysql:rzxMySql 
========================================================================
docker-compose up -d启动起来的容器可能会立即停止,解决办法:加上tty为true
version: '3'
services:
  fashop1:
    image: fashop/fashop:v2.0.0
    ports:
      - 9510:9510
    volumes:
      - ./:/var/www/fashop
    stdin_open: true
    tty: true
    privileged: true        # 获取特权.使用该参数,container内的root拥有真正的root权限。
    entrypoint: ["php", "/var/www/fashop/fashop", "start"]

  swoole:
    image: ezkuangren/swoole4
    ports:
      - "9511:9510"
    volumes:
      - ./:/var/www/project
    stdin_open: true        # 打开交互模式
    tty: true               # 分配一个假的终端
    privileged: true
========================================================================ES配置
version: '2'
services:
  es:
    image: elasticsearch:6.7.0
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - xpack.security.enabled=false
    volumes:
      - /opt/elk/es/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /opt/elk/es/data:/usr/share/elasticsearch/data
      - /opt/elk/es/plugins:/usr/share/elasticsearch/plugins
    network_mode: "bridge"
========================================================================Ngnix配置
version: '2'
services: 
  mynginx:
    image: nginx/latest   
    ports: 
      - "80:80"    
    container_name: "mynginx"
    volumes:
       - /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
       - /data/nginx/logs:/var/log/nginx
       - /data/nginx/html:/usr/share/nginx/html
========================================================================Kafka配置
#
# 测试可行,zk与kafka均绑定在host网卡上,可以实现与外界通信
# 172.30.154.245 为host地址,不能修改为localhost,否则其他网络无法访问
#
version: '2'
services: 
  myzk:
    image: jplock/zookeeper   
    ports: 
      - "2181:2181"
    network_mode: "host" 
    
  mykafka:     
    image: wurstmeister/kafka:latest
    ports: 
      - "9092:9092"
    environment:       
       - KAFKA_ADVERTISED_HOST_NAME=172.30.154.245
       - KAFKA_ADVERTISED_PORT=9092
       - KAFKA_ZOOKEEPER_CONNECT=172.30.154.245:2181
       - KAFKA_DELETE_TOPIC_ENABLE=true
       - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.30.154.245:9092
       #- KAFKA_LISTENERS=PLAINTEXT://172.30.154.245:9092  该行没效果
    network_mode: "host"
    volumes:
       - /etc/localtime:/etc/localtime

## 这种配置是使用bridge驱动,创建一个名为net1网络
networks:
  net1:
	driver: bridge

## 这种配置是使用一个内部名为br17219的网络,该网络已经提前创建好了。 
networks:
  br17219:
    external:
      name: br17219
	  
# 这种配置是使用overlay驱动,创建一个名为kafka_net网络,并指定网络段为172.22.0.0/16
networks:
    kafka_net:
      external: true
      name: kafka_net
      driver: overlay
      ipam:
        config:
          - subnet: 172.22.0.0/16

ES官网docker-compose.yml示例

version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.2.1
    container_name: es01
    environment:
      - node.name=es01
      - discovery.seed_hosts=es02
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - esnet
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.2.1
    container_name: es02
    environment:
      - node.name=es02
      - discovery.seed_hosts=es01
      - cluster.initial_master_nodes=es01,es02
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata02:/usr/share/elasticsearch/data
    networks:
      - esnet

volumes:
  esdata01:
    driver: local
  esdata02:
    driver: local

networks:
  esnet:

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
上次更新: 2020-04-17 17:21:56