docker-compose手册

大家好,我叫徐锦桐,个人博客地址为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就行了。

相关推荐
feng_blog668844 分钟前
【docker-1】快速入门docker
java·docker·eureka
元气满满的热码式3 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
橘子在努力7 小时前
【橘子ES】使用docker搭建ELK环境
elk·elasticsearch·docker
元气满满的热码式7 小时前
K8S中ingress详解
云原生·容器·kubernetes
matrixlzp7 小时前
K8S 启动探测、就绪探测、存活探测
云原生·容器·kubernetes
Dusk_橙子7 小时前
在K8S中,如何使用EFK实现日志的统一管理?
云原生·容器·kubernetes
Tony11547 小时前
Kubernetes v1.28.0安装dashboard v2.6.1(k8s图形化操作界面)
云原生·容器·kubernetes
龙胖不下锅7 小时前
k8s资源预留
云原生·容器·kubernetes
超级阿飞7 小时前
利用Kubespray安装生产环境的k8s集群-排错篇
docker·容器·kubernetes
喝醉酒的小白7 小时前
在 Kubernetes 上快速安装 KubeSphere v4.1.2
云原生·容器·kubernetes