docker,docker componse 部署spring boot简单使用
author:zj
介绍:
Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
`Compose` 恰好满足了这样的需求。它允许用户通过一个单独的 `docker-compose.yml` 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
services
services 字段指定了在 Docker Compose 编排中要运行的服务。每个服务都有一个名称,并指定要使用的镜像和容器的配置选项。例如:
如:
services:
mysql: #服务名
image: mysql:5.5 #mysql镜像
build 和 image
build 字段允许在 Docker Compose 编排中指定 Dockerfile 的位
置,从而可以使用 Docker Compose 构建镜像。
image 字段指定要使用的 Docker 镜像。例如:
services:
mysql: #服务名
image: mysql:5.5 #mysql镜像
user: #服务名
build: ./user #这里为用户微服务文件夹,里面存放的是该服务代码jar包和Dockerfile文件
volumes 和 environment
volumes 字段指定了要使用的数据卷。environment 字段指定了要设置的环境变量。例如:
services:
mysql: #服务名
image: mysql:5.5 #mysql镜像
environment:
MYSQL_ROOT_PASSWORD: 000000 #设置数据库密码
volumes:
- "$PWD/mysql/data:/var/lib/mysql" #数据卷挂载
ports 和 expose
ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。expose 与 ports 不同的是,expose 字段仅仅是将容器内部的端口暴露给其他容器使用,而不是直接映射到宿主机上的端口
services:
gateway: #服务名
build: ./gateway #这里为网关文件夹,里面存放的是该服务代码jar包和Dockerfile文件
ports:
- 7000:7000
nginx:
image: nginx
expose:
- 8080
container_name
指定容器名称。默认将会使用 `项目名称_服务名称_序号` 这样的格式。
environment
设置环境变量。你可以使用数组或字典两种格式。
只给定名称的变量会自动获取运行 Compose 主机上对应变量的值,可以用来防止泄露不必要的数据
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
command
覆盖容器启动后默认执行的命令。
command: echo "hello world"
env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
如果通过 docker-compose -f FILE 方式来指定 Compose 模板文件,则 env_file 中变量的路径会基于模板文件路径。
如果有变量名称与 environment 指令冲突,则按照惯例,以后者为准。
depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动 `redis` `db` 再启动 `web`
build
指定 `Dockerfile` 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 `Compose` 将会利用它自动构建这个镜像,然后使用这个镜像。
总结
配置简单介绍docker-compose.yml
version: "3.0" # Docker Compose的版本
services: # 定义服务
mysqldb: # MySQL数据库服务
image: mysql:5.7.19 # 使用的MySQL镜像版本
container_name: mysql # 容器名称
ports: # 端口映射
- "3306:3306" # 将容器的3306端口映射到宿主机的3306端口
volumes: # 数据卷挂载
- /root/mysql/conf:/etc/mysql/conf.d # 配置文件目录
- /root/mysql/logs:/logs # 日志目录
- /root/mysql/data:/var/lib/mysql # 数据目录
environment: # 环境变量
MYSQL_ROOT_PASSWORD: root # 设置MySQL的root密码为root
networks: # 网络配置
- ems # 连接到名为ems的网络
depends_on: # 依赖服务
- redis # 依赖于redis服务
redis: # Redis服务
image: redis:4.0.14 # 使用的Redis镜像版本
container_name: redis # 容器名称
ports: # 端口映射
- "6379:6379" # 将容器的6379端口映射到宿主机的6379端口
networks: # 网络配置
- ems # 连接到名为ems的网络
volumes: # 数据卷挂载
- /root/redis/data:/data # 数据目录
command: redis-server # 启动Redis服务器的命令
networks: # 定义网络
ems: # 名为ems的网
启动指定的文件
docker-compose -f docker-compose.yaml up -d //-f调用文件。-d:开启守护进程
Docker Compose 常用命令
docker --version #查看版本
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose up <serviceName> -d # 启动所有docker-compose服务并后台运行【如: docker-compose up saas-jmall-server-run-manage -d】
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程【停止指定服务如: docker-compose stop saas-jmall-server-run-manage 】
docker-compose logs yml里面的服务id # 查看容器输出日志
docker-compose config # 检查配置
docker-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
docker-compose rm [options] [SERVICE...] #删除所有(停止状态的)服务容器。
docker常用命令
# 查看docker版本
docker version
# 显示docker系统的信息
docker info
# 日志信息
docker logs
# 故障检查
service docker status
# 启动关闭docker
sudo service docker start|stop
docker logs -f <容器名orID>
# 查看容器信息
# 查看当前运行的容器
docker ps
# 查看全部容器
docker ps -a
# 查看全部容器的id和信息
docker ps -a -q
# 查看全部容器占用的空间
docker ps -as
# 查看一个正在运行容器进程,支持 ps 命令参数
docker top
# 查看容器的示例id
sudo docker inspect -f '{{.Id}}' [id]
# 检查镜像或者容器的参数,默认返回 JSON 格式
docker inspect
# 返回 ubuntu:14.04 镜像的 docker 版本
docker inspect --format '{{.DockerVersion}}' ubuntu:14.04
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ubuntu:14.04
# 容器同步命令
# 保存对容器的修改
docker commit
# 保存某个容器成为一个镜像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 推送一个容器到中心仓库
docker login --username=[userName] --password=[pwd] [registryURL]
## 建议登录后查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器
docker pull [remoteURL]:[imageTag]
# 对比容器的改动
docker diff
# 附加到一个运行的容器上
docker attach
# 容器操作命令
# 创建删除容器
# 创建一个容器命名为 test 使用镜像daocloud.io/library/ubuntu
docker create -it --name test daocloud.io/library/ubuntu
# 创建并启动一个容器 名为 test 使用镜像daocloud.io/library/ubuntu
docker run --name test daocloud.io/library/ubuntu
# 删除一个容器
docker rm [容器id]
# 删除所有容器
docker rm `docker ps -a -q`
# 根据Dockerfile 构建
docker build -t [image_name] [Dockerfile_path]
# docker容器随系统自启
docker run --restart=always
(no – 默认值,如果容器挂掉不自动重启
on-failure – 当容器以非 0 码退出时重启容器,同时可接受一个可选的最大重启次数参数 (e.g. on-failure:10).
always – 不管退出码是多少都要重启)
# 容器资源限制参数
docker start|stop|restart [id]
# 暂停|恢复 某一容器的所有进程
docker pause|unpause [id]
# 杀死一个或多个指定容器进程
docker kill -s KILL [id]
# 停止全部运行的容器
docker stop `docker ps -q`
# 杀掉全部运行的容器
docker kill -s KILL `docker ps -q`
实战
1,拉取对应镜像
# 拉取最小jdk
docker pull frolvlad/alpine-java:jdk8-slim
# 拉取jre docker 镜像
docker pull frolvlad/alpine-j
2,配置docker-compose.yml
version: "3.0"
services:
saas-jmall-server-run-manage:
# 指定容器名称
container_name: saas-jmall-server-run-manage
# 所用镜像
image: frolvlad/alpine-java:jdk8-slim
# 宿主机目录
working_dir: /app
# 启动机制
restart: always
network_mode: host
# 暴露的端口
expose:
- 8812
environment:
# 指定时区
- TZ=Asia/Shanghai
# 数据卷挂载
volumes:
# 挂载本地路径
- /data/app:/app
entrypoint: nohup java -Xms256m -Xmx512m -jar -Dserver-addr=10.88.88.88:8848 -Dspring.profiles.active=dev -Dgroup=jmall_native_dev -Dnamespaces=4564654b12-cfd1-4b79-b1d2-b230012f3b59 saas-jmall-server-run-manage.jar >/dev/null 2>&1 &
3,启动/ 停止指定service
启动:docker-compose up saas-jmall-server-run-manage -d
停止:docker-compose stop saas-jmall-server-run-manage
进微信交流群可联系V:q1227260341,备注加java群