我们假设,现在有一个java项目,其中用到了mysql和redis服务。
现在我们要将它打包上传到docker制作成镜像,那么一般来讲,我们分为下面这几步:
1、打包项目为jar包,并上传到linux(docker)
2、编写Dockerfile文件,指定jdk镜像以及ENTRYPOINT等命令
3、docker build构建镜像以及docker run启动容器
4、指定数据卷运行mysql以及redis容器
但是这样子的启动非常麻烦,如果服务很多的话,一个一个的启动十分浪费时间,所以我们要docker compose这个工具帮助启动容器
一:安装docker compose
1.直接复制官网的命令:
curl -SL https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
该命令会从 github 下载 docker compose 插件到当前主机的/usr/local/bin 目录中,并被重命名为 docker-compose
2.下载完后将docker compose修改为可执行文件:
chmod +x /usr/local/bin/docker-compose
3.查看版本,验证是否安装成功
docker-compose version
二:定义 compose.yml
安装成功后,进入到项目的目录下,编写compose.yml文件
以下是一个文件示例,具体命令按照需求来
services:
app:
build: ./
container_name: app
ports:
- 9000:8080
volumes:
- ./logs:/var/applogs
depends_on:
- mysql
- redis
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- 3306:3306
volumes:
- /root/mysql/log:/var/log/mysql
- /root/mysql/data:/var/lib/mysql
- /root/mysql/conf:/etc/mysql/conf.d
redis:
image: redis:7.0
ports:
- 6379:6379
volumes:
- /root/redis/redis.conf:/etc/redis/redis.conf
- /root/redis/data:/data
command: redis-server /etc/redis/redis.conf
在以上文件中,指定了端口、数据卷、镜像、容器名等
要注意的是,yml文件的格式很严格,为防止编写错误,编写完后运行docker compose config -q可以检测以下文件是否有问题
docker compose config -q
三:启动所有容器
docker compose up -d
以上命令可以启动compose.yml中的所有容器,-d表示以后台方式运行(注意要在当前目录)
运行成功后:
此时再查看docker运行的容器就会显示有app容器以及mysql和redis的容器
同时我们便可以在网站访问项目,也可以进入mysql和redis,数据和缓存的查找新增都和手工启动一样,但是docker compose会方便的多并且对容器的管理也更到位