安装 docker compose
官方安装教程:https://docs.docker.com/compose/install/
1)执行指令,下载docker-compose,并安装到/usr/local/bin
curl -SL https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
如果通过指令下载不了(国内网络原因),请手动打开github仓库下载对应系统的包,仓库地址:https://github.com/docker/compose/releases
然后把文件重命名为docker-compose, 移动到/usr/local/bin
目录下
ps:
如果不知道系统是什么版本,可以通过指令查看,uname -s;uname -m
2)授予权限
sudo chmod +x /usr/local/bin/docker-compose
3)正常打印版本号,表示安装成功
docker-compose -v
构建项目并启动
docker-compose up -d
重新构建项目并启动
docker-compose up --build -d
启动项目
docker-compose start
docker-compose restart # 重启
查看日志,并跟随输出
docker-compose logs -f
查看日志,并跟随输出,最新的10行
docker-compose logs -f --tail 10
停止项目
docker-compose stop
删除构建
#删除容器、默认网络,数据保留
docker-compose down
#删除容器、默认网络和挂载的数据
docker-compose down --volumes
yml格式、语法
compose文件使用的是yaml文件格式,后缀是 .yml
YAML有以下基本规则:
1.大小写敏感
2.使用缩进表示层级关系
3.禁止使用tab缩进,只能使用空格键
4.缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
5.使用#表示注释
6.字符串可以不用引号标注
打包tomca、mysql数据库样例:
# 指定compose文件的版本号, 有1,2,3个版本,目前最新的是3版本,1版本已经在慢慢弃用,
# 建议使用最新版本,如下命令,指定3版本
version: '3'
# 根节点,编排的服务需要写在services下面,注意名称不能使用大写。
services:
# 数据库
mydb:
# 指定镜像的名称或镜像ID,先从本地镜像仓库中找,如果找不到,则从中央仓库下载
image: mysql:5.7.38
# 自动重启
restart: always
# 定义容器名称
container_name: mydb
command: --default-authentication-plugin=mysql_native_password
# 挂载目录
volumes:
# 挂载数据库数据,根据需要修改为本地地址
- '/data/mysql/datadir:/var/lib/mysql'
- '/data/mysql/conf/docker.cnf:/etc/mysql/conf.d/docker.cnf'
# 传递环境参数
environment:
# 如果要使用已有的数据库数据,例如挂载了/var/lib/mysql目录,应该把 MYSQL_*等相关参数注释掉,可以确保不会变更已有的数据库
# 如果是第一次构建系统需要初始化数据库,请把MYSQL_*等相关参数注释打开,根据实际情况修改。注意:确保挂载的/var/lib/mysql目录为空,才会正常创建新的账号和数据库
- "MYSQL_ROOT_PASSWORD=xxx"
- "MYSQL_DATABASE=xxx"
- "MYSQL_USER=xxx"
- "MYSQL_PASSWORD=xxx"
- "TZ=Asia/Shanghai"
ports:
# 使用宿主机的3306端口映射到容器的3306端口,可根据需要修改宿主机端口
# 宿主机:容器
- 3306:3306
networks:
# 指定网络,多个服务之间的通讯,需要指定相同的网络,才能互相访问
- my-newtork
# tomcat程序
myweb:
image: "tomcat:8.5.79-jre8-openjdk-buster"
restart: always
container_name: myweb
volumes:
- '/data/logs:/usr/local/tomcat/logs'
- '/data/webapps/:/usr/local/tomcat/webapps/'
environment:
# 设置容器内的时区
- "TZ=Asia/Shanghai"
ports:
- 8080:8080
depends_on:
# 依赖其它服务,mydb服务启动后,再启动myweb服务
- mydb
networks:
- my-newtork
networks:
# 声明一个网络为桥接方式(一般方式)
my-newtork:
driver: bridge
构建java应用样例:
version: "3.3"
services:
sentgon-java-web:
build:
context: .
dockerfile: ./Dockerfile
volumes:
- /home/javadev/sentweb.zhdingli.com/upload/:/usr/local/app/upload
ports:
- 8080:8080
restart: always
image: sentgon-java-web:1.0
container_name: sentgon-java-web
# depends_on:
# - some-redis
networks:
- default
#restart: on-failure
#networks:
# javanet:
# driver: bridge
#使用预存在的网络
networks:
default:
external:
name: sentgonnet
如果您希望容器加入预先存在的网络,请使用 external 选项:
services:
# ...
networks:
default:
name: my-pre-existing-network
external: true
链接其他容器(需要保证在同一个网络内),web容器内部可通过redis访问,如:ping redis:
services:
web:
# ...
external_links:
- redis-external:redis