大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家访问。
前言
一些自己经常用到的docker-compose知识。
一、运行和启动项目
1.1、docker-compose运行容器
-d
表示在后台运行
shell
docker-compose -f 文件名.yml up -d
1.2、docker-compose停止容器
shell
docker-compose -f 文件名.yml stop
二、各字段用法
2.1、restart字段
用于指定容器的重启策略
-
no: 表示容器不会自动重启。如果容器退出,它将保持停止状态。
-
always: 表示容器将始终自动重启,无论退出原因是什么。
-
on-failure: 表示容器仅在退出状态码非零(即失败)时才自动重启。\
-
unless-stopped: 表示容器将自动重启,除非手动停止了容器。这是一个常见的选项,用于确保容器总是在它不是故意停止的情况下运行。
2.2、command字段
指定容器启动后要运行的命令,会覆盖镜像默认的命令,可以设置一个sh或者其他的脚本文件。
shell
command: ["./myscript.sh"]
三、具体应用
一个项目镜像搭配着Mysql容器
给个例子,这个例子是一个Go项目,Go项目用镜像构建,并且使用了Mysql的容器。
yaml
version: '3'
services:
go-app:
image: xjintong/douyin:latest
restart: unless-stopped
volumes:
- ./src:/go/src
working_dir: /go/src # 设置容器的工作目录为 /go/src 容器启动后的默认目录
ports:
- "8080:8080"
tty: true # 可以在容器中执行交互式命令
environment:
MYSQL_HOST: "mysql" # 连接下面的mysql服务,如果下面服务名换了,这也得换
MYSQL_DATABASE: "bytedance" # 数据库名称
MYSQL_USER: "bytedance" # 数据库用户名
MYSQL_PASSWORD: "bytedance" # 数据库密码
depends_on:
- mysql
mysql:
image: mysql:latest
restart: unless-stopped
environment:
MYSQL_DATABASE: "bytedance" # 数据库名称
MYSQL_USER: "bytedance" # 数据库用户名
MYSQL_PASSWORD: "bytedance" # 数据库密码
MYSQL_ROOT_PASSWORD: "bytedance" # 数据库根密码
ports:
- "3306:3306" # 将宿主机的3306端口映射到容器的3306端口,方便调试。
volumes:
- ./mysql:/var/lib/mysql
不过要注意两点。
第一点: 首先就是在项目中填写的数据库的ip,不要填本地回环地址(127.0.0.2),要填MySql的容器ip。
MySql容器ip可通过下列命令查看,将代码中的mysql-container-id
换成你容器的id。
shell
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-container-id
第二点: 用Navicat Premium调试的时候,如果项目部署在本地的话,软件中的主机地址填localhost;如果部署在服务器的话,主机地址就填服务器ip就行了。