docker-compose 简单部署

docker-compose文件

  • 按照配置文件启动编排项目
yaml 复制代码
docker-compose -p appweb -f ./docker-compose.yml up -d

-p:项目名称
-f:指定docker-compose.yml文件路径
-d:后台启动
  • 关闭容器
xml 复制代码
docker-compose -p appweb -f ./docker-compose.yml down 

-p:项目名称(up的时候有的,down一定也要带上,不然找不到network)
-f:docker-compose.yml路径
down:停止容器,并删除容器

docker registry 私有仓库部署

好像网上都是linux平台安装指南,所以还是本地拉取个registry docker镜像,而且这个registry 没有GUI界面,只能用http互相操作,感觉用起来比较难受,最后还是在aliyun上用私有镜像仓库来使用 更方便。

而且registry删除镜像比较麻烦,参照文章解决

registry删除镜像的两种办法

xml 复制代码
#查看仓库里已有镜像
http://localhost:5000/v2/_catalog

#获取镜像信息 
curl --header "Accept: application/vnd.docker.distribution.manifest.v2+json" -I -X GET http://127.0.0.1:5000/v2/[镜像名]/manifests/[tag版本]

mysql docker镜像初始化表结构

参照该文章解决
Docker容器启动时初始化Mysql数据库

大致解决思路就是 当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行

所以制作mysql镜像时,将初始化脚本拷贝到 /docker-entrypoint-initdb.d即可

mysql 镜像的Dockerfile.yaml 样例如下,所以只需要 init_database.sql里写上自己的初始化语句

xml 复制代码
# 基础镜像
FROM mysql:8.0.40-debian
# author
MAINTAINER whp404

#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
 
#定义初始化sql文件
ENV INSTALL_DB_SQL init_database.sql
 
#把要执行的sql文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个sql
COPY ./$INSTALL_DB_SQL $AUTO_RUN_DIR/
 
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DB_SQL

其中遇到一些小问题,就是初始化语句问题,反复修改了几次,发现mysql镜像启动后,新的 初始化语句没生效,大概原因是,mysql会检测 数据目录下(/data)是否有内容,如果检测到内容,容器就不会再次 执行初始化语句,所以可以将 对应目录删除,再拉起容器,就会重新执行初始化语句

mysql遇到初始化语句报错 Change limit for "Mysql Row size too large"

好像是表的压缩格式问题,参考添加链接描述

同时理解Dockerfile 中的Volume的概念,我的理解一般还是在compose文件里写 volume挂载比较统一
Dockerfile vs. docker-compose VOLUME

dockerfile does not build due to failed size validation

而且docker-compose启动遇到错,dockerfile does not build due to failed size validation,好像只要单独本地docker pull 对应的 镜像,再执行 docker-compose up 就不会报错了

dockerfile does not build due to failed size validation

最后附上我的docker-compose文件

xml 复制代码
version : '3'
services:
  rpsMysql:
    container_name: rpsMysql
    image: localhost:5000/mysql:1.0
    ports:
      - 3306:3306
    volumes:
      - ./db/my.cnf:/etc/mysql/my.cnf
      - ./db/logs:/logs
      - ./db/data:/var/lib/mysql
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      MYSQL_DATABASE: 'root' #数据库
      MYSQL_ROOT_PASSWORD: '######'  #数据库root用户密码


  nginx:
    container_name: nginx
    image: nginx:stable-alpine-slim
    ports:
      - 80:80
    volumes:
      - ./front/html/dist/:/usr/share/nginx/html/      
      - ./front/conf/nginx.conf:/etc/nginx/conf/nginx.conf

    
    depends_on:
      - bootstrap
    links:
      - bootstrap

  redis:
    container_name: redis
    image: redis:5.0
    ports:
      - 6379:6379
    volumes:
      - ./redis/redis.windows.conf:/opt/redis/redis.windows.conf  #对应工作目录上的conf文件路径和redis-dockefile挂载目录路径
      - ./redis/datadir:/data
      - ./redis/logs:/logs
    command: redis-server /opt/redis/redis.windows.conf

  bootstrap:
    container_name: bootstrap
    image: localhost:5000/bootstrap:1.0
    ports:
      - 8088:8088
    volumes:
      - ./App/rps/:/opt/rps/

    depends_on:
      - rpsMysql
      - redis
    links:
      - rpsMysql
      - redis 
    environment:
      - JIKONG_HOST=###
      - JIKONG_PORT=###
      - OSS_HOST=###
      - OSS_PORT=####
相关推荐
saynaihe1 小时前
2025吐槽季第一弹---腾讯云EO边缘安全加速平台服务
运维·安全·云计算·腾讯云
@#---1 小时前
删除驱动精灵的详细过程
运维·服务器
likeyou~coucou2 小时前
自动化之ansible(二)
运维·自动化·ansible
小红帽2.02 小时前
客服系统自动化方案:揭秘全渠道智能服务解决方案 vx: haotsh
运维·自动化
转身後 默落2 小时前
11.Docker 之分布式仓库 Harbor
分布式·docker·容器
放氮气的蜗牛2 小时前
Linux命令终极指南:从入门到精通掌握150+核心指令
linux·运维·服务器
网络安全King2 小时前
devops 工具 网络安全
运维·web安全·devops
梁萌2 小时前
04-DevOps-安装并初始化Jenkins
运维·jenkins·devops
DC_BLOG2 小时前
Linux-Ansible模块进阶
linux·运维·服务器·ansible
Imagine Miracle2 小时前
【Deepseek】Linux 本地部署 Deepseek
linux·运维·服务器