Docker编排工具Docker Compose的使用
一、安装docker compose
官网推荐方式之一:
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose $ docker-compose --version
docker-compose version 1.27.4, build 40524192
二、卸载Docker Compose
sudo rm /usr/local/bin/docker-compose
三、Docker Compose 命令说明
docker-compose -h
Define and run multi-container applications with Docker. Usage:
docker-compose [-f <arg>...] [options] [--] [COMMAND] [ARGS...]
docker-compose -h|--help Options:
-f, --file FILE Specify an alternate compose file
(default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name
(default: directory name)
-c, --context NAME Specify a context name
--verbose Show more output
--log-level LEVEL Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
--no-ansi Do not print ANSI control characters
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to --tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the
name specified in the client certificate
--project-directory PATH Specify an alternate working directory
(default: the path of the Compose file)
--compatibility If set, Compose will attempt to convert keys
in v3 files to their non-Swarm equivalent (DEPRECATED)
--env-file PATH Specify an alternate environment file Commands:
build Build or rebuild services
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 version information and quit
其中常用的启、停、查、改、删操作的命令有:
docker-compose up ###创建并启动docker compose文件中的容器
docker-compose up -d ###创建并启动且后台运行docker compose文件中的容器
docker-compose down ###关闭并删除docker compose文件中的容器
docker-compose ps ###查看docker compose创建的容器明细
四、Docker Compose文件编写介绍:
compose其核心在于对模板文件的使用,涉及到指令关键字。docker-compose模板文件格式为yaml或者yml。
docker-compose.yml文件分为三个主要部分:services、networks、volumes。
services ###定义启动的各个容器
networks ###定义用到的网络
volumes ###定义services使用到的volume卷
注意:
运行docker-compose的时候,需要指定(或默认指定)dockerfile,也就是docker-compose.yml文件
示例:
version: "3" #版本信息,单引号和双引号都行
services: #定义容器的开始
webapp:
#定义服务的名称(自定义项)
image: nginx #需要容器使用的镜像,如果不存在,会去拉取
ports: #容器和
- "8001:80" #第一个8001对应宿主机端口,第二个80对应容器端口
volumes: #使用卷
- "/usr/share/nginx/html" #卷的路径,对应的容器内路径
其中:
version:Compose version到目前为止有三个版本分别为Version 1,Version 2,Version 3
Version2.x及Version 3.x基本兼容,是未来的趋势,Version 1将来会被弃用。
services:关键字,定义服务(容器服务)
webapp表示服务的名称,可自定义。
另外compose和dockerfile类似,涉及常用的多个参数指令:
1、image
eg:
image: nignx
指定为镜像名称或镜像ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
注意每个服务都必须通过image指令指定镜像或build指令(需要 Dockerfile)等来自动构建生成镜像。
2、build
指定Dockerfile所在文件夹的路径(可以是绝对路径或相对的docker-compose.yml文件路径)。 Compose 将会利用它自动构建这个镜像,然后使用镜像。
version: '3'
services:
webapp:
build: ./dir #指定dockerfile在当前dir目录下
使用 context 指令指定Dockerfile所在文件夹的路径。
使用dockerfile指令指定Dockerfile文件名。
使用 arg 指令指定构建镜像时的变量。
version: '3'
services:
webapp:
build:
context: ./dir #定义dockerfile路径
dockerfile: Dockerfile-alternate #定义dockerfile文件名(非默认名称)
args: #定义变量
buildno: 1 #具体变量,后期可引用
3、command
容器启动后默认执行的命令,会执行command指定的命令。
command: echo "hello world"
4、depends_on
解决容器的依赖、启动先后的问题。
eg:
version: '3'
services:
web: #定义web服务的容器
build: . #.表示当前服务
depends_on: #指定启动容器的先后顺序,先启动以下指定的服务,再执行web服务
- db #应用下面指定的db,postgres镜像
- redis #应用下面指定的redis,redis镜像 redis: #定义redis
image: redis
db: #定义db
image: postgres
注意:以上示例中,由于无检查机制,web服务不会等待db和redis完成启动后才启动。
5、dns
自定义 DNS 服务器。
dns: 8.8.8.8 #定义单一dns地址
dns: #定义dns列表
- 8.8.8.8
- 114.114.114.114
6、expose
声明端口,但不映射到宿主机,只被连接的服务访问。仅指内部端口为参数
expose: #声明端口方式
- "3000"
- "8000"
7、extra_hosts
类似Docker中的--add-host参数,指定额外的host名称映射信息。
extra_hosts: #指定在容器中的本地解析主机信息
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
指定后,会在启动后的服务容器中的/etc/hosts文件中添加本地解析主机信息。
8.8.8.8 googledns
52.1.157.61 dockerhub
8、healthcheck
通过命令检查容器是否健康运行。
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"] #检查的具体方式
interval: 1m30s #检查间隔时间
timeout: 10s #超时时间
retries: 3 #检查次数
9、network_mode
设置网络模式:
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
10、networks:配置容器连接的网络
version: "3"
services:
some-service: #服务名称
networks: #在容器内引用的网络名称
- some-network
- other-network
networks: #定义网络名称
some-network:
other-network:
11、ports:映射端口信息
使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或仅仅指定容器的端口(宿主将会随机选择端口),都可以使用。
ports: #映射端口的写法
- "3000" #单独端口值,指容器的端口,未指定宿主机端口会随机指定
- "8000:8000" #宿主机端口:容器端口
- "49100:22" #宿主机端口可自定义
- "127.0.0.1:8001:8001" #宿主机绑定IP和端口映射值容器端口上
注意:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60并且没放到引号里,可能会得到错误结果,因为YAML会自动解析xx:yy这种数字格式为60进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
12、sysctls
配置容器内核参数
sysctls: #第一种写法
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0 sysctls: #第二种写法
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
13、ulimits
指定容器的ulimits限制值。
ulimits: #对容器的限制值
nproc: 65535 #最大进程数
nofile: #最大打开文件数
soft: 20000 #软件数量
hard: 40000 #硬件数量
14、volumes
数据卷所挂载路径设置。
可以设置宿主机路径(HOST:CONTAINER)或加上访问模式(HOST:CONTAINER:ro)。
该指令中路径支持相对路径。
volumes: #关键字
- /var/lib/mysql #只有一个路径的:指在容器内的路径;在宿主机上也会自动默认创建一个相同路径
- cache/:/tmp/cache #:号前表示宿主机路径;:号后表示容器内路径
- ~/configs:/etc/configs/:ro #~表示支持相对路径;:ro表示访问模式
15、其它指令
指定服务容器启动后执行的入口文件
entrypoint: /code/entrypoint.sh
指定容器中运行应用的用户名
user: nginx
指定容器中工作目录
working_dir: /code
指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行,在生产环境中建议配置为always或者unless-stopped
restart: always
示例:数据库用mysql5.7,创建wordpress博客服务
vim docker-compose.yml version: '3'
services: db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress volumes:
db_data:
Docker编排工具Docker Compose的使用的更多相关文章
- Docker系列10—容器编排工具Docker Compose详解
本文收录在容器技术学习系列文章总目录 1.Docker Compose 概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用Compose文件来配置 ...
- 使用容器编排工具docker swarm安装clickhouse多机集群
1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker swarm init [options] 3,再需 ...
- docker编排工具,docker-compose下载与安装
安装很简单,但是难免会遇到问题:1.安装curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compos ...
- Docker 编排工具Rancher 2.0
下载镜像: [root@localhost hongdada]# docker pull rancher/server:preview 运行容器: [root@localhost hongdada]# ...
- Docker 编排工具Rancher 1.6.18
使用docker获取rancher [root@localhost /]# docker pull rancher/server:stable [root@localhost /]# docker i ...
- 单机编排之Docker Compose
当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容器出错,这个时候推荐使用docker 单机编排工具docker compose,Docker Compose 是docker容器的一种 ...
- docker——三剑客之Docker Compose
编排(Orchestration)功能是复杂系统实现灵活可操作性的关键.特别是在Docker应用场景中,编排意味着用户可以灵活的对各种容器资源实现定义和管理. 作为Docker官方编排工具,Compo ...
- 【云计算】Docker云平台—Docker进阶
Docker云平台系列共三讲,此为第二讲:Docker进阶 参考资料: 五个Docker监控工具的对比:http://www.open-open.com/lib/view/open1433897177 ...
- 温故知新Docker概念及Docker Desktop For Windows v3.1.0安装
Docker 简介 什么是Docker? Docker是一个开放源代码软件项目,项目主要代码在2013年开源于GitHub.它是云服务技术上的一次创新,让应用程序布署在软件容器下的工作可以自动化进行, ...
随机推荐
- Xshell 打开时,初始运行卡慢优化方法
我使用的是Xshell 6免费版,有需要的同学可以去这个地址下载:https://www.netsarang.com/download/down_form.html?code=622 一开始安装完Xs ...
- Laravel Ignition 2.5.1 代码执行漏洞(CVE-2021-3129)
影响范围 Laravel 框架 < 8.4.3 facade ignition 组件 < 2.5.2 poc git clone https://github.com/simonlee-h ...
- CentOS 7 安装虚拟机
1.本次安装centos7 安装使用的软件是VitrualBox 虚拟机软件 Oracle公司的虚拟机软件,免费商品(大家可以百度搜索去官网下载) 1:我这里使用的是阿里的centos7的镜像(大家可 ...
- Adaptive AUTOSAR 学习笔记 12 - 通信管理
本系列学习笔记基于 AUTOSAR Adaptive Platform 官方文档 R20-11 版本 AUTOSAR_EXP_PlatformDesign.pdf 缩写 CM:Communicatio ...
- 靶机DC-2 rbash绕过+git提权
这个靶机和DC-1一样,一共5个flag.全部拿到通关. root@kali:/home/kali# nmap -sP 192.168.1.* 先扫一下靶机的IP地址,拿到靶机的地址为192.168. ...
- 指向结构的指针 struct结构名称 *结构指针变量名
//指向结构的指针 struct结构名称 *结构指针变量名 //(*结构指针变量名).成员变量名//结构指针变量->成员变量名 1 #include<stdio.h> 2 #incl ...
- 程序员被老板要求两个月做个APP,要不比京东差,网友:做一个快捷方式,直接链到京东
隔行如隔山,这句话说得一点都没错.做一个程序员,很多人都会羡慕,也有很多人会望而却步. 作为一个外行人,你别看程序员每天坐在电脑前敲敲键盘打打代码,以为很简单,其实啊也只有程序员自己明白,任何一个看似 ...
- iOS开发之HTTP断点续传
前言 在APP中经常会遇到文件下载,鉴于用户体验和流量控制,就需要用到断点续传.本文主要对断点续传进行了多线程封装. 效果图 原理 HTTP实现断点续传是通过HTTP报文头部header里面设置的两个 ...
- MySQL索引篇之索引存储模型
本文重点介绍下索引的存储模型 二分查找 给定一个1~100的自然数,给你5次机会,你能猜中这个数字吗? 你会从多少开始猜? 为什么一定是50呢?这个就是二分查找的一种思想,也叫折半查找,每 ...
- K8s 部署 Gitlab CI Runner
K8s 版本:1.20.6 GitLab CI 最大的作用是管理各个项目的构建状态.因此,运行构建任务这种浪费资源的事情交给一个独立的 Gitlab Runner 来做就会好很多,而且 Gitlab ...