Docker系列九Docker-compose
一、安装
-
简介
Dockerfile与服务编排,我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。compose允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器(LNMP)等。 -
下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
-
授权
$ sudo chmod +x /usr/local/bin/docker-compose
-
创建软链
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
-
测试安装是否成功
$ docker-compose --version docker-compose version 1.25.5, build 8a1c60f6
二、编写docker-compose.yml
首先以简单的redis为例
-
创建需要挂载的文件夹
mkdir -p /usr/local/docker/redis/data
-
创建配置文件
touch /usr/local/docker/redis/redis.conf
port 6379 daemonize no tcp-keepalive 300 databases 16 save 10 2 rdbcompression yes dbfilename dump-6379.rdb appendonly yes appendfilename appendonly-6379.aof #如果需要外网访问可以加上下面的配置 bind 0.0.0.0 requirepass 密码 protected-mode no
-
构建docker-compose.yml,最好使用在编辑器里编写,防止格式错误
touch /usr/local/docker/redis/docker-compose.yml
version: '3.1' services: redis: restart: always image: redis container_name: redis56380 environment: TZ: Asia/Shanghai ports: - 56380:6379 privileged: true volumes: - /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf - /usr/local/docker/redis/data:/data command: - sh - -c - | redis-server /etc/redis/redis.conf
version:docker-compose包含多个1/2/3多个版本,根据docker引擎版本而定,一般不是很老的版本的写3.0就没问题 services:配置多个镜像脚本,如上面提到的redis,也可以是mysql等等 redis.image:指定镜像版本,上面的就是默认拉取最新的redis:latest版本 command:需要执行的运行命令,有多种写法,推荐上面这种,如果有多个在命令行,有两种方式,串行化的方式 command: - sh - -c - | cmd1 cmd2 cmd3 并行方式 command: - sh - -c - | cmd1 & cmd2 & cmd3 也可以使用bash的方式 command: /bin/bash -c "cp /app/dtest/config.default.yml /app/config.yml && python -u /app/dtest/tcc.py" 其他命令:和docker中的命令含义一样。
-
启动
注意,需要切换到docker-compose.yml所在目录
docker-compose up -d
其他常用命令
# 1. 基于docker-compose.yml启动管理的容器 docker-compose up -d # 2. 关闭并删除容器 docker-compose down # 3. 开启|关闭|重启已经存在的由docker-compose维护的容器 docker-compose start|stop|restart # 4. 查看由docker-compose管理的容器 docker-compose ps # 5. 查看日志 docker-compose logs -f
三、项目整体部署
-
首先先编写项目的Dockerfile文件
# 该镜像需要依赖的基础镜像 FROM openjdk:8-jdk # 将当前目录下的jar包复制到docker容器的根目录下,其他目录可以自己指定 ADD knife4j-1.0.0.jar app.jar # 运行过程中创建一个app.jar文件 RUN bash -c 'touch /app.jar' # 护者信息 MAINTAINER 214556924@qq.com #容器挂载 VOLUME /tmp #指定构建镜像时暴露端口 EXPOSE 9092 # 指定docker容器启动时运行jar包 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
编写docker-compose.yml文件
version: '3.1' services: knife: build: context: /usr/local/docker/knife dockerfile: Dockerfile container_name: knife4jv1 ports: - 3209:9092 redis: restart: always image: redis container_name: redis56380 environment: TZ: Asia/Shanghai ports: - 56380:6379 privileged: true volumes: - /usr/local/docker/redis/redis.conf:/etc/redis/redis.conf - /usr/local/docker/redis/data:/data command: - sh - -c - | redis-server /etc/redis/redis.conf
命令解释:
services.knife:指定项目的服务名称
services.knife.build:项目的构建时的信息,构建时的根目录,如dockerfile文件
services.knife.container_name:容器名称
services.knife.ports:指定映射端口
后面就是redis相关命令在前面已经介绍过了
-
项目启动
文件编写好后,文件结构是这样的,然后再切换到
/usr/local/docker
直接启动docker-compose up -d