# Docker-Compose笔记
- Docker-compose官网 (opens new window)
- Docker-compose命令 (opens new window)
- Docker Compose详解 (opens new window)
- 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
2
3
4
使用的别名将会自动在服务容器中的/etc/hosts里创建。例如:
172.12.2.186 db
172.12.2.186 database
172.12.2.187 redis
1
2
3
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
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