(七):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

猜你喜欢

转载自blog.csdn.net/qq_30062125/article/details/82772152