Docker使用Dockerfile来实现对现有镜像的修改来创建新的镜像, 那docker-compose则完成镜像的自动部署, 可以实现多个容器同时部署
Dockerfile可以让用户管理一个单独的应用容器;而Compose则运行用户在一个模板中定义一组相关联的容器(被成为一个project项目),
例如一个web服务器加上后端的数据库容器等
安装最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
YAML模板文件(关键字)
image
指定镜像名称或镜像ID,如果镜像不存在,尝试拉取镜像
build
指定Dockerfile所在文件夹路径,自动创建镜像并使用这个镜像
command
覆盖容器启动后默认执行的命令
links
连接到其他容器
external_links
连接到docker-compose.yml外部的容器,甚至非Compose管理的容器
ports
暴露端口信息并对外进行映射
expose
暴露端口,但不对外映射,只被连接links的服务访问
volumes
卷挂载设置
volumes_from
从另一个服务或容器挂载它的所有卷
environment
设置环境变量
env_file
从文件中读取环境变量
extends
基于已有的服务进行扩展(继承其他模板的配置)
net
设置网络模式
pid
跟主机系统共享进程命名空间
dns
配置dns服务器
cap_add, cap_drop
添加或放弃容器的Linux能力
dns_search
配置DNS搜索域
其他类似指令
其他的指令和docker run支持的选项类似
working_dir
entrypoint
user
hostname
domainname
mem_limit
privileged
restart
stdin_open
tty
cpu_shares
等
参考案例
docker-compose.yml模块
# docker-compose.yml 文件内容 version: '3' services: redis: image: ssh_img_b02:latest container_name: redis_test_001 hostname: redis_test_001 restart: always volumes: - /root/redis/redisWork/:/redisWork ports: - "80:80" - "220:22" - "6379:6379" expose: - "80" - "6379" - "22" #command: '/usr/bin/supervisord' command: '/redisWork/usr/local/bin/redis-server /redisWork/etc/redis/6379.conf ' # 执行命令 # 如果不用-f参数指定文件,默认查找当前目录的docker-compose.yml文件 # up参数为创建并启动容器, -d表示后台运行, 如果已经存在容器,对比是否更新,如果更新了文件,自动更新文件并重启容器 # 其他参数操控官方 docker-compose -f docker-compose.yml up -d