解锁容器化世界:docker-compose实现一键自动部署

本文介绍了如何安装docker-compose,以及如何通过docker-compose.yml文件进行docker应用的配置和实践,包括服务依赖、端口映射、日志管理、探针设置及常用docker-compose命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

上文说到了docker部署springboot程序,在我们的实际环境当中,可能有上百个微服务,难道每个微服务都需要docker run吗。docker官方给我们提供个一个自动化部署:docker-compose,通过docker-compose我们一键部署我们想部署的所有应用,可以理解为docker-compose是一个服务部署编排的功能。

Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式) 中定义一组相关联的应用容器( 被称为一个project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等。

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排

一、docker-compose安装

在使用docker-compose之前,我们需要先安装docker,docker的安装流程请戳:
解锁容器化世界:docker快速安装

最简单的安装方式
1.下载安装包

sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

下载完成之后,不需要解压,因为下载的本来就是文件夹。
2,赋予文件夹权限

sudo chmod +x /usr/local/bin/docker-compose

3,验证安装

docker-compose --version

离线版本安装
docker-compose官方git地址:

https://github.com/docker/compose/releases/

在这里插入图片描述
下载下来,直接传到/usr/local/bin目录下即可。

二、docker-compose实践

docker-compose自动部署docker程序是依赖docker-compose.yml文件
1,先创建yml配置文件

version: '3'

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      - /opt/mysql:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - "6379:6379"
    volumes:
      - /opt/redis:/data

  kafka:
    image: wurstmeister/kafka:latest
    depends_on: 
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9093,OUTSIDE://localhost:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
  zookeeper:
    image: wurstmeister/zookeeper:latest
    ports:
      - "2181:2181"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.15.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
  nacos:
    image: nacos/nacos-server
    environment:
      - MODE=standalone
    ports:
      - "8848:8848"
  system-biz:
    image: system-biz:1.0.1
    depends_on:
      - mysql
      - redis
      - nacos
      - elasticsearch
      - seaweedfs_master
      - kafka
    environment:
      - TZ=Asia/Shanghai
      - NACOS=-Dspring.cloud.nacos.config.server-addr=nacos:8848 -Dspring.cloud.nacos.discovery.server-addr=nacos:8848 -Dspring.cloud.nacos.config.password=nacos -Dspring.cloud.nacos.config.username=nacos -Dspring.cloud.nacos.discovery.username=nacos -Dspring.cloud.nacos.discovery.password=nacos
      - JAVA_OPTS=-Dserver.port=8080 -Xms1G -Xmx1G -Dspring.profiles.active=dev    -Duser.timezone=Asia/Shanghai
      - AGENT=-javaagent:skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=system-biz
    ports:
      - "10025:8080"
    volumes:
      - /opt/docker/system-biz:/app/logs

yml文件配置避免踩坑指南

  • YAML数据结构通过缩进来表示(要用空格,不要用换行符,yml文件对换行符敏感)
  • 连续的项目通过减号来表示
  • 键值对用冒号分隔
  • 数组用中括号 [ ] 括起来
  • 注意大小写

比如:

name:
 - 阿里巴巴
 - 滴滴
 - 美团

 name: ["zhangsan", "lisi", "wangwu"]

1.docker-compose配置详解

image:要启动的镜像
depends_on:该镜像需要依赖的镜像,即启动的先后顺序,比如说nacos依赖于mysql,需要mysql先启动成功后,才会启动nacos
ports:端口映射,前面为宿主机的端口,后面为容器的端口。
volumes:容器卷的挂载
在这里插入图片描述
上文中提到过一个问题,我们想看容器里的日志的时候,需要每次都进入到容器查看吗?答案肯定不是,可以利用容器卷的挂载,比如说上图中:/app/logs为容器里面,springboot应用所产生的日志,我们将他挂载到了宿主机的/opt/docker目录下面,以后需要看日志的时候,可以直接进入到宿主记得/opt/docker目录下查看

2.常见问题

1,当我们的springboot应用需要挂载探针时怎么办?
可以将探针打到镜像里面去,然后通过配置Dockerfile参数来指定探针的位置。
提供一个DockerFile万能模板,可以无脑使用:

FROM openjdk:8

ADD *.jar /app/
ADD skywalking-agent/ /app/skywalking-agent/
WORKDIR /app/

CMD ["sh","-c","java $NACOS $AGENT  $JAVA_OPTS  -jar *.jar"]




与上线的yml文件可配套使用。

2,docker常用指令
启动服务

docker-compose up -d

停止服务

docker-compose down

列出所有运行容器

docker-compose ps

查看服务日志

docker-compose logs

构建或者重新构建服务

docker-compose build

启动服务

docker-compose start

停止已运行的服务

docker-compose stop

重启服务

docker-compose restart

总结

docker-compose实现在单机上完成容器集群的编排管理单机容器编排
使用 docker-compose可以完成多个docker run的所有操作。
补充:容器重启策略

  • never,默认策略,在容器退出时不重启容器。
  • on-failure,在容器非正常退出时(退出状态非0),才会重启容器。
  • on-failure:3,在容器非正常退出时重启容器,最多重启3次。
  • always,在容器退出时总是重启容器(中间件常用)
  • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
### 使用 Docker 部署 Jenkins 的详细步骤 #### 1. 安装并验证 DockerDocker Compose 在开始之前,确保已经正确安装了 DockerDocker Compose。可以通过以下命令来测试安装是否成功: ```bash docker --version docker-compose --version ``` 如果显示版本号,则说明安装正常[^1]。 --- #### 2. 拉取 Jenkins 官方镜像 使用 `docker pull` 命令从官方仓库中拉取 Jenkins 镜像: ```bash docker pull jenkins/jenkins ``` 此操作会下载最新版的 Jenkins 镜像至本地环境。 --- #### 3. 创建工作目录 为了持久化存储 Jenkins 数据,在主机上创建一个专门的工作目录: ```bash mkdir -p /usr/local/docker/jenkins cd /usr/local/docker/jenkins ``` 该路径下的数据会被挂载到容器内的 `/var/jenkins_home/` 路径下,从而实现配置和构建历史的保存。 --- #### 4. 编写 `docker-compose.yml` 文件 在当前目录下新建名为 `docker-compose.yml` 的文件,并填入如下内容: ```yaml version: "3.1" services: jenkins: image: jenkins/jenkins container_name: jenkins ports: - "8080:8080" # Web UI端口映射 - "50000:50000" # Agent通信端口映射 volumes: - ./data/:/var/jenkins_home/ # 数据卷挂载 ``` 上述配置定义了一个服务名称为 `jenkins` 的容器实例,指定了所需的端口映射以及数据卷绑定。 --- #### 5. 启动 Jenkins 容器 执行以下命令以基于 `docker-compose.yml` 文件启动 Jenkins 容器: ```bash docker-compose up -d ``` 参数 `-d` 表示以后台模式运行容器。此时可以访问浏览器输入地址 `http://<your-server-ip>:8080` 来查看 Jenkins 初始化界面。 --- #### 6. 获取初始管理员密码 首次启动时,需要获取初始化密码解锁 Jenkins。通过以下命令提取密码: ```bash docker logs jenkins | grep Unlocking ``` 或者直接读取日志文件中的部分内容: ```bash cat $(docker inspect --format='{{range .Mounts}}{{if eq .Destination "/var/jenkins_home"}}{{.Source}}{{end}}{{end}})/secrets/initialAdminPassword ``` 完成解密后按照提示设置用户名、密码以及其他基础配置项。 --- #### 7. 插件安装与配置 建议安装一些常用的插件以便更好地支持 CI/CD 流程,例如: - **Maven Integration**: 支持 Maven 构建工具。 - **Publish Over SSH**: 将打包后的 JAR/WAR 文件传输至目标服务器。 - **Gitee/Git Plugin**: 实现代码库同步功能[^2]。 这些插件能够显著提升工作效率,满足不同场景需求。 --- #### 8. 自动化 Java 项目部署流程 利用 Jenkins 可以轻松实现 Git 提交触发自动化构建的功能。以下是典型的一键式构建方案概述: 1. 添加源码管理(Git 或其他 SCM 工具); 2. 设置构建触发条件(如定时任务或监听远程推送事件); 3. 制定具体的编译脚本(通常依赖于项目的 `pom.xml` 文件),并通过 Shell/Maven 等方式执行; 4. 成功完成后将生成的可执行文件推送到指定位置运行[^3]。 --- ### 总结 以上即为完整的 Docker 下 Jenkins 部署指南及其基本用途介绍。借助这一方法不仅简化了传统手动搭建复杂度高的问题,还提供了跨平台一致性的优势[^4]^。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值