安装

需提前安装 Docker Engine 和 Docker CLI,参考docker安装

      yum install docker-compose
    

通过检查版本来验证 Docker Compose 是否正确安装

      docker-compose -version
    

使用

创建 Dockerfile

:::: el-tabs

::: el-tab-pane label=常规

      FROM openjdk:8
VOLUME /tmp
ADD aurora-springboot-0.0.1.jar blog.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/blog.jar"]
    

::: ::: el-tab-pane label=jasypt加密

      FROM openjdk:8
VOLUME /tmp
ADD ballcat-codegen.jar blog.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/blog.jar","--jasypt.encryptor.password=123456"]
    

:::

::: el-tab-pane label=使用自定义jdk镜像

      # 使用CentOS 7作为基础映像
FROM centos:centos7

# 复制JDK安装文件到容器中
COPY jdk-8u161-linux-x64.tar.gz /opt/soft/

# 在/opt/soft/目录下解压JDK安装文件
RUN tar -zxvf /opt/soft/jdk-8u161-linux-x64.tar.gz -C /opt/soft/

# 设置JAVA_HOME、CLASSPATH和PATH环境变量
ENV JAVA_HOME /opt/soft/jdk1.8.0_161
ENV CLASSPATH .:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
ENV PATH $JAVA_HOME/bin:$PATH

# 创建一个数据卷以用于临时存储数据
VOLUME /tmp

# 将Spring Boot应用程序JAR文件复制到容器中并重命名为blog.jar
ADD aurora-springboot-0.0.1.jar /blog.jar

# 指定容器的入口点
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/blog.jar"]
    

:::

::::

创建docker-compose.yml

:::: el-tabs

::: el-tab-pane label=新建数据库

      version: "3"
services:
  db:
    image: mysql:latest
    volumes:
      - /auroras/mysql/log:/var/log/mysql
      - /auroras/mysql/data:/var/lib/mysql
      - /auroras/mysql/conf:/etc/mysql/conf.d
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD:""
    ports:
      - 3306:3306
    expose:
      - 33060
  redis:
    image: "redis:alpine"
    ports:
      - 6379:6379
    restart: always
    environment:
     REDIS_REQUIREPASS: ""  
  web:
    build: .
    restart: always
    ports:
      - 8080:8080
    depends_on:
      - db
      - redis
    

::: ::: el-tab-pane label=数据库已存在

      version: "3"
services:
  web:
    build: .
    restart: always
    ports:
      - 8080:8080
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
      - JAVA_OPTS=-Xmx256m -Xms256m -Xmn256m -Xss1m
      - DB_HOST= 服务器ip
      - DB_PORT=3306
      - DB_NAME=ballcat_codegen
      - DB_USER=root
      - DB_PASSWORD=123456
    

::: ::::

使用 Compose 构建并运行程序

      docker-compose up -d
    

更新镜像

拉取镜像

      docker-compose pull
    

docker-compose 重启服务

      docker-compose up -d --build
    

编辑 Compose 文件以添加绑定挂载

编辑compose.yml项目目录中的文件以添加 服务的绑定挂载web

      services:
  web:
    build: .
    restart: always
    ports:
      - 8080:8080
    volumes:
      - .:/code
    environment:
      FLASK_DEBUG: "true"
    

volumes密钥将主机上的项目目录(当前目录)挂载到/code容器内部,允许您动态修改代码,而无需重建映像。关键environment设置 FLASK_DEBUG环境变量,它告诉flask run在开发模式下运行并在更改时重新加载代码。该模式仅应在开发中使用。

重新构建并运行程序,实现热更改

由于应用程序代码现在使用卷安装到容器中,因此您可以更改其代码并立即查看更改,而无需重建映像。

docker-compose常用命令

up

格式为 docker-compose up [options] [SERVICE...]

该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。

链接的服务都将会被自动启动,除非已经处于运行状态。

可以说,大部分时候都可以直接通过该命令来启动一个项目。

默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

当通过 Ctrl-C 停止命令时,所有容器将会停止。

如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

选项:

  • -d 在后台运行服务容器。

  • --no-color 不使用颜色来区分不同的服务的控制台输出。

  • --no-deps 不启动服务所链接的容器。

  • --force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。

  • --no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。

  • --no-build 不自动构建缺失的服务镜像。

  • -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

start

格式为 docker-compose start [SERVICE...]

启动已经存在的服务容器。

stop

格式为 docker-compose stop [options] [SERVICE...]

停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。

选项:

-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。

down

关闭所有内容,完全删除容器down 。传递--volumes以同时删除容器使用的数据卷

      docker compose down --volumes
    

restart

格式为 docker-compose restart [options] [SERVICE...]

重启项目中的服务。

选项:

-t, --timeout TIMEOUT 指定重启前停止容器的超时(默认为 10 秒)。

rm

格式为 docker-compose rm [options] [SERVICE...]

删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。

选项:

  • -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。
  • -v 删除容器所挂载的数据卷。

logs

格式为 docker-compose logs [options] [SERVICE...]

查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。

该命令在调试问题的时候十分有用。

ps

格式为 docker-compose ps [options] [SERVICE...]

列出项目中目前的所有容器。

选项:

-q 只打印容器的 ID 信息。

run

格式为 docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]

在指定服务上执行一个命令。

加载中...

声明

作者: liyao

版权:本博客所有文章除特别声明外,均采用CCBY-NC-SA4.O许可协议。转载请注明!

最后更新于 2026-02-18 18:09 history