(七):docker-compose安装和使用

简介

  • Compose 用来定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

  • 使用Compose 基本上分为三步:

  • 1.Dockerfile 定义应用的运行环境 (前面已经介绍过)。

  • 2.docker-compose.yml 定义组成应用的各服务

  • 3.docker-compose up 启动整个应用

  • 注意:docker-compose是非集群多个应用管理方式,即只部署在一台宿主机上。

  • 部署在集群上,请使用docker stack,使用类似。

compose安装

安装地址参考

https://docs.docker.com/compose/install/

https://docs.docker.com/compose/completion/#install-command-completion

1.下载compose

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

2.设置可执行权限

sudo chmod +x /usr/local/bin/docker-compose

3.安装bash命令tab补充

  • 安装脚本到/etc/bash_completion.d/
sudo curl -L https://raw.githubusercontent.com/docker/compose/1.22.0/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose

  • 某些系统无法自动补全,需要做些额外处理
## 在~/.bashrc 末尾添加
. /etc/bash_completion.d/docker-compose

source ~/.bashrc 

4.版本查看

$ docker-compose --version
docker-compose version 1.22.0, build 1719ceb

5.卸载

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

compose配置说明

version: '3'
services:
  redis:
    image: redis:alpine
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

配置选项

bulid

  • 服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,指定 Dockerfile 所在文件夹的路径。
    build: 可以是相对路径,或者结合context的相对路径。
build:
  context: ../
  dockerfile: path/of/Dockerfile

image

  • 指定镜像
## service_name:服务名称。
## image:镜像名称或镜像 ID。
services:
  service_name:
    image: ubuntu:14.04

args

  • 给容器传递参数

  • Dockerfile 中添加参数

ARG buildno
ARG gitcommithash

RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"
  • compose设置参数值
build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19

build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19
  • 不设置值,自动生成
args:
  - buildno
  - gitcommithash

command

  • 覆盖默认命令
command: bundle exec thin -p 3000
或者
command: ["bundle", "exec", "thin", "-p", "3000"]

depends_on

  • 配置容器依赖。更多参考https://docs.docker.com/compose/compose-file/#depends_on

  • 例如下面容器会先启动 redis 和 db 两个服务,最后才启动 web 服务:

version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
  • 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时,也会启动 redis 和 db 两个服务,因为在配置文件中定义了依赖关系。

pid

  • 将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用这个标签将能够访问和操纵其他容器和宿主机的名称空间。
pid: "host"

ports

  • 映射端口。
ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"
  • 注意:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

extra_hosts

  • 添加主机名的标签,就是往/etc/hosts文件中添加一些记录,与Docker client的–add-host类似:
extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"
 
## 启动之后查看容器内部hosts:
162.242.195.82  somehost
50.31.209.229   otherhost

volumes

  • 挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。
    Compose的数据卷指定路径可以是相对路径,使用 . 或者 … 来指定相对目录。

数据卷的格式可以是下面多种形式:

volumes:
  // 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
  - /var/lib/mysql
 
  // 使用绝对路径挂载数据卷
  - /opt/data:/var/lib/mysql
 
  // 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
  - ./cache:/tmp/cache
 
  // 使用用户的相对路径(~/ 表示的目录是 /home/<用户目录>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro
 
  // 已经存在的命名的数据卷。
  - datavolume:/var/lib/mysql
  • 如果你不使用宿主机的路径,你可以指定一个volume_driver。
volume_driver: mydriver

compose常用命令

命令提示

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  images             List images
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pull service images
  push               Push service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  top                Display the running processes
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

构建启动容器

docker-compose up -d nginx

登录容器

docker-compose exec nginx bash

停止并且删除所有容器、镜像、挂载、镜像

docker-compose down

显示所有容器

docker-compose ps

重新启动容器

docker-compose restart nginx

暂停容器

docker-compose pause nginx

恢复容器

docker-compose unpause nginx

删除容器(删除前必须关闭容器)

docker-compose rm nginx

停止容器

docker-compose stop nginx

启动容器

docker-compose start nginx

不启动依赖容器并且执行后删除容器

docker-compose run --no-deps --rm web python manage.py db upgrade

构建镜像

docker-compose build nginx

## 不带缓存的构建。
docker-compose build --no-cache nginx   

查看日志

docker-compose logs  nginx                    

## 查看实时日志
docker-compose logs -f nginx

验证(docker-compose.yml)文件配置

docker-compose config  -q

以json的形式输出docker日志

docker-compose events --json nginx

stack常用命令

[root@node146 harbor]# docker stack --help

Usage:  docker stack COMMAND

Manage Docker stacks

Options:


Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack

Run 'docker stack COMMAND --help' for more information on a command.
  • 样例:
## 创建服务
docker stack deploy -c /usr/local/portainer/portainer-agent-stack.yml portainer

## 删除服务
docker stack rm portainer
zsh: command not found: docker-compose 是在使用zsh终端时遇到的错误提示,表示无法找到docker-compose命令。docker-composeDocker官方提供的一个用于定义和运行多个容器的工具,它可以通过一个配置文件来管理多个容器的启动、停止和删除等操作。 要解决这个问题,你可以按照以下步骤进行操作: 1. 确认是否已经安装Dockerdocker-compose。你可以在终端中运行以下命令来检查它们是否已经安装: ``` docker --version docker-compose --version ``` 2. 如果没有安装Dockerdocker-compose,你需要先安装它们。你可以参考Docker官方文档来进行安装,具体步骤可以根据你的操作系统来选择。 3. 如果已经安装Dockerdocker-compose,但仍然出现该错误提示,可能是因为docker-compose命令没有被正确添加到系统的环境变量中。你可以尝试手动添加docker-compose的路径到环境变量中,具体步骤如下: - 打开终端,并编辑你的zsh配置文件(一般是~/.zshrc)。 - 在文件中添加以下内容,将路径替换为你的docker-compose所在路径: ``` export PATH=$PATH:/path/to/docker-compose ``` - 保存文件并退出。 - 在终端中运行以下命令,使配置文件生效: ``` source ~/.zshrc ``` 4. 重新打开一个新的终端窗口,然后尝试运行docker-compose命令,看是否问题已经解决。 希望以上步骤能够帮助你解决问题。如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值