一、简介
compose 是用来定义和运行一个或多个容器(通常都是多个)的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。通俗点说就是可以在一个yml中定义多个容器,然后docker-compose利用这个yml可以一下生成多个容器。
二、使用
1、安装compose
(1)下载docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
(2)给予权限
chmod +x /usr/local/bin/docker-compose
(3)创建软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
(4)查看版本
docker-compose --version
2、编写docker-compose.yml
可根据自己的项目自行编写,下面是我的示例。在这个例子中我将demo.jar打包成镜像并运行生成容器,同事生成redis容器和postgresql、postgis、pgrouting容器(pgrouting/pgrouting:12-3.0-3.0.1镜像已包含这三个)
version: "3" #向下兼容,一般都用3
services: #列出要编排的所有服务,即把每个容器看作一个服务,取一个别名
demo: #取别名为demo
build: . #将jar包生成镜像并运行则必须要加 。
container_name: demo #容器的名字
depends_on: #依赖于redis,也就是等redis启动后再执行
- redis
ports:
- "8088:8088"
redis:
image: redis:6.2.5
container_name: myRedis
restart: always #这里表示如果容器意外退出,会让它自动重启
privileged: true #让容器用特权,这样挂载的目录或文件进行创建,执行不会报权限相关错误
volumes:
- /data/redis/data:/data
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
ports:
- "6379:6379"
command: redis-server /etc/redis/redis.conf #容器启动后默认执行的命令
postgresql:
image: pgrouting/pgrouting:12-3.0-3.0.1
container_name: myPg
restart: always #这里表示如果容器意外退出,会让它自动重启
privileged: true #让容器用特权,这样挂载的目录或文件进行创建,执行不会报权限相关错误
environment: #设置环境变量,一般用来设置密码
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- /data/postgresql:/var/lib/postgresql
ports:
- "5432:5432"
3、编写Dockerfile
FROM java:8
EXPOSE 8085
VOLUME /data
ADD demo.jar demo.jar
ENTRYPOINT ["java","-jar","demo.jar"]
4、将docker-compose.yml、jar包、Dockerfile放到服务器同一个目录。并拉取相关镜像
这里不再展示如何生成jar包和拉取镜像了
5、创建各个容器
进入docker-compose.yml同级目录中执行:
docker-compose up -d
之后执行docker images和docker ps就会看到生成的镜像和运行的容器了