docker composer

Docker-compose简介

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
Docker-Compose将所管理的容器分为三层,分别是项目(project),服务(service)以及容器(container)。

Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个项目,若无特殊指定项目名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡

Docker-Compose的项目配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

如果你还不了解 YML 文件配置,可以先阅读 YAML 入门教程

docker compose安装与卸载

安装(Linux版)

安装包

#将安装包下载到/usr/local/bin/目录下
wget -O https://github.com/docker/compose/releases/download/1.25.5/docker-compose-Linux-x86_64

#为应用文件加上可执行权限
chmod +x /usr/local/bin/docker-compose

#测试安装成功
$ docker-compose --version
 docker-compose version 1.25.5, build 4667896b

卸载

#如果是用二进制文件安装的,直接删除/usr/local/bin/
rm /usr/local/bin/docker-compose

#如果是pip安的则运行
pip uninstall docker-compose

docker compose配置文件指令

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

模板⽂件是使⽤ Compose 的核⼼,默认的模板⽂件名称为 docker-compose.yml ,格式为 YAML 格式。

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来⾃动构建⽣成镜像。如果使⽤ build 指令,在 Dockerfile 中设置的选项(例如: CMD , EXPOSE , VOLUME , ENV 等) 将会⾃动被获取,⽆需在 docker-compose.yml 中重复设置

示例1:

version: "3.0"
services:
  mysqldb:
    image: mysql:5.7.19
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - /root/mysql/conf:/etc/mysql/conf.d
      - /root/mysql/logs:/logs
      - /root/mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    networks:
      - ems
    depends_on:
      - redis
 redis:
   image: redis:4.0.14
   container_name: redis
   ports:
     - "6379:6379"
 networks:
   - ems
 volumes:
   - /root/redis/data:/data
 command: redis-server

build(构建)

指定 Dockerfile 所在⽂件夹的路径(可以是绝对路径,或者相对 docker-compose.yml ⽂件的路径)。Compose 将会利⽤它⾃动构建这个镜像,然后运行这个镜像。
参数:
context :指定 Dockerfile 所在⽂件夹的路径。
dockerfile :指定 Dockerfile ⽂件名。
arg :指定构建镜像时的变量。
示例2:

version: '3'
services:
 webapp:
 build:
 context: ./dir
 dockerfile: Dockerfile-alternate
 args:
 buildno: 1

command(命令)

运行容器时执行的命令
如:

command: echo "hello world"

container_name

指定容器名称。默认将会使⽤ 项⽬名称_服务名称_序号 这样的格式。

container_name: docker-web-container

注意: 指定容器名称后,该服务将⽆法进⾏扩展(scale),因为 Docker 不允许多个容器具有相同的名称

depends_on

用于指定容器的启动顺序,可用于解决容器的依赖
如:示例一

env_file

从⽂件中获取环境变量,可以为单独的⽂件路径或列表。
如果通过 docker-compose -f FILE ⽅式来指定 Compose 模板⽂件,则 env_file 中变量的路径会基于模板⽂件路径。
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
示例3:

env_file: .env
env_file:
 - ./common.env
 - ./apps/web.env
 - /opt/secrets.env

环境变量⽂件中每⼀⾏必须符合格式,⽀持 # 开头的注释⾏。

 # common.env: Set development environment
PROG_ENV=development

environment

设置环境变量。你可以使⽤数组或字典两种格式。
只给定名称的变量会⾃动获取运⾏ Compose 主机上对应变量的值,可以⽤来防⽌泄露不必要的数据。
示例4:

environment:
 RACK_ENV: development
 SESSION_SECRET:
environment:
 - RACK_ENV=development
 - SESSION_SECRET

如果变量名称或者值中⽤到 true|false,yes|no 等表达 布尔 含义的词汇,最好放到引号⾥,避免 YAML ⾃动解析某些内容为对应的布尔语义。这些特定词汇,包括

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

healthcheck(健康检查)

通过命令检查容器是否健康运⾏。
示例5

healthcheck:
 test: ["CMD", "curl", "-f", "http://localhost"]
 interval: 1m30s
 timeout: 10s
 retries: 3

image

指定为镜像名称或镜像 ID。如果镜像在本地不存在, Compose 将会尝试拉取这个镜像。
示例6:

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

networks

配置容器连接的⽹络。
示例7:

version: "3"
services:
 some-service:
 networks:
 - some-network
 - other-network
networks:
 some-network:
 other-network:

ports

暴露端⼝信息。
使⽤宿主端⼝:容器端⼝ (HOST:CONTAINER) 格式,或者仅仅指定容器的端⼝(宿主将会随机选择端⼝)都可以
示例8:

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

注意:当使⽤ HOST:CONTAINER 格式来映射端⼝时,如果你使⽤的容器端⼝⼩于 60 并且没放到引号⾥,可能会得到错误结果,因为 YAML 会⾃动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采⽤引号包括起来的字符串格式。

sysctls

配置容器内核参数。
示例9:

sysctls:
 net.core.somaxconn: 1024
 net.ipv4.tcp_syncookies: 0
sysctls:
 - net.core.somaxconn=1024
 - net.ipv4.tcp_syncookies=0

ulimits

设置容器的文件句柄数
例如,指定最⼤进程数为 65535,指定⽂件句柄数为 20000(软限制,应⽤可以随时修改,不能超过硬限制) 和40000(系统硬限制,只能 root ⽤户提⾼)。
示例10:

 ulimits:
 nproc: 65535
 nofile:
 soft: 20000
 hard: 40000

volumes(目录映射)

数据卷所挂载路径设置。可以设置为宿主机路径( HOST:CONTAINER )或者数据卷名称( VOLUME:CONTAINER ),并且可以设置访问模式 ( HOST:CONTAINER:ro )。该指令中路径⽀持相对路径

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

如果路径为数据卷名称,必须在⽂件中配置数据卷。

 version: "3"
services:
 my_src:
 image: mysql:8.0
 volumes:
 - mysql_data:/var/lib/mysql
volumes:
 mysql_data:

docker-compose 常⽤命令

1.命令对象与格式

对于 Compose 来说,⼤部分命令的对象既可以是项⽬本身,也可以指定为项⽬中的服务或者容器。如果没有特别的说明,命令对象将是项⽬,这意味着项⽬中所有的服务都会受到命令影响。执⾏ docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个命令的使⽤格式。

docker-compose 命令的基本的使⽤格式是
docker-compose [options] [COMMAND] [ARGS…]

2. 命令选项

-f, --file FILE 指定使⽤的 Compose 模板⽂件,默认为 docker-compose.yml ,可以多次指定。
-p, --project-name NAME 指定项⽬名称,默认将使⽤所在⽬录名称作为项⽬名。
–x-networking 使⽤ Docker 的可拔插⽹络后端特性
–x-network-driver DRIVER 指定⽹络后端的驱动,默认为 bridge
–verbose 输出更多调试信息。
-v, --version 打印版本并退出。

3.命令使⽤说明

up(启动)

格式为
docker-compose up [options] [SERVICE…]
它将尝试⾃动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的⼀系列操作。⼤部分时候都可以直接通过该命令来启动⼀个项⽬。
默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很⽅便进⾏调试。当通过 Ctrl-C 停⽌命令时,所有容器将会停⽌。
如果使⽤ docker-compose up -d ,将会在后台启动并运⾏所有的容器。⼀般推荐⽣产环境下使⽤该选项。
默认情况,如果服务容器已经存在, docker-compose up 将会尝试停⽌容器,然后重新创建(保持使⽤volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml ⽂件的最新内容

down(停止并删除)

此命令将会停⽌ up 命令所启动的容器,并移除容器,并移除⽹络

exec(进入容器)

进⼊指定的容器。

ps(查看容器)

格式为 docker-compose ps [options] [SERVICE…] 。
列出当前docker-compose.yaml中管理的所有容器。
选项:
-q 只打印容器的 ID 信息。

restart(重庆容器)

格式为 docker-compose restart [options] [SERVICE…] 。
重启项⽬中的服务。
选项:
-t, --timeout TIMEOUT 指定重启前停⽌容器的超时(默认为 10 秒)。

rm(删除容器)

格式为 docker-compose rm [options] [SERVICE…] 。
删除所有(停⽌状态的)服务容器。推荐先执⾏ docker-compose stop 命令来停⽌容器。
选项:
-f, --force 强制直接删除,包括⾮停⽌状态的容器。⼀般尽量不要使⽤该选项。
-v 删除容器所挂载的数据卷。

start(启动容器)

格式为 docker-compose start [SERVICE…] 。
启动已经存在的服务容器。

stop(停止容器)

格式为 docker-compose stop [options] [SERVICE…] 。
停⽌已经处于运⾏状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
选项:
-t, --timeout TIMEOUT 停⽌容器时候的超时(默认为 10 秒)。

top(查看状态)

查看各个服务容器内运⾏的进程。

unpause

格式为 docker-compose unpause [SERVICE…] 。
恢复处于暂停状态中的服务。

pause(暂停容器)

安装docker可视化⼯具

安装Portainer

官⽅安装说明

登录和使⽤Portainer
⽤浏览器访问: http://localhost:9000
[root@ubuntu1804 ~]#docker pull portainer/portainer
[root@ubuntu1804 ~]#docker volume create portainer_data
portainer_data
[root@ubuntu1804 ~]#docker run -d -p 8000:8000 -p 9000:9000 --name=portainer –
restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data
portainer/portainer
20db26b67b791648c2ef6aee444a5226a9c897ebcf0160050e722dbf4a4906e3
[root@ubuntu1804 ~]#docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
20db26b67b79 portainer/portainer “/portainer” 5 seconds ago Up
4 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp portainer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值