Docker Compose
1.1 简介
-
服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
-
项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
1.2 安装与卸载
1.linux
-
在 Linux 上的也安装十分简单,从官方 GitHub Release 处直接下载编译好的二进制文件即可。例如,在 Linux 64 位系统上直接下载对应的二进制包。
# 下载docker-compose到/usr/local/bin$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose# 将docker-compose文件状态改为可执行文件$ sudo chmod +x /usr/local/bin/docker-compose
2.macos、window
-
Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。 Docker Desktop for Mac/Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。
3.bash命令补全
$ curl -L https://raw.githubusercontent.com/docker/compose/1.25.5/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
4.卸载
-
如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
5.测试安装成功
$ docker-compose --versiondocker-compose version 1.25.5, build 4667896b#注意:如果没有显示版本试试docker-compose -v 或者 docker compose version
1.3 docker compose使用
-
服务 ( service ):一个应用容器,实际上可以运行多个相同镜像的实例。
-
项目 ( project ):由一组关联的应用容器组成的一个完整业务单元。∂一个项目可以由多个服务(容器)关联而成, Compose 面向项目进行管理。
-
springboot应用
-
mysql服务
-
redis服务
-
elasticsearch服务
-
.......
#进入你的项目[root@centos ~]# cd 项目的目录#创建docker-compose.yml模板文件[root@centos ~]# touch docker-compose.yml
version: "3.2"services:tomcat01: #服务名称container_name: tomcat01 # 相当于run 的 --nameimage: tomcat:8.0-jre8 #使用哪个镜像 相当于run imageports: #用来完成host与容器的端口映射关系 相当于run -p- "8080:8080"volumes: #完成宿主机与容器中目录数据卷共享 相当于run -v#- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射- tomcatwebapps01:/usr/local/tomcat/webappsnetworks: #代表当前服务使用哪个网络桥 相当于run --networ- hellotomcat02: #服务名称container_name: tomcat02image: tomcat:8.0-jre8 #使用哪个镜像ports: #用来完成host与容器的端口映射关系- "8081:8080"volumes: #完成宿主机与容器中目录数据卷共享#- /root/apps:/usr/local/tomcat/webapps #使用自定义路径映射(绝对路径)- tomcatwebapps02:/usr/local/tomcat/webapps #别名方式networks: #代表当前服务使用哪个网络桥- hellomysql:image: mysql:5.7.32container_name: mysqlports:- "3307:3306"volumes:- mysqldata:/var/lib/mysql- mysqlconf:/etc/mysqlenvironment:- MYSQL_ROOT_PASSWORD=rootnetworks:- helloredis:image: redis:5.0.10container_name: redisports:- "6379:6379"volumes:- redisdata:/datanetworks:- hellocommand: "redis-server --appendonly yes" #run 镜像之后用来覆盖容器内容默认命令volumes: #声明上面服务所使用的自动创建的卷名tomcatwebapps01: #声明指令的卷名 compose自动创建该卷名但是会在之前加入项目名external: #使用自定义卷名(默认为false不使用外部数据卷,因为docker compose会自动创建的数据卷,名称是以项目名开头的)true #true确定使用指定卷名 注意:一旦使用外部自定义卷名启动服务之前必须手动创建,必须存在该数据卷tomcatwebapps02:mysqldata:mysqlconf:redisdata:networks: #定义服务用到桥hello: #定义上面的服务用到的网桥名称 默认创建就是 bridgeexternal: #使用自定义网桥(默认为false不使用外部网桥, 因为docker compose会自动创建的网桥,名称是以项目名开头的)true #使用外部指定网桥 注意:网桥必须存在
#启动[root@centos ~]# docker-compose up //前台启动一组服务[root@centos ~]# docker-compose up -d //后台启动一组服务#注意:执行docker-compose up命令必须在 docker-compose.yml文件所在目录执行
1.4 docker-compose 模板文件
version: "3"services:webapp:image: examples/webports:- "80:80"volumes:- "/data"
build
version: '3'services:webapp:build:context: ./dirdockerfile: Dockerfile-alternateargs:buildno: 1
command
command: echo "hello world"
container_name
container_name: docker-web-container
注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
depends_on
version: '3'services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres
注意: web 服务不会等待 redis db 「完全启动」之后才启动。
env_file
env_file: .envenv_file:- ./common.env- ./apps/web.env- /opt/secrets.env
mysql:image: mysql:5.7.39ports:- "3306:3306"volumes:- /root/mysql:/var/lib/mysqlenv_file:- .env #在当前目录创建了一个文件名为.env,以点开头的原因是,这样不容易被发现,只有使用ll -a才能查看到networks:- xinke
# common.env: Set development environmentPROG_ENV=development
environment
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
healthcheck
healthcheck:test: ["CMD", "curl", "-f", "http://localhost"]interval: 1m30stimeout: 10sretries: 3
image
image: ubuntuimage: orchardup/postgresqlimage: a4bc65fd
networks
version: "3"services:some-service:networks:- some-network- other-networknetworks:some-network:other-network:
ports
ports:- "3000"- "8000:8000"- "49100:22"- "127.0.0.1:8001:8001"
sysctls
sysctls:net.core.somaxconn: 1024net.ipv4.tcp_syncookies: 0sysctls:- net.core.somaxconn=1024
ulimits
ulimits:nproc: 65535nofile:soft: 20000hard: 40000
volumes
volumes:- /var/lib/mysql- cache/:/tmp/cache- ~/configs:/etc/configs/:ro
version: "3"services:my_src:image: mysql:8.0volumes:- mysql_data:/var/lib/mysqlvolumes:mysql_data:
具体使用参考
1.5 docker-compose 常用命令
1. 命令对象与格式
docker-compose [-f=<arg>...] [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 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。
-
当通过 Ctrl-C 停止命令时,所有容器将会停止。
-
如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
-
默认情况,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容
down
-
此命令将会停止 up 命令所启动的容器,并移除网络
exec
-
进入指定的容器。
ps
-
-q 只打印容器的 ID 信息。
restart
-
-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。
rm
-
-f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
-
-v 删除容器所挂载的数据卷。
start
stop
-
-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
top
unpause
文章来源:https://www.toymoban.com/news/detail-688439.html
文章来源地址https://www.toymoban.com/news/detail-688439.html
到了这里,关于Docker Compose 安装使用 教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!