docker-compose使用
安装
需提前安装 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...]。
在指定服务上执行一个命令。
最后更新于 2026-02-18 18:09