赞
踩
参考:https://www.cnblogs.com/zhujingzhi/p/9786622.html
参考:https://www.cnblogs.com/minseo/p/11548177.html
Compose
项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/compose 上
我们知道使用Dockerfile模板文件可以让用户很方便的定义一个单独的应用容器,其实在工作中,经常会碰到需要多个容器相互配合来完成的某项任务情况,例如工作中的web服务容器本身,往往会在后端加上数据库容器,甚至会有负责均衡器,比如LNMP服务
Compose
就是来做这个事情的,它允许用户通过一个单独的docker-compose.yml
模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)
Compose
中有两个重要的概念:
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
项目(project):由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义
Compose 项目是由Python编写的,实际上就是调用了Docker服务提供的API来对容器进行管理,因此,只要所在的操作系统的平台支持Docker API,就可以在其上利用Compose来进行编排管理.
apt-get install python-pip
apt-get -y install docker-compose
或者
yum -y install python-pip
yum -y install docker-compose
查看安装版本
docker-compose -v
docker-compose version 1.21.0, build unknown
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
命令选项如下:
-f,–file file指定模板文件,默认是docker-compose.yml模板文件,可以多次指定
-p,–project-name name指定项目名称,默认使用所在目录名称作为项目名称
–x-networking 使用Docker的后端可插拔网络特性
–x-networking-driver driver指定网络的后端驱动,默认使用bridge
–verbose 输入更多的调试信息
-v,–version 输出版本信息
–log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
创建并启动容器
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文件中定义的容器
docker-compose down [options]
停止和删除容器、网络、卷、镜像。
选项包括:
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
–remove-orphans,删除服务中没有在compose中定义的容器
docker-compose down
停用移除所有容器以及网络相关
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 ps [options] [SERVICE...]
列出项目中所有在运行的容器
docker-compose restart [options] [SERVICE...]
重启项目中的服务。
选项包括:
-t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)
docker-compose restart
重启项目中的服务
docker-compose stop [options] [SERVICE...]
选项包括
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
docker-compose stop
停止正在运行的容器,可以通过docker-compose start
再次启动
docker-compose start [SERVICE...]
docker-compose start
启动已经存在的服务容器。
docker-compose rm [options] [SERVICE...]
删除所有(停止状态的)服务容器。
选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
docker-compose rm
删除所有(停止状态的)服务容器。推荐先执行docker-compose stop
命令来停止容器。
docker-compose pause [SERVICE...]
暂停一个服务容器
docker-compose unpause [SERVICE...]
恢复处于暂停状态中的服务。
docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose logs
查看服务容器的输出
-f 跟踪日志输出
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 create [options] [SERVICE...]
为服务创建容器。
选项包括:
–force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
–no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
–no-build:不创建镜像,即使缺失
–build:创建容器前,生成镜像
Run a one-off command (运行一次性命令)
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] [-l KEY=VALUE...]
SERVICE [COMMAND] [ARGS...]
参数:
-d 分离模式:在后台运行容器,打印新的容器名称。
--name NAME 为容器指定一个名称
--entrypoint CMD 覆盖镜像的执行指令
-e KEY=VAL 设置环境变量(可以多次使用)
-l, --label KEY=VAL 添加或覆盖标签(可以多次使用)
-u, --user="" 以指定的用户名或uid运行
--no-deps 不启动link链接服务。
--rm 运行后移除容器。在分离模式下被忽略。
-p, --publish=[] 向主机映射容器的端口
--service-ports 在启用并映射服务端口的情况下运行此命令
-v, --volume=[] 绑定挂载一个卷(默认[])
-T 禁用分配TTY,默认docker-compose run分配TTY。
-w, --workdir="" 容器内部的工作目录
docker-compose push [options] [SERVICE...]
推送服务依的镜像。
选项包括:
–ignore-push-failures 忽略推送镜像过程中的错误
docker-compose pull [options] [SERVICE...]
拉取服务依赖的镜像。
选项包括:
–ignore-pull-failures,忽略拉取镜像过程中的错误
–parallel,多个镜像同时拉取
–quiet,拉取镜像过程中不打印进度信息
docker-compose pull
拉取服务依赖的镜像
docker-compose scale web=3 db=2
设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose kill [options] [SERVICE...]
通过发送SIGKILL信号来强制停止服务容器。
支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT
docker-compose config [options]
验证并查看compose文件配置。
选项包括:
–resolve-image-digests 将镜像标签标记为摘要
-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
–services 打印服务名,一行一个
–volumes 打印数据卷名,一行一个
docker-compose port [options] SERVICE PRIVATE_PORT
显示某个容器端口所映射的公共端口。
选项包括:
–protocol=proto,指定端口协议,TCP(默认值)或者UDP
–index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
docker-compose top
查看各个服务容器内运行的进程
docker-compose -h
查看帮助
docker-compose -v
查看版本
Compose允许用户通过一个docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 Compose模板文件是一个定义服务、网络和卷的YAML文件。Compose模板文件默认路径是当前目录下的docker-compose.yml,可以使用.yml或.yaml作为文件扩展名。
Docker-Compose标准模板文件应该包含version
、services
、networks
三大部分,最关键的是services和networks两个部分。
官网链接:https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples
常用参数
#Compose和Docker兼容性: #Compose 文件格式有3个版本,分别为1, 2.x 和 3.x #目前主流的为 3.x 其支持 docker 1.13.0 及其以上的版本 version: "3" #指定 compose 文件的版本 services: tomcat: #服务名,唯一 container_name: tomcat #定义容器名称 相当于docker中run的 --name image: tomcat:8.0-jre8 #基础镜像 相当于docker中run的 run image ports: #用来完成宿主机与容器的端口映射关系 相当于docker中run的 run -p - "8080:8080" #外部端口:内部端口映射,建议用引号包裹 volumes: #完成宿主机与容器中目录数据卷映射 相当于run -v - /root/apps:/user/local/tomcat/ # 方法一:使用自定义路径映射 - tomcatwebapps:/usr/local/tomcat/webapps #方法二:使用声明好的数据卷路径 networks: #代表当前使用的网络桥段 相当于run --network - hello webapp: container_name: webapp #build: . #当docker-compose.yml和Dockerfile文件在同一项目文件下可以直接 . 表示当前文件 build: #服务除了可以基于指定的镜像,还可以基于一份Dockerfile,Compose将会利用Dockerfile自动构建镜像,然后使用镜像启动服务容器。 context: /project/webapp #context选项可以是Dockerfile的文件目录路径,也可以是到链接到git仓库的url dockerfile: path/of/Docker_file #若Dockerfile文件采用其他文件名,用此参数指定 ports: - "8000:8000" volumes: - webappdata:/usr/local/webapps networks: - hello depends_on: #定义容器启动顺序 (此选项解决了容器之间的依赖关系, 此选项在 v3 版本中 使用 swarm 部署时将忽略该选项) - mysql #服务名 - redis mysql: container_name: mysql image: mysql:5.7.32 ports: - "3306:3306" volumes: - mysqldata:/var/lib/mysql - mysqlconf:/etc/mysql environment: #定义环境变量 - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=mysql_db networks: - hello redis: container_name: redis image: redis:5.0.10 ports: - "6379:6379" volumes: - redisdata:/data command: "redis-server --appendonly yes" #run 镜像之后用来覆盖容器内默认命令 --appendonly yes redis数据持久化 portainer: container_name: portainer image: portainer/portainer ports: - "8000:8000" - "9000:9000" voluems: - /var/run/docker.sock:/var/run/docker.sock - portainer_data:/data volumes: #声明上面服务使用的自动创建的卷名 tomcatwebapps: #声明指令的卷名 compose自动创建该卷名但是会在之前加入项目名,如:hello_tomcatwebapps external: #使用自定义卷名 fasle #默认false, true确定使用指定卷名,则不会加上项目名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建,否则会报错 webappdata: mysqldata: mysqlconf: redisdata: portainer_data: networks: #定义服务所用到的桥 hello: #声明服务用到的网络桥名称 compose自动创建该名称但是会在之前加入项目名 external: #使用外部自定义网桥名 false #默认false, true确定使用指定名称,则不会加上项目名 注意:一旦使用外部自定义网桥名启动服务之前必须手动创建,否则会报错
除了上面提到的参数外还有以下一些参数:
用来代替environment
环境变量,用来将environment环境中配置放入指定配置文件中,仅支持.env
结尾的文件
env_file:
- mysql.env #支持相对路劲和绝对路劲
#mysql.env
MYSQL_ROOT_PASSWORD=root
通过命令检查容器是否健康运行
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s #间隔时间
timeout: 10s #超时时间
retries: 3 #重试次数
pid: "host"
将PID模式设置为主机PID模式,跟主机系统共享进程命名空间。容器使用pid标签将能够访问和操纵其他容器和宿主机的名称空间。
添加主机名的标签,会在/etc/hosts文件中添加一些记录。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
启动后查看容器内部hosts:
162.242.195.82 somehost
50.31.209.229 otherhost
挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER]
格式,或者使用[HOST:CONTAINER:ro]
格式,后者对于容器来说,数据卷是只读的,可以有效保护宿主机的文件系统。 Compose的数据卷指定路径可以是相对路径,使用 . 或者 … 来指定相对目录。 数据卷的格式可以是下面多种形式
volumes:
- /var/lib/mysql #只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
- /opt/data:/var/lib/mysql #使用绝对路径挂载数据卷
- ./cache:/tmp/cache #以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
- ~/configs:/etc/configs/:ro #以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
- datavolume:/var/lib/mysql #以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
如果不使用宿主机的路径,可以指定一个volume_driver。
从另一个服务或容器挂载其数据卷:
volumes_from:
- service_name
- container_name
自定义DNS服务器。可以是一个值,也可以是一个列表。
dns:8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
暴露端口,但不映射到宿主机,只允许能被连接的服务访问。仅可以指定内部端口为参数,如下所示:
expose:
- "3000"
- "8000"
链接到其它服务中的容器。使用服务名称(同时作为别名),或者服务名称:服务别名(如 SERVICE:ALIAS
),例如
links:
- db
- db:database
- redis
设置网络模式。
net: "bridge"
net: "none"
net: "host"
配置容器系统内核参数,并不是必须,有些服务受容器内操作系统限制可能无法启动必须通过修改容器中参数才能启动
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
# 或
sysctls:
- net.core.somaxconn: 1024
- net.ipv4.tcp_syncookies: 0
用来修改容器的ulimits限制值,,日后使用时可根据当前容器运行服务要求进行修改
ulimits:
nproc: 65535 #指定最大进程数为65535
nofile:
soft: 20000 #指定文件句柄数为20000(软限制,应用可以随时更改,不能超过硬限制)
hard: 40000 #硬限制40000(系统限制,只能root用户提高)
官方安装说明:https://www.portainer.io/installation/
[root@VM-20-14-centos ~]# docker pull portainer/portainer
Using default tag: latest
Trying to pull repository docker.io/portainer/portainer ...
latest: Pulling from docker.io/portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
a2300fd28637: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for docker.io/portainer/portainer:latest
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
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 #镜像
第一次进入会进入添加用户页面,设置用户名,密码就可以登录进来了,界面就是这样子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。