赞
踩
目录
docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。
Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。
- yum update
- yum install docker-compose-plugin
-
- # 安装完成后查看版本号
- docker compose version
- # 查看配置命令
- $ docker compose config
-
- # 构建并后台启动
- $ docker compose up -d
-
- # 将会停止UP命令启动的容器,并删除容器
- $ docker compose down
-
- #重新启动nginx容器
- $ docker compose restart
-
- # 启动已存在的容器命令
- $ docker compose start
-
- # 停止正在运行的容器命令
- $ docker compose stop
-
- #暂停容器
- $ docker compose pause
-
- # 恢复容器
- $ docker compose unpause
-
- # 构建镜像
- $ docker compose bulid
-
- # 下载镜像
- $ docker compose pull
-
- # 删除容器
- $ docker compose rm
-
- # 查看运行的镜像
- $ docker compose ps
-
- # 查看进程
- $ docker compose top
-
- # 查看服务日志输出
- $ docker compose logs
Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。 Docker-Compose标准模板文件应该包含version、services、networks 三大部分,最关键的是services和networks两个部分。
image
image是指定服务的镜像名称或镜像ID
- services:
- web:
- image: hello-world
build
利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。
- build:
- context: ../
- dockerfile: path/of/Dockerfile
command
使用command可以覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
container_name
指定自定义容器名称
container_name: app
depends_on
表示服务之间的依赖关系。
- version: "3"
- services:
- web:
- build: .
- depends_on:
- - redis
- redis:
- image: redis
-
- #docker compose up:按依赖顺序启动服务,redis在web之前启动。
- #docker-compose stop:按依赖顺序停止服务,web在redis之前停止。
pid
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。
pid: "host"
ports
映射端口
- ports:
- - "8000"
- - "49022:22"
- - "127.0.0.1:8001:8001"
extra_hosts
添加主机名映射。使用与docker客户端–add-host类似
- extra_hosts:
- - "somehost:162.242.195.82"
- - "otherhost:50.31.209.229"
volumes
目录映射,可以直接使用 [主机:容器]格式,或者使用[主机:容器:ro]格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。
- volumes:
- # 只指定一个路径,Docker会自动在创建一个目录。
- - /var/lib/mysql
- # 主机使用绝对路径和容器目录映射
- - /opt/data:/var/lib/mysql
- # 以Compose配置文件的目录为中心的相对路径和容器目录映射
- - ./cache:/tmp/cache
- # 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
- - ~/configs:/etc/configs/:ro
dns
自定义DNS服务器。
- dns:8.8.8.8
- dns:
- - 8.8.8.8
- - 9.9.9.9
dns_search
配置DNS搜索域。
- dns_search:example.com
- dns_search:
- - domain1.example.com
- - domain2.example.com
entrypoint
设置入口命令
- entrypoint: /code/entrypoint.sh
- entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]
- entrypoint: java -jar penngo_test.jar
env_file
从文件添加环境变量
- env_file: .env
- env_file:
- - ./common.env
- - ./apps/web.env
- - /opt/runtime_opts.env
environment
添加环境变量。
- environment:
- RACK_ENV: development
- SHOW: 'true'
- SESSION_SECRET:
-
- environment:
- - RACK_ENV=development
- - SHOW=true
- - SESSION_SECRET
external_links
链接到docker-compose.yml外部的容器
- external_links:
- - redis_1
- - project_db_1:mysql
- - project_db_1:postgresql
cap_add
增加指定容器的内核能力(capacity)。
- cap_add:
- - ALL
cap_drop
去掉指定容器的内核能力(capacity)。
- cap_drop:
- - NET_ADMIN
cgroup_parent
创建了一个cgroup组名称为cgroups_1:
cgroup_parent: cgroups_1
devices
指定设备映射关系
- devices:
- - "/dev/ttyUSB1:/dev/ttyUSB0"
expose
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。
- expose:
- - "3000"
- - "8000"
labels
为容器添加Docker元数据(metadata)信息。
- labels:
- - "com.example.description=Accounting webapp"
- - "com.example.department=Finance"
- - "com.example.label-with-empty-value"
links
链接到其它服务中的容器
- links:
- - db
- - db:database
- - redis
log_driver
指定日志驱动类型。目前支持三种日志驱动类型:
- log_driver: "json-file"
- log_driver: "syslog"
- log_driver: "none"
log_opt
日志驱动的相关参数。
net
设置网络模式。
- net: "bridge"
- net: "none"
- net: "host"
- version: "3"
- services:
- mysql:
- image: mysql:latest
- container_name: mysql_slaver11
- restart: always
- privileged: true
- ports:
- - 3307:3306
- environment:
- MYSQL_ROOT_PASSWORD: 123456
- TZ: Asia/Shanghai
- volumes:
- - /wuming/mysql/slaver11/data:/var/lib/mysql
- - /wuming/mysql/slaver11/log:/var/log/mysql
- - /wuming/mysql/slaver11/conf/my.cnf:/etc/mysql/my.cnf
- mycat:
- image: manondidi/mycat:latest
- container_name: mycat
- restart: always
- ports:
- - 8066:8066
- volumes:
- - /wuming/mycat/conf:/usr/local/mycat/conf
- - /wuming/mycat/logs:/usr/local/mycat/logs
- redis:
- image: redis:latest
- container_name: redis_master
-
- netstat -npl | grep 3306
- netstat -npl | grep 3307
- netstat -npl | grep 8066
进入docker-compose对应的文件目录下,执行以下命令
- # 对应目录下运行docker-compose文件
- docker compose up -d
- # 安装telnet
- yum -y install telnet
- # 查看对方端口是否开
- telnet 192.168.10.143 3307
- docker ps
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。