本教程中用到的配置文件请参考下面的连接
Linux下使用Docker容器部署Web应用
https://www.osyunwei.com/archives/11855.html
1、什么是容器编排?
所谓容器编排就是多个Docker容器的自动配置、协作和管理服务的过程,最后执行一个yaml文件,将文件中所定义的多个容器依次启动,这就是容器编排。
2、什么是Docker-Compose?
Docker-Compose是docker提供的一个命令行工具,用来定义和运行由多个容器组成的应用。使用Docker-Compose,我们可以通过yaml文件定义应用程序的各个服务,并由单个命令完成应用的创建和启动。
3、安装Docker-Compose
Docker-Compose依靠Docker进行工作,必须确保已经安装了docker才能安装Docker-Compose
CentOS 7.x 安装Docker-ce社区版本
https://www.osyunwei.com/archives/11592.html
#把docker-compose安装在/usr/local/bin/目录下
#执行一下命令
curl -SL https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
#或者下面这两个命令都可以
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.0.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
curl -SL "https://github.com/docker/compose/releases/download/v2.0.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
[root@master01 bin]# docker-compose --version
Docker Compose version v2.0.1
4、编写yaml文件
mkdir -p /docker/data/docker-compose/conf #创建yaml文件存放目录
cd /docker/data/docker-compose/conf
vi /docker/data/docker-compose/conf/docker-compose.yaml #编辑
version: '3'
networks:
mycust-bridge:
external: true
services:
#容器名称
mysqlv8.0.26:
image: mysql:v8.0.26
networks:
- "mycust-bridge"
volumes:
- /docker/data/mysql/database:/var/lib/mysql
- /docker/data/mysql/etc/mysql/my.cnf:/etc/mysql/my.cnf
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_general_ci
environment:
- MYSQL_ROOT_PASSWORD=123456
#开机自启动
restart: always
#容器名称
php-fpm8.0.11:
image: php-fpm:8.0.11
networks:
- "mycust-bridge"
volumes:
- /docker/data/web:/data/web
- /docker/data/php/etc:/usr/local/php/etc
restart: always
#容器名称
nginx1.20.1:
#容器所使用的镜像名称
image: nginx:1.20.1
networks:
- "mycust-bridge"
#设置端口映射(宿主机端口:容器内端口)
ports:
- 80:80
volumes:
- /docker/data/web:/data/web
- /docker/data/nginx/conf/ssl:/usr/local/nginx/conf/ssl
- /docker/data/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf
- /docker/data/nginx/conf/vhost:/usr/local/nginx/conf/vhost
restart: always
:wq! #保存退出
#特别注意yaml文件的格式有前后缩进、空格等一定要仔细检查
#命令须要在右docker-compose.yaml配置文件的目录下执行
cd /docker/data/docker-compose/conf
#运行容器
docker-compose -f docker-compose.yaml up -d
#列出容器
docker-compose -f docker-compose.yaml ps
#启动/停止容器
docker-compose -f docker-compose.yaml stop
docker-compose -f docker-compose.yaml start
#删除容器
docker-compose -f docker-compose.yaml down
#查看日志
docker-compose -f docker-compose.yaml logs
#使用docker-compose创建的容器名称包含前缀和后缀
前缀-容器名称-后缀
例如:src-nginx-1
前缀:默认情况下,使用docker-compose.yml所在的文件夹名称
后缀:序列-1
可以通过设置环境变量COMPOSE_PROJECT_NAME来更改
export COMPOSE_PROJECT_NAME=osyunwei
进入容器的方式:
1、docker方式进入容器,名称必须写全(前后缀都要加上)
docker exec -it src-nginx-1 /bin/bash
2、docker-compose方式进入(只写容器名称,不需要加前后缀)
docker-compose exec nginx /bin/bash
扩展阅读:
Docker-compose常用命令
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
-f --file FILE指定Compose模板文件,默认为docker-compose.yml
-p --project-name NAME 指定项目名称,默认使用当前所在目录为项目名
--verbose 输出更多调试信息
-v,-version 打印版本并退出
--log-level LEVEL 定义日志等级(DEBUG, INFO, WARNING, ERROR, CRITICAL)
docker-compose up
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 ps
docker-compose ps [options] [SERVICE...]
列出项目中所有的容器
docker-compose stop
docker-compose stop [options] [SERVICE...]
选项包括
-t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
docker-compose stop
停止正在运行的容器,可以通过docker-compose start 再次启动
docker-compose -h
docker-compose -h
查看帮助
docker-compose down
docker-compose down [options]
停止和删除容器、网络、卷、镜像。
选项包括:
–rmi type,删除镜像,类型必须是:all,删除compose文件中定义的所有镜像;local,删除镜像名为空的镜像
-v, –volumes,删除已经在compose文件中定义的和匿名的附在容器上的数据卷
–remove-orphans,删除服务中没有在compose中定义的容器
docker-compose down
停用移除所有容器以及网络相关
docker-compose logs
docker-compose logs [options] [SERVICE...]
查看服务容器的输出。默认情况下,docker-compose将对不同的服务输出使用不同的颜色来区分。可以通过–no-color来关闭颜色。
docker-compose logs
查看服务容器的输出
-f 跟踪日志输出
docker-compose bulid
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 pull
docker-compose pull [options] [SERVICE...]
拉取服务依赖的镜像。
选项包括:
–ignore-pull-failures,忽略拉取镜像过程中的错误
–parallel,多个镜像同时拉取
–quiet,拉取镜像过程中不打印进度信息
docker-compose pull
拉取服务依赖的镜像
docker-compose restart
docker-compose restart [options] [SERVICE...]
重启项目中的服务。
选项包括:
-t, –timeout TIMEOUT,指定重启前停止容器的超时(默认为10秒)
docker-compose restart
重启项目中的服务
docker-compose rm
docker-compose rm [options] [SERVICE...]
删除所有(停止状态的)服务容器。
选项包括:
–f, –force,强制直接删除,包括非停止状态的容器
-v,删除容器所挂载的数据卷
docker-compose rm
删除所有(停止状态的)服务容器。推荐先执行docker-compose stop命令来停止容器。
docker-compose start
docker-compose start [SERVICE...]
docker-compose start
启动已经存在的服务容器。
docker-compose run
docker-compose run [options] [-v VOLUME...] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
在指定服务上执行一个命令。
docker-compose run ubuntu ping www.baidu.com
在指定容器上执行一个ping命令。
docker-compose scale
docker-compose scale web=3 db=2
设置指定服务运行的容器个数。通过service=num的参数来设置数量
docker-compose pause
docker-compose pause [SERVICE...]
暂停一个服务容器
docker-compose kill
docker-compose kill [options] [SERVICE...]
通过发送SIGKILL信号来强制停止服务容器。
支持通过-s参数来指定发送的信号,例如通过如下指令发送SIGINT信号:
docker-compose kill -s SIGINT
docker-compose config
docker-compose config [options]
验证并查看compose文件配置。
选项包括:
–resolve-image-digests 将镜像标签标记为摘要
-q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
–services 打印服务名,一行一个
–volumes 打印数据卷名,一行一个
docker-compose create
docker-compose create [options] [SERVICE...]
为服务创建容器。
选项包括:
–force-recreate:重新创建容器,即使配置和镜像没有改变,不兼容–no-recreate参数
–no-recreate:如果容器已经存在,不需要重新创建,不兼容–force-recreate参数
–no-build:不创建镜像,即使缺失
–build:创建容器前 ,生成镜像
docker-compose exec
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 port
docker-compose port [options] SERVICE PRIVATE_PORT
显示某个容器端口所映射的公共端口。
选项包括:
–protocol=proto,指定端口协议,TCP(默认值)或者UDP
–index=index,如果同意服务存在多个容器,指定命令对象容器的序号(默认为1)
docker-compose push
docker-compose push [options] [SERVICE...]
推送服务依的镜像。
选项包括:
–ignore-push-failures 忽略推送镜像过程中的错误
docker-compose stop
docker-compose stop [options] [SERVICE...]
停止运行的容器
docker-compose uppause
docker-compose unpause [SERVICE...]
恢复处于暂停状态中的服务
#配置参数
#容器名称
build:
context:
command:
dockerfile: Dockerfile-alternate
container_name: nginx
#设置容器优先启动
depends_on:
- mysql
- php-fpm
extra_hosts:
- "somehost:192.168.1.100"
dns:
- 8.8.8.8
net: "bridge"
volumes_from:
- service_name
expose:
- 8080