【CI/CD】基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

news2024/11/22 14:08:54

基于 Jenkins+Docker+Git 的简单 CI 流程实践(上)

在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是 持续集成持续交付、部署。在此,我们在京东云上以一个案例简单实践下 CI 流程。

1.相关概念及工具介绍

1.1 CI/CD

持续集成(Continuous Integration,CI),它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。

持续交付(Continuous Delivery,CD),通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后 由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。

持续部署(Continuous Deployment,CD),这是另一种 “CD”,指的是 自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。

1.2 Jenkins

Jenkins 是一个开源软件项目,是基于 Java 开发的一种 持续集成 工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

1.3 Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.4 Git

Git 是一个开源的分布式版本控制系统,提供代码仓库,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 L i n u s   T o r v a l d s Linus\ Torvalds Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

2.前期准备

2.1 CI 流程设计图

在这里插入图片描述

2.2 工作流程

  • 开发人员提交代码到 Git 版本仓库。
  • Jenkins 人工/定时触发项目构建。
  • Jenkins 拉取代码、代码编译、打包镜像、推送到镜像仓库。
  • Jenkins 在 Docker 主机创建容器并发布。

在这里插入图片描述

2.3 主机环境规划

主机名称介绍公网内网
docker-jenkins项目构建;拉取代码、代码编译、打包镜像、推送镜像到镜像仓库116.196.85.17410.0.0.20
docker-git代码仓库116.196.86.20710.0.0.22
docker-harbor私有镜像仓库116.196.88.9110.0.0.21
buildimagebuild docker 镜像116.196.89.13910.0.0.4

3.主机创建

在京东云控制台创建4台云主机,地址:https://console.jdcloud.com/

配置如下,购买时数量直接选择 4 4 4,购买完成后再修改名称,分别为:docker-jenkinsdocker-gitdocker-harborbuildimage

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建、修改名称后如下:

在这里插入图片描述

4.环境配置

4.1 云主机 docker-git

(1)修改主机名为:docker-git

[root@112 ~]# hostnamectl set-hostname docker-git
[root@112 ~]# hostname  docker-git
[root@112 ~]# logout
[root@docker-git ~]#

Ctrl+D 退出后重新登陆生效。

(2)部署 Git 代码版本仓库

安装:

[root@docker-git ~]# yum install git -y

配置 git 用户:

[root@docker-git ~]# useradd git
[root@docker-git ~]# passwd git

在这里插入图片描述

创建库:

[root@docker-git ~]# su git
[git@docker-git root]$ cd
[git@docker-git ~]$ mkdir tomcat-java-demo.git
[git@docker-git ~]$ cd tomcat-java-demo.git/
[git@docker-git tomcat-java-demo.git]$ git --bare init
Initialized empty Git repository in /home/git/tomcat-java-demo.git/
[git@docker-git tomcat-java-demo.git]$ ls
branches  config  description  HEAD  hooks  info  objects  refs
[git@docker-git tomcat-java-demo.git]$ 

在这里插入图片描述

4.2 云主机 docker-jenkins

(1)修改主机名为:docker-jenkins

[root@113 ~]# hostnamectl set-hostname docker-jenkins
[root@113 ~]# hostname  docker-jenkins
[root@113 ~]# logout
[root@docker-jenkins ~]#

Ctrl+D 退出后重新登陆生效。

(2)jenkins 环境部署

部署 jdk 环境及 maven

[root@docker-jenkins tomcat-java-demo]# cd
[root@docker-jenkins ~]# mkdir tools
[root@docker-jenkins ~]# cd tools
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jdk-8u191-linux-x64.tar.gz;tar zxf jdk-8u191-linux-x64.tar.gz;mv jdk1.8.0_191/ /usr/local/;ln -s /usr/local/jdk1.8.0_191/ /usr/local/jdk;
[root@docker-jenkins tools]# vim /etc/profile
######## JDK #######
JAVA_HOME=/usr/local/jdk1.8.0_191
JAVA_BIN=/usr/local/jdk1.8.0_191/bin
PATH=$PATH:$JAVA_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@docker-jenkins tools]# source /etc/profile
[root@docker-jenkins tools]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) 
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-maven-3.5.0-bin.tar.gz;tar zxf apache-maven-3.5.0-bin.tar.gz;mv apache-maven-3.5.0 /usr/local/maven
[root@docker-jenkins tools]# 

安装 Jenkins,下载 Tomcat 二进制包,将 war 包移动到 webapps 下即可。

[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jenkins.war
[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-tomcat-8.5.38.tar.gz
[root@docker-jenkins tools]# tar zxf apache-tomcat-8.5.38.tar.gz
[root@docker-jenkins tools]# ls
apache-maven-3.5.0-bin.tar.gz  apache-tomcat-8.5.38  apache-tomcat-8.5.38.tar.gz  jdk-8u191-linux-x64.tar.gz  jenkins.war
[root@docker-jenkins tools]# mv apache-tomcat-8.5.38 /usr/local/tomcat-jenkins
[root@docker-jenkins tools]# ls /usr/local/tomcat-jenkins/webapps/
docs  examples  host-manager  manager  ROOT
[root@docker-jenkins tools]# rm -rf /usr/local/tomcat-jenkins/webapps/*
[root@docker-jenkins tools]# mv jenkins.war /usr/local/tomcat-jenkins/webapps/ROOT.war
[root@docker-jenkins tools]# ll /usr/local/tomcat-jenkins/webapps/
total 75520
-rw-r--r--. 1 root root 77330344 Mar 15 00:55 ROOT.war
[root@docker-jenkins tools]# cd /usr/local/tomcat-jenkins/bin/
[root@docker-jenkins bin]# ./startup.sh
Using CATALINA_BASE:   /usr/local/tomcat-jenkins
Using CATALINA_HOME:   /usr/local/tomcat-jenkins
Using CATALINA_TMPDIR: /usr/local/tomcat-jenkins/temp
Using JRE_HOME:        /usr/local/jdk1.8
Using CLASSPATH:       /usr/local/tomcat-jenkins/bin/bootstrap.jar:/usr/local/tomcat-jenkins/bin/tomcat-juli.jar
Tomcat started.
[root@docker-jenkins bin]#

启动后,浏览器访问(docker-jenkins):http://Jenkins主机公网IP:8080/,按提示输入密码,登录即可。

/root/.jenkins/secrets/initialAdminPassword 文件里,查看密码后填入即可。

在这里插入图片描述
按照你自己的需求安装插件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
设置管理员。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开始使用 Jenkins

在这里插入图片描述
(3)安装 DOCKER CE(Docker 的社区版)

安装所需包:

yum install -y yum-utils device-mapper-persistent-data lvm2 -y

设置稳定存储库:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y

安装 DOCKER CE(这一步比较慢,耐心等会儿!):

yum install docker-ce docker-ce-cli containerd.io -y

启动 Docker

systemctl start docker

4.3 云主机 docker-harbor

(1)修改主机名为:docker-harbor

[root@c-dfjgjesgqe ~]# hostnamectl set-hostname docker-harbor
[root@c-dfjgjesgqe ~]# hostname  docker-harbor

Ctrl+D 退出后重新登陆生效。

(2)企业级 Harbor 镜像仓库部署

Habor 是由 VMWare 公司开源的容器镜像仓库。事实上,Habor 是在 Docker Registry 上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面基于角色的访问控制AD/LDAP 集成 以及 审计日志 等,足以满足基本企业需求。

Harbor 各组件介绍:

组件功能
harbor-adminserver配置管理中心
harbor-dbMySQL 数据库
harbor-jobservice负责镜像复制
harbor-log记录操作日志
harbor-uiWeb 管理页面和 API
nginx前端代理,负责前端页面和镜像上传 / 下载转发
redis会话
registry镜像存储

Harbor 安装有 3 3 3 种方式

  • 在线安装:从 Docker Hub 下载 Harbor 相关镜像,因此安装软件包非常小。
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大。
  • OVA 安装程序:当用户具有 vCenter 环境时,使用此安装程序,在部署 OVA 后启动 Harb。

在此我们使用第二种离线安装方式来搭建基于 https 访问的 harbor 镜像仓库。

1)下载并解压离线安装包

harbor 离线包下载地址:https://github.com/goharbor/harbor/releases

为方便下载,我在京东云对象存储上也存了一份,可直接 wgethttps://pocenv-hcc.oss.cn-north-1.jcloudcs.com/harbor-offline-installer-v1.7.4.tgz

[root@docker-harbor ~]# yum install vim wget openssl -y
[root@docker-harbor ~]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/harbor-offline-installer-v1.7.4.tgz
[root@docker-harbor ~]# tar zxf harbor-offline-installer-v1.7.4.tgz
[root@docker-harbor ~]# cd harbor
[root@docker-harbor harbor]# ll
total 570744
drwxr-xr-x 3 root root        23 Apr  1 15:05 common
-rw-r--r-- 1 root root       939 Mar  4 15:33 docker-compose.chartmuseum.yml
-rw-r--r-- 1 root root       975 Mar  4 15:33 docker-compose.clair.yml
-rw-r--r-- 1 root root      1434 Mar  4 15:33 docker-compose.notary.yml
-rw-r--r-- 1 root root      5608 Mar  4 15:33 docker-compose.yml
-rw-r--r-- 1 root root      8033 Mar  4 15:33 harbor.cfg
-rw-r--r-- 1 root root 583086399 Mar  4 15:33 harbor.v1.7.4.tar.gz
-rwxr-xr-x 1 root root      5739 Mar  4 15:33 install.sh
-rw-r--r-- 1 root root     11347 Mar  4 15:33 LICENSE
-rw-r--r-- 1 root root   1263409 Mar  4 15:33 open_source_license
-rwxr-xr-x 1 root root     36337 Mar  4 15:33 prepare

2)自签 http 证书

获取权威认证证书。

[root@docker-harbor harbor]# mkdir ssl
[root@docker-harbor harbor]# cd ssl
[root@docker-harbor ssl]# openssl genrsa -out ca.key 4096
Generating RSA private key, 4096 bit long modulus
...................................++
.....................................................................................................................................++
e is 65537 (0x10001)
[root@docker-harbor ssl]# openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com" -key ca.key -out ca.crt
[root@docker-harbor ssl]# ll
total 8
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key

获取服务端证书。

1.Create your own Private Key:
[root@docker-harbor ssl]# openssl genrsa -out reg.marin.com.key 4096
Generating RSA private key, 4096 bit long modulus
.............................................++
............................................................................................................................................................................................................................++
e is 65537 (0x10001)
[root@docker-harbor ssl]# openssl req -sha512 -new -subj "/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com" -key reg.marin.com.key -out reg.marin.com.csr
[root@docker-harbor ssl]# ll
total 16
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key
-rw-r--r-- 1 root root 1708 Apr  4 18:42 reg.marin.com.csr
-rw-r--r-- 1 root root 3243 Apr  4 18:42 reg.marin.com.key
[root@docker-harbor ssl]# cat > v3.ext <<-EOF
> authorityKeyIdentifier=keyid,issuer
> basicConstraints=CA:FALSE
> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
> extendedKeyUsage = serverAuth
> subjectAltName = @alt_names
> 
> [alt_names]
> DNS.1=reg.marin.com
> DNS.2=reg.marin
> DNS.3=marin
> EOF
[root@docker-harbor ssl]# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in reg.marin.com.csr -out reg.marin.com.crt
Signature ok
subject=/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com
Getting CA Private Key
[root@docker-harbor ssl]# ll
total 28
-rw-r--r-- 1 root root 2037 Apr  4 18:41 ca.crt
-rw-r--r-- 1 root root 3243 Apr  4 18:41 ca.key
-rw-r--r-- 1 root root   17 Apr  4 18:44 ca.srl
-rw-r--r-- 1 root root 2098 Apr  4 18:44 reg.marin.com.crt
-rw-r--r-- 1 root root 1708 Apr  4 18:42 reg.marin.com.csr
-rw-r--r-- 1 root root 3243 Apr  4 18:42 reg.marin.com.key
-rw-r--r-- 1 root root  260 Apr  4 18:43 v3.ext

修改 harbor 配置,以及为 Docker 配置服务端证书,keyCA

[root@docker-harbor ssl]# cd ..
[root@docker-harbor harbor]# vim harbor.cfg
......
hostname = reg.marin.com
ui_url_protocol = https
ssl_cert = ./ssl/reg.marin.com.crt
ssl_cert_key = ./ssl/reg.marin.com.key
harbor_admin_password = 123456
......

密码也可以不修改,默认登录用户:admin,密码:Harbor12345

Docker 守护进程会将 .crt 文件解释为 CA 证书,将 .cert 文件解释为客户机证书,先将 .crt 文件转换一份 .cert 文件。

[root@docker-harbor harbor]# cd ssl/
[root@docker-harbor ssl]# mkdir -p /etc/docker/certs.d/reg.marin.com
[root@docker-harbor ssl]# openssl x509 -inform PEM -in reg.marin.com.crt -out reg.marin.com.cert
[root@docker-harbor ssl]# cp reg.marin.com.cert reg.marin.com.key ca.crt /etc/docker/certs.d/reg.marin.com/

到此自签成功!

3)安装 DOCKER CE

安装所需包:

yum install -y yum-utils device-mapper-persistent-data lvm2 -y

设置稳定存储库:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y

在这里插入图片描述

安装 DOCKER CE(这一步比较慢,耐心等会儿!):

yum install docker-ce docker-ce-cli containerd.io -y

在这里插入图片描述

启动 Docker

systemctl start docker

通过运行 hello-world 镜像验证是否正确安装了 Docker CE

docker run hello-world

在这里插入图片描述
4)初始化及安装验证

初始化安装:

[root@docker-harbor ssl]# 
[root@docker-harbor ssl]# cd ..
[root@docker-harbor harbor]# ./prepare
Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/core/env
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/config.yml
Generated configuration file: ./common/config/log/logrotate.conf
Generated configuration file: ./common/config/registryctl/env
Generated configuration file: ./common/config/core/app.conf
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.

执行 install.sh 脚本,安装 harbor 仓库。

注意:在执行 install.sh 脚本之前,先检查两个问题:

  • docker-compose 是否安装,否则在运行 install.sh 时会失败,报错 “✖ Need to install docker-compose(1.7.1+) by yourself first and run this script again.”
  • docker 服务是否正常运行,否则在运行 install.sh 会失败,报错 “Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”

安装 Compose

运行此命令以下载 Docker Compose 的当前稳定版本:

curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

对二进制文件应用可执行权限:

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

执行 install.sh 脚本,安装 harbor 仓库:

[root@docker-harbor harbor]# ./install.sh

[Step 0]: checking installation environment ...

Note: docker version: 18.09.4

Note: docker-compose version: 1.24.0

[Step 1]: loading Harbor images ...
bffe2a0fec66: Loading layer [==================================================>]  33.22MB/33.22MB
38e174bed467: Loading layer [==================================================>]  8.964MB/8.964MB
427e4936ae66: Loading layer [==================================================>]  35.77MB/35.77MB
3bfd5214250a: Loading layer [==================================================>]  2.048kB/2.048kB
f30df776629d: Loading layer [==================================================>]  3.072kB/3.072kB
f87afad43f43: Loading layer [==================================================>]   22.8MB/22.8MB
......
953717aa0afc: Loading layer [==================================================>]   22.8MB/22.8MB
Loaded image: goharbor/registry-photon:v2.6.2-v1.7.4


[Step 2]: preparing environment ...
Clearing the configuration file: ./common/config/adminserver/env
Clearing the configuration file: ./common/config/core/env
Clearing the configuration file: ./common/config/core/app.conf
Clearing the configuration file: ./common/config/core/private_key.pem
Clearing the configuration file: ./common/config/db/env
......
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.


[Step 3]: checking existing instance of Harbor ...


[Step 4]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating redis              ... done
Creating registryctl        ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating registry           ... done
Creating harbor-core        ... done
Creating harbor-jobservice  ... done
Creating harbor-portal      ... done
Creating nginx              ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at https://reg.marin.com. 
For more details, please visit https://github.com/goharbor/harbor .

在这里插入图片描述
浏览器访问验证。

浏览器访问要做域名解析,在本地 hostsC:\Windows\System32\drivers\etc\hosts)文件中加入:116.196.88.91 reg.marin.com

在这里插入图片描述
访问:https://reg.marin.com,并登录。

在这里插入图片描述
登录后界面基本操作:

  • 新建项目 test

在这里插入图片描述

  • 新建用户 marin

在这里插入图片描述

  • 将用户 marin 设置为 test 项目管理员。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/871759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用对角线去遍历矩阵

原题链接 用对角线遍历矩阵https://leetcode.cn/leetbook/read/array-and-string/cuxq3/ 算法分析 图一 图二 图三 图四 由上述四个图可以总结得出以下八个结论&#xff1a; 结论1&#xff1a;k属于[0,a(max)b(max)]。 结论2&#xff1a;每一层遍历行最多存在min(m,n)个矩…

深度学习实战基础案例——卷积神经网络(CNN)基于SqueezeNet的眼疾识别|第1例

文章目录 前言一、数据准备1.1 数据集介绍1.2 数据集文件结构 二、项目实战2.1 数据标签划分2.2 数据预处理2.3 构建模型2.4 开始训练2.5 结果可视化 三、数据集个体预测 前言 SqueezeNet是一种轻量且高效的CNN模型&#xff0c;它参数比AlexNet少50倍&#xff0c;但模型性能&a…

4.深入对象

4.1创建对象三种方式 1.利用对象字面量创建对象 const obj{ name : 佩奇 }2.利用new 0bject创建对象 const obj new Object({ name: 佩奇 }) console.log(obj) // {name: 佩奇}3.利用构造函数创建对象 4.2构造函数 构造函数&#xff1a;是一种特殊的函数,主要用来初始化…

hive 中最常用日期处理函数

hive 常用日期处理函数 在工作中&#xff0c;日期函数是提取数据计算数据必须要用到的环节。哪怕是提取某个时间段下的明细数据也得用到日期函数。今天和大家分享一下常用的日期函数。为什么说常用呢&#xff1f;其实这些函数在数据运营同学手上是几乎每天都在使用的。 技术交…

Metasploit教程 - 基本命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、metasploit版本二、命令1.help2.msfupdate 命令3.search命令 三.Armitage GUI四&#xff0c;扫描总结 我想我得对我的博客做一些美化&#xff0c;而不是只有…

【Power BI】使用 Power BI 处理结构化复杂表单数据 | 文末送书

文章目录 前言使用 Power BI 处理结构化复杂表单数据案例一、处理标题与内容同行的数据表案例二、处理标题与内容同单元格的数据表 文末总结Power BI 新书推荐 前言 数据处理是数据分析的奠基石&#xff0c;只有使用处理干净的数据&#xff0c;分析才会产生价值。简单而言&…

Nacos AP架构集群搭建(Windows)

手写SpringCloud项目地址&#xff0c;求个star github:https://github.com/huangjianguo2000/spring-cloud-lightweight gitee:https://gitee.com/huangjianguo2000/spring-cloud-lightweigh 目录&#xff1a; 一&#xff1a;初始化MySQL 二&#xff1a;复制粘贴三份Nacos文…

【设计模式】拦截过滤器模式

拦截过滤器模式&#xff08;Intercepting Filter Pattern&#xff09;用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器&#xff0c;并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请…

Docker启动相关的命令

1.Docker服务相关命令 操作daemon CentOS7版本启动docker systemctl start docker systemctl status docker停掉docker服务&#xff1a; systemctl stop docker重启命令 systemctl restart docker开机自启docker systemctl enable docker2.小结

8.13黄金是否进入下行通道?下周开盘如何布局

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(8月11日)现货黄金小幅收低&#xff0c;受累于美元走强和美国国债收益率上升&#xff0c;本周录得6月底以来最差单周表现。投资者在评估最新一批通胀报告和消费者信…

欧拉公式之证明

首先&#xff0c;我们考虑复数函数的泰勒级数展开式。对于任意一个复数函数f(z)&#xff0c;我们可以将其在za处进行泰勒级数展开&#xff1a; f(z) f(a) f(a)(z-a) f(a)(z-a)^2/2! f(a)(z-a)^3/3! ... 其中f(a)表示f(z)在za处的导数&#xff0c;f(a)表示f(z)在…

Docker查看、创建、进入容器相关的命令

1.查看、创建、进入容器的指令 用-it指令创建出来的容器&#xff0c;创建完成之后会立马进入容器。退出之后立马关闭容器。 docker run -it --namec1 centos:7 /bin/bash退出容器&#xff1a; exit查看现在正在运行的容器命令&#xff1a; docker ps查看历史容器&#xff0…

【前端】求职必备知识点4-CSS:flex、隐藏元素(7种方法)、单位

文章目录 flex隐藏元素&#xff08;7种方法&#xff09;不占位置占位置 单位思维导图 flex 【前端】CSS3弹性布局&#xff08;flex&#xff09;、媒体查询实现响应式布局和自适应布局_css媒体查询 自适应_karshey的博客-CSDN博客 flex缩写&#xff1a; flex-grow 和 flex-shr…

聚类与回归

聚类 聚类属于非监督式学习&#xff08;无监督学习&#xff09;&#xff0c;往往不知道因变量。 通过观察学习&#xff0c;将数据分割成多个簇。 回归 回归属于监督式学习&#xff08;有监督学习&#xff09;&#xff0c;知道因变量。 通过有标签样本的学习分类器 聚类和…

vs使用def导出文件简介

vs使用def导出文件简介 1.首先需要创建一个dll项目&#xff0c;否则没地方配置使用def文件的指向 2.定义一系列函数并创建一个def文件 3.配置使用def文件的指向编译即可 配置到导出格式时候可以通过NONANE选项使到处函数的符号名字为空&#xff0c;X为导出的序号&#xff0c…

SQL-每日一题【1378. 使用唯一标识码替换员工ID】

题目 Employees 表&#xff1a; EmployeeUNI 表&#xff1a; 展示每位用户的 唯一标识码&#xff08;unique ID &#xff09;&#xff1b;如果某位员工没有唯一标识码&#xff0c;使用 null 填充即可。 你可以以 任意 顺序返回结果表。 返回结果的格式如下例所示。 示例 1&a…

04 - 分离头指针情况、理解HEAD和branch

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 分离头指针2. HEAD和branch2.1 branch的一些操作2.2 HEAD 1. 分离头指针 分离头指针detached HEAD是一种HEAD指针指向了某一个具体的 commit id&#xff0c;而不是分支的情况。 切换…

D. Andrey and Escape from Capygrad Round 892 (Div. 2) 1859D

Problem - D - Codeforces 题目大意&#xff1a;在一个从0到1e9的数轴上&#xff0c;有n个传送门&#xff0c;每个传送门有4个参数&#xff0c;l,r,a,b&#xff0c;可以从[l,r]之间的任意内进入传送门&#xff0c;并传送到[a,b]之间的任意位置&#xff0c;[l,r]一定包含[a,b]&…

使用Python解析通达信本地lday数据结构

通达信软件中的vipdoc是一个存储股票行情数据的文件夹。在通达信软件的安装目录下&#xff0c;可以找到一个名为vipdoc的文件夹&#xff0c;里面存放着各个股票的分时、日线、周线、月线等行情数据文件。这些数据文件可以用于自定义分析和回测股票的走势和交易策略&#xff0c;…

第 358 场LeetCode周赛题解

A 数组中的最大数对和 数据范围小&#xff0c;直接暴力枚举数对 class Solution { public:int mx(int x) {//返回10进制表示的数的最大数字int res 0;for (; x; x / 10)res max(res, x % 10);return res;}int maxSum(vector<int> &nums) {int n nums.size();int r…