Docker-compose是一个基于Docker的编排工具,所谓编排我的理解就是将不一样的镜像经过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining and running multi-container Docker applications.
java
很简单的一句话,下面咱们看下怎么部署一个JavaWeb项目.主要有几大步骤:mysql
安装docker 和 docker-compose 同样都很是的简单,这里不在多赘述,官网都有很是详细的教程. 至于docker_compose就是一个命令文件,将其所在的路径配置PATH环境变量中便可,不配置也行,这样的话就要打全路径了,比较麻烦.linux
我是用的是Manjaro的Linux发行版本,启动docker服务的命令systemctl start docker
,git
$ docker version Client: Version: 18.05.0-ce API version: 1.37 Go version: go1.10.2 Git commit: f150324782 Built: Wed May 16 22:27:45 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.05.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.10.2 Git commit: f150324782 Built: Wed May 16 22:28:17 2018 OS/Arch: linux/amd64 Experimental: false
下载docker-compose完成以后,使用chmod +x docker-componse 来受权,不然会出现权限拒绝的报错信息github
配置完成只有,在命令行中输入docker-compose version
查看是否安装成功,输出相似如下信息,则表明成功sql
$ docker-compose version docker-compose version 1.22.0-rc2, build 6817b533 docker-py version: 3.4.1 CPython version: 3.6.6 OpenSSL version: OpenSSL 1.1.0f 25 May 2017
此文件名位Dockerfiledocker
FROM hub.c.163.com/library/java:8 VOLUME /tmp ADD dmc_user.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
下面咱们将使用Shell脚本的方式来利用这个Docker文件来进行建立镜像shell
因为这里使用SpringBoot建立的项目,我的使用Gradle构建项目,使用Maven或者其余方式构建的都可,这里写了一个Shell脚本,以下所示:数据库
#!/usr/bin/env bash #配置相关的路径地址 #配置项目名称 project_name="DMC_USER" # 配置源码地址 project_dir="/home/yan/code/work/zhuxun/dmc_user" #配置shell地址 shell_dir="/home/yan/code/shell/dmc/user" echo "正在准备编译项目${project_name}....." #切换到项目目录 cd ${project_dir} echo "已经成功切换到${project_name}的工做目录......" #使用gradle编译,跳过单元测试 ./gradlew build -x test if [ $? -eq 0 ]; then echo "正在拷贝JAR文件............" # 编译成功,则将JAR文件拷贝当前Shell目录 cp build/libs/dmc_user-0.0.1-SNAPSHOT.jar ${shell_dir}/dmc_user.jar cd ${shell_dir} echo "编译成功,正在编译为Docker镜像,请等待...." # 使用docker build命令构建镜像文件,此时会读取Dockerfile文件 docker build -t dmc_user:latest ${shell_dir} if [ $? -eq 0 ]; then echo "编译镜像成功,请使用docker images命令查看效果....." fi fi
添加运行权限,运行之......api
因为我这里使用的多个项目进行同事运行,所以须要在次编译另一个项目,方法相似,这里不在赘述. 编译完成以后,咱们在Dockerfile中查看一下镜像
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE dmc_user latest a7ea7b79390f 3 hours ago 692MB dmc_apim latest 56c7f37aee13 16 hours ago 704MB hub.c.163.com/library/java 8 a001fc27db5a 19 months ago 643MB
到这里,咱们的镜像已经准备好了,下面咱们使用docker-compose来编排镜像,组成新的服务.在shell的目录下建立 文件名称docker-compose.yml的配置文件,内容以下(删除注释)...
# 配置文件的版本 version: '2' # 建立的服务,这里我建立了3个服务,两个jar项目做为演示,一个mysql做为服务器 services: dmc_api: # 容器的名称 container_name: dmc_apim # 容器的端口信息,这里的SpringBoot项目的端口是9092,能够在宿主机经过8082访问 ports: - "8082:9092" # 依赖的docker images镜像名称,固然也有版本这里是简写 dmc_api:latest image: dmc_apim # 建立自服务的依赖项,此服务依赖属于mysql,在咱们建立的三个服务中的最后一个 depends_on: - dmc_dev_mysql dmc_user: container_name: dmc_user ports: - "8081:9091" image: dmc_user depends_on: - dmc_dev_mysql dmc_dev_mysql: # 这个属性很是重要,在SpringBoot的服务中,能够经过这个名称访问,若是名称冲突,docker_compose会自动的添加后缀致使SpringBoot项目找不到数据库链接, # 从而启动失败,所以须要配置容器的名称 container_name: dmc_dev_mysql # 挂载目录,其中 /docker-entrypoint-initdb.d/ 是比较重要的,他能够进行mysql的初始化,在咱们的mysql服务的时候启动初始化脚本 # 所以须要在挂载的目录下建立init.sql脚本文件,用于初始化 volumes: - ./data/:/var/lib/mysql/ - ./mysql/init/:/docker-entrypoint-initdb.d/ # 配置映射端口,这里mysql的端口默认是3306,咱们将其映射到宿主机的9936端口 ports: - "9936:3306" # 依赖的镜像 image: hub.c.163.com/library/mysql # 镜像运行须要的参数,能够根据本身的须要来配置,这个请参考镜像的说明文件 environment: MYSQL_ALLOW_EMPTY_PASSWORD: yse
这里和建立docker Image相似,都是使用配置文件,咱们来看下咱们的配置文件,配置文件名称是固定的,所以要求名称要写对,不然会报一些错误:
$ docker-compose up ERROR: Can't find a suitable configuration file in this directory or any parent. Are you in the right directory? Supported filenames: docker-compose.yml, docker-compose.yaml
能够看到,最后一句话中说明了配置的文件名称 Supported filenames: docker-compose.yml, docker-compose.yaml
## 启动Docker-compose 使用命令```docker-compose up```能够启动编排,要求运行此命令运行路径下必须有docker-compose的配置文件,不然会报上面的找不到文件, 添加 *-d * 就能够后台运行,查看docker-compose的帮助文件咱们看下docker容器的情况: ```shell $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c2b3823bd93 dmc_apim "java -Djava.securit…" 2 hours ago Up 2 hours 0.0.0.0:8082->9092/tcp dmc_apim f1473486bbec dmc_user "java -Djava.securit…" 2 hours ago Up 2 hours 0.0.0.0:8081->9091/tcp dmc_user 3c632926a642 hub.c.163.com/library/mysql "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:9936->3306/tcp dmc_dev_mysql
能够看到两个SpringBoot项目和一个MySql项目在docker中运行完成.....
命令名称 | 说明 |
---|---|
docker-compose build | Build or rebuild services |
docker-compose bundle | Generate a Docker bundle from the Compose file |
docker-compose config | Validate and view the Compose file |
docker-compose create | Create services |
docker-compose down | Stop and remove containers, networks, images, and volumes |
docker-compose events | Receive real time events from containers |
docker-compose exec | Execute a command in a running container |
docker-compose help | Get help on a command |
docker-compose images | List images |
docker-compose kill | Kill containers |
docker-compose logs | View output from containers |
docker-compose pause | Pause services |
docker-compose port | Print the public port for a port binding |
docker-compose ps | List containers |
docker-compose pull | Pull service images |
docker-compose push | Push service images |
docker-compose restart | Restart services |
docker-compose rm | Remove stopped containers |
docker-compose run | Run a one-off command |
docker-compose scale | Set number of containers for a service |
docker-compose start | Start services |
docker-compose stop | Stop services |
docker-compose top | Display the running processes |
docker-compose unpause | Unpause services |
docker-compose up | Create and start containers |
docker-compose version | Show the Docker-Compose version information |
更多内容请查看 Docker-componse官网教程