docker自动化部署示例

  • 前提
    安装docker 、 docker-cpmpose、git、打包环境(如meaven、jdk、node等)

  • 原理
    git + Dockerfile + docker-compose

  1. 获取源码(代码仓库)
  2. 获取可运行程序的镜像(docker)
  3. 将打包后的程序放入镜像内(Dockerfile)
  4. 创建容器并启动 (docker-compose)

拉取代码

创建GIT仓库:

git init

添加远程仓库:

git remote add origin https://github.com/username/xxxx.git

拉取远程仓库的代码 :
拉取master分支到本地源(origin)

git pull origin master

下面会提示输入 git账户信息

记住git账号密码

永久记住账号密码:
在下次输入账号密码后会记住

git config --global credential.helper store

docker 部署

  • 先拉取一个镜像
docker pull openjdk:8-jdk

镜像查找:https://hub-stage.docker.com/search

编写Dockerfile文件

使用时去掉注释,否则可能出现格式问题

FROM openjdk:8-jdk   # 选择合适的OpenJDK版本(运行环境)

MAINTAINER 775505736@qq.com # 作者信息

RUN mkdir -p /notice-server # 在容器内创建一个文件夹

WORKDIR /notice-server # 指定工作目录(容器内目录)

ADD ./target/boo-notice-server-2.1.jar ./ #将当前目录(宿主机)中的文件复制到容器工作目录下


CMD java -jar boo-notice-server-2.1.jar > ./log/$(date  +%Y%m%d%H%M)_run_log.txt #在容器工作目录运行脚本 将控制台内容打印到日志文件中 

问题:
原运行脚本:

nohup java -jar boo-notice-server-2.1.jar > ./log/$(date  +%Y%m%d%H%M)_run_log.txt 2>&1 &

在Dockerfile中使用

CMD nohup java -jar boo-notice-server-2.1.jar > ./log/$(date  +%Y%m%d%H%M)_run_log.txt 2>&1 &

启动容器时容器状态一直为启动中 ,改为

CMD java -jar boo-notice-server-2.1.jar > ./log/$(date  +%Y%m%d%H%M)_run_log.txt

正常

编写docker-compose.yaml文件

version: '3'
services:
  boo-notice-server:
    build:
      context: ./notice-server # 指定目录
    restart: always
    container_name: boo-notice-server
    image: boo-notice-server
    volumes:
        - /www/server/box/docker/server/logs/boo-notice-server:/notice-server/log

执行

docker-compose up -d --build boo-notice-server

扩展

配置yum国内镜像源

  1. 进入到/etc/yum.repos.d目录下
    在这里插入图片描述
  2. 新建一个yum源文件的配置文件
vim /etc/yum.repos.d/aliyun_yum.repo

内容:

[ali_baseos]
name=ali_baseos
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/BaseOS/x86_64/os/
gpgcheck=0

[ali_appstream]
name=ali_appstream
baseurl=https://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/
gpgcheck=0
  1. 重新下载缓存镜像源安装包
yum makecache
  1. 更新镜像源安装包缓存
yum -y update

linux安装Git

通过yum安装

对于 Centos 系统来讲,直接执行如下命令即可安装

yum install git-core

验证Git

git --version

git常用命令

  • 从 Git 远程仓库拉取分支
   git fetch	 # 从远程仓库获取最新的分支信息,但不会自动合并到本地分支。
   git branch -r   # 查看远程分支
   git checkout -b local_branch_name origin/remote_branch_name	 # 拉取特定远程分支并创建本地跟踪分支(假设要拉取的远程分支名为 remote_branch_name)
可能出现的问题
  • 使用git命令的时候报错:symbol lookup error: git: undefined symbol: pcre2_maketables_free_8
    在这里插入图片描述

如果在 CentOS 系统上遇到了类似 symbol lookup error: git: undefined symbol: pcre2_maketables_free_8 的问题,这通常是因为 PCRE2 库的符号解析问题所致。以下是解决该问题的步骤:

  1. 检查 PCRE2 库的安装
    首先确保 PCRE2 库已经正确安装在你的系统上。
sudo yum install pcre2-devel

这条命令会安装 PCRE2 开发包,其中包含了必要的库文件和头文件供程序链接使用。

  1. 更新动态链接库缓存
    安装完 PCRE2 开发包后,你需要更新动态链接库的缓存,使得系统能够正确找到新安装的库。
sudo ldconfig

这条命令会更新系统的动态链接库路径,确保新安装的库可以被正确加载。
3. 重试git命令

通过源码编译安装(推荐)

卸载旧版本 git

yum remove git

要安装新版本的 git,需要自行下载 git 源码来编译安装。

wget https://codeload.github.com/git/git/tar.gz/refs/tags/v2.30.2

docker 配置

设置容器自动启动

  • 使用--restart参数
    在启动容器时,可以通过docker run命令的–restart参数来指定容器的重启策略,从而实现容器的开机自启动。–restart参数可以接受以下几个值:
    no:不自动重启容器(默认值)。
    always:容器退出时总是重启。
    on-failure[:max-retries]:容器以非零状态码退出时重启,可以指定最大重试次数(如果不指定,则无限重试)。
    unless-stopped:无论退出状态如何,总是重启容器,但当容器被手动停止时不重启。

    • 例如,使用以下命令启动一个总是自动重启的Nginx容器:
    docker run -d --restart always <容器ID或名称>
    
    • 如果容器已经运行,但之前没有设置自动重启,可以使用docker update命令来更新重启策略:
    docker update --restart=always <容器ID或名称>
    

设置开机自启

开机运行tomcat

linux设置tomcat开机自启动

开机运行指定脚本

  • 使用crontab的@reboot选项

    1. 打开终端,输入
    crontab -e
    
    1. 然后添加以下行
    @reboot /path/to/your/script.sh
    

    保存并退出编辑器

    1. 重新载入配置
      运行命令
    service crond reload 
    
    1. 查看设置结果
    crontab -l
    

    脚本将在重启时运行。

  • 在/etc/profile.d/下写.sh文件

    1. 进入 /etc/profile.d/ 目录并创建.sh脚本
    2. 在脚本里写要开机执行的脚本、程序或命令(注意写全路径)
    3. 保存退出,可执行权限
### Jenkins 和 GitLab 实现 Docker自动化部署 #### 1. 安装必要的工具和服务 为了实现基于 Jenkins 和 GitLab 的 Docker 自动化部署,首先需要确保环境已经准备好。这包括安装 Docker 引擎以及相关依赖项。 可以通过以下命令完成 Docker 引擎的安装: ```bash sudo apt update && sudo apt upgrade -y sudo apt install docker-ce docker-ce-cli containerd.io -y ``` 此操作会安装最新的稳定版本的 Docker 引擎[^1]。 #### 2. 配置 Jenkins 插件支持 在 Jenkins 中,需安装一系列插件来支持与 GitLab 和 Docker 的集成: - **Credentials**: 管理签名证书和其他凭证。 - **GitLab Plugin**: 支持从 GitLab 获取代码并触发流水线。 - **Git and Git Client Plugins**: 提供对 Git 版本控制的支持。 - **Publish Over SSH**: 使用 SSH 协议远程执行脚本来部署应用程序。 - **Maven Integration Plugin**: 如果项目涉及 Maven 构建,则可以利用该插件简化流程。 - **Docker Plugin**: 将 Jenkins 工作流扩展至容器环境中运行任务。 - **docker-build-step Plugin**: 添加自定义 `docker` 命令作为构建阶段的一部分。 - **Yet Another Docker Plugin**: 提供额外功能以增强 Docker 资源供给能力。 - **Git Parameter Plugin**: 动态选择分支、标签或其他提交记录进行处理[^3]。 这些插件共同构成了完整的 CI/CD 生态圈。 #### 3. 创建 Java Spring Boot 项目的 Dockerfile 对于典型的 Spring Boot 应用程序来说,其对应的 `Dockerfile` 文件通常位于根目录下并与源文件处于同一级别位置。下面是一个简单的例子说明如何编写这样的镜像描述文档: ```dockerfile FROM openjdk:17-jdk-slim AS build-stage WORKDIR application COPY . . RUN ./mvnw package -DskipTests FROM openjdk:17-jre-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY --from=build-stage /application/target/myapp.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 上述示例展示了两步式的构建过程——先编译再打包成最终可执行形式;同时指定了启动参数以便优化性能表现[^4]。 #### 4. 设置持续交付管道 (Pipeline) 最后一步就是定义具体的 pipeline 行为逻辑。这里给出一段 Groovy 脚本片段示意整个工作链条是如何串联起来的: ```groovy pipeline { agent any stages { stage('Checkout') { steps { git branch: 'main', url: 'https://gitlab.com/<your-repo>.git' } } stage('Build Image') { steps { script { def imageName = "my-app:${env.BUILD_ID}" sh """ docker rmi ${imageName} || true docker build -t ${imageName} . """ } } } stage('Test & Push') { steps { withCredentials([usernamePassword(credentialsId: '<credential-id>', usernameVariable: 'USER', passwordVariable: 'PASSWD')]) { sh ''' echo "${PASSWD}" | docker login registry.gitlab.com -u $USER --password-stdin docker push my-app:$BUILD_ID ''' } cleanWs() } } stage('Deploy') { when { expression { env.DEPLOY_ENVIRONMENT ==~ /^(staging|production)$/ } } steps { sshPublisher( publishers: [ sshPublisherDesc( configName: "<server-config>", transfers: [sshTransfer(cleanRemote: false, sourceFiles: "/path/to/deploy.sh")], usePromotionTimestamp: false, verbose: true ) ] ) sh '/bin/bash deploy.sh start' } } } } ``` 这段脚本涵盖了从检出代码到测试验证再到实际推送更新直至正式上线全过程中的各个重要环节[^2]^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值