docker-compose使用
docker-compose使用
什么是docker-compose
我的理解:docker-commpse主要是帮我们跟方便的进行容器管理,当我们服务达到了一定的数量之后,如果都是进行手动管理花费的时间就比较多了。【官方文档】
docker-compose安装【官方安装】
# 这个是国内镜像,具体为什么用国内的你应该懂
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 上面命令会将docker-compse放入/usr/local/bin文件夹中
# 然后我们给docker-compose进行权限提升。
chmod +x /usr/local/bin/docker-compose
# 然后我们可以验证一下是否安装成功
docker-compose -v
什么是yml文件【yml教程】
上面我们已经安装好了docker-compose之后,我们还需要学习一下docker-compose.yml文件编写(这个的名字不一定是docker-compose,默认的是它后期我们可以自己定义只要执行的时候指定名称就可以了)
我们可以先看一下docker-compose.yml文件长什么样
version : "3.9"
services:
reids:
# 镜像名称
image: "redis:latest"
# 容器名称
container_name: redis
# 地址名称
hostname: redis
# # redis启动的配置文件
# command:
# redis-server /home/docker/redis/confg/redis.conf --appendonly yes
# 端口号
ports:
- 6379:6379
# 挂载数据卷
volumes:
- /home/docker/redis/confg/redis.conf:/etc/redis/redis.conf
- /home/docker/redis/data:/data:rw
# 容器意外关闭进行重启操作
restart: always
- version : 指定docekr-compose.yml文件版本,因为不同的版本会有不同差别。
- services:就是我们部署的服务了。
- reids 这就是你的服务名称。
- image 镜像名称。
- container_name 容器名称。
- hostname 这个就比较有意思了,可以用于后面的集群部署。
- ports 端口映射。
- volumes 容器挂载数据卷
yml文件编写
image: 指定容器启动的镜像 build: 服务除了可以基于指定的镜像
command: 使用 command 可以覆盖容器启动后默认执行的命令
**container_name**: 指定运行时容器名称,而不使用默认格式(<项目名称><服务名称><序号>)
**restart**:重启策略
**depends_on**: 指明服务之间依赖,解决了容器的依赖、启动先后的问题
dns: 指定 DNS 服务器。
tmpfs: 挂载临时目录到容器内部,与 run 的参数一样 entrypoint: 在 Dockerfile 中有一个指令叫做 ENTRYPOINT 指令
env_file: 专门存放变量的文件。如果通过 docker-compose -f FILE 指定了配置文件,则 env_file 中路径会使用配置文件路径。如果有变量名称与 environment 指令冲突,则以后者为准 environment: 与上面的 env_file 设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置 expose: 这个标签与 Dockerfile 中的 EXPOSE 指令一样,用于指定暴露的端口
external_links:让 Compose 项目里面的容器连接到那些项目配置外部的容器
extra_hosts: 添加主机名的标签,就是往 /etc/hosts 文件中添加一些记录
labels: 向容器添加元数据,和 Dockerfile 的 LABEL 指令一个意思
**links**: 上面的 depends_on 标签解决的是启动顺序问题,这个标签解决的是容器连接问题,与 Docker client 的 –link 一样效果,会连接到其它服务中的容器。
logging: 用于配置日志服务。默认的 driver 是 json-file
pid: 将 PID 模式设置为主机 PID 模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
ports: 映射端口的标签。使用 HOST:CONTAINER 格式或者只是指定容器的端口,宿主机会随机映射端口。
security_opt: 为每个容器覆盖默认的标签。简单说来就是管理全部服务的标签。
stop_signal: 设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。设置另一个信号可以使用 stop_signal 标签。
volumes: 挂载一个目录或者一个已存在的数据卷容器
cap_add, cap_drop: 添加或删除容器的内核功能
devices: 设备映射列表
extends: 这个标签可以扩展另一个服务,扩展内容可以是来自在当前文件,也可以是来自其他文件,相同服务的情况下,后来者会有选择地覆盖原有配置。
Docker-Compose命令格式
docker-compose [-f ...] [options] [COMMAND] [ARGS...]
-f,–file FILE指定Compose模板文件,默认为docker-compose.yml,可以多次指定。
-p,–project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
-x-network-driver 使用Docker的可拔插网络后端特性(需要Docker 1.9+版本)
-x-network-driver DRIVER指定网络后端的驱动,默认为bridge(需要Docker 1.9+版本)
-verbose输出更多调试信息
-v,–version打印版本并退出
docker-compose up命令格式
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
-d 在后台运行服务容器
–no-color 不使用颜色来区分不同的服务的控制输出
–no-deps 不启动服务所链接的容器
–force-recreate 强制重新创建容器,不能与–no-recreate同时使用
–no-recreate 如果容器已经存在,则不重新创建,不能与–force-recreate同时使用
–no-build 不自动构建缺失的服务镜像
–build 在启动容器前构建服务镜像
–abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
–remove-orphans 删除服务中没有在compose文件中定义的容器
–scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在compose中通过scale指定的参数
docker-compose down命令格式
docker-compose down [options]
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
–remove-orphans,删除服务中没有在compose中定义的容器
docker-compose logs命令格式
docker-compose logs [options] [SERVICE...]查看服务容器的输出。
默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose build命令格式
docker-compose build [options] [--build-arg key=val...] [SERVICE...]
–compress 通过gzip压缩构建上下环境
–force-rm 删除构建过程中的临时容器
–no-cache 构建镜像过程中不使用缓存
–pull 始终尝试通过拉取操作来获取更新版本的镜像
-m, –memory MEM为构建的容器设置内存大小
–build-arg key=val为服务设置build-time变量
服务容器一旦构建后,将会带上一个标记名。可以随时在项目目录下运行docker-compose build来重新构建服务
docker-compose pull命令格式
拉取服务依赖的镜像
docker-compose pull [options] [SERVICE...]
–ignore-pull-failures,忽略拉取镜像过程中的错误
–parallel,多个镜像同时拉取
–quiet,拉取镜像过程中不打印进度信息
docker-compose pull
docker-compose rm命令格式
docker-compose rm
docker-compose rm [options] [SERVICE...]
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
docker-compose exec命令格式
docker-compose exec [options] SERVICE COMMAND [ARGS...]
-d 分离模式,后台运行命令。
–privileged 获取特权。
–user USER 指定运行的用户。
-T 禁用分配TTY,默认docker-compose exec分配TTY。
–index=index,当一个服务拥有多个容器时,可通过该参数登陆到该服务下的任何服务,例如:docker-compose exec –index=1 web /bin/bash ,web服务中包含多个容器
基本命令
#启动
docker-compose up 如果启动时指定-d标志,则以守护进程模式运行服务
#如果要批量启动服务(如启动 8 个 Scrapy),则在--scale选项指定服务的个数: spider=8
docker-compose up -d
#列出本地 docker-compose.yml 文件里定义的正在运行的所有服务
docker-compose up -d --scale
#查看服务的日志,这个命令会追踪服务的日志文件,类似tail -f命令,使用Ctrl+C退出 docker-compose logs
docker-compose ps logs:
#stop: 停止所有服务,如果服务没有停止,可以使用docker-compose kill强制杀死服务
docker-compose stop
#rm: 删除所有服务
docker-compose rm
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中虽不甘心,却又畏首畏尾。
第一次,当它本可进取时,却故作谦卑;
第二次,当它空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中虽不甘心,却又畏首畏尾。