搭建自己的harbor倉庫並上傳和下載鏡像

来源:https://www.cnblogs.com/yan-linux/archive/2023/03/02/17171118.html
-Advertisement-
Play Games

1.1 搭建harbor伺服器 [root@rocky8 ~]$ cat /data/scripts/install_harbor.sh #!/bin/bash DOCKER_VERSION="20.10.10" UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~ ...


1.1 搭建harbor伺服器

[root@rocky8 ~]$ cat /data/scripts/install_harbor.sh 
#!/bin/bash

DOCKER_VERSION="20.10.10"
UBUNTU_DOCKER_VERSION="5:${DOCKER_VERSION}~3-0~${ID}-${UBUNTU_CODENAME}"
DOCKER_COMPOSE_VERSION="2.16.0"
DOCKER_COMPOSE_FILE=docker-compose-Linux-x86_64
HARBOR_VERSION="2.5.6"
HARBOR_BASE="/usr/local/"
HARBOR_NAME=harbor.yanlinux.org
HARBOR_IP=`hostname -I|awk '{print $1}'`
HARBOR_ADMIN_PASSWORD=123456

COLOR_SUCCESS="echo -e \\033[1;32m"
COLOR_FAILURE="echo -e \\033[1;31m"
END="\033[m"

. /etc/os-release

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "
    elif [ $2 = "failure" -o $2 = "1"  ] ;then
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo
}

install_docker() {
    if [ $ID = "centos" -o $ID = "rocky" ];then
        if [ $VERSION_ID = "7" ];then
            cat >  /etc/yum.repos.d/docker.repo  <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
EOF
        else     
            cat >  /etc/yum.repos.d/docker.repo  <<EOF
[docker]
name=docker
gpgcheck=0
#baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/8/x86_64/stable/
EOF
        fi
        yum clean all
        yum makecache
        ${COLOR_FAILURE} "Docker有以下版本"${END}
        yum list docker-ce --showduplicates
        ${COLOR_FAILURE}"5秒後即將安裝: docker-"${DOCKER_VERSION}" 版本....."${END}
        sleep 5
        yum -y install docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} || { color "Base,Extras的yum源失敗,請檢查yum源配置" 1;exit; }
    else
	    dpkg -s docker-ce &> /dev/null && $COLOR"Docker已安裝,退出" 1 && exit
        apt update || { color "更新包索引失敗" 1 ; exit 1; }
        apt  -y install apt-transport-https ca-certificates curl software-properties-common || \
            { color "安裝相關包失敗" 1 ; exit 2;  }
        curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
        add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
        apt update
        ${COLOR_FAILURE} "Docker有以下版本"${END}
        apt-cache madison docker-ce
        ${COLOR_FAILURE}"5秒後即將安裝: docker-"${UBUNTU_DOCKER_VERSION}" 版本....."${END}
        ${COLOR_FAILURE}"如果想安裝其它Docker版本,請按ctrl+c鍵退出,修改版本再執行"${END}
        sleep 5
        apt -y  install docker-ce=${UBUNTU_DOCKER_VERSION} docker-ce-cli=${UBUNTU_DOCKER_VERSION}
    fi

    if [ $? -eq 0 ];then
        color "安裝軟體包成功"  0
    else
        color "安裝軟體包失敗,請檢查網路配置" 1
        exit
    fi
    mkdir -p /etc/docker
    tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://5lwrg1ye.mirror.aliyuncs.com"],
  "insecure-registries":["harbor.yanlinux.org"]
}
EOF
	systemctl daemon-reload
    systemctl enable docker
    systemctl restart docker
    docker version && color "Docker 安裝成功" 0 ||  color "Docker 安裝失敗" 1

    echo 'alias rmi="docker images -qa|xargs docker rmi -f"' >> ~/.bashrc
	echo 'alias rmc="docker ps -qa|xargs docker rm -f"' >> ~/.bashrc
    echo 'alias dps="docker ps -a"' >> ~/.bashrc
    echo 'alias dim="docker images"' >> ~/.bashrc
}

install_docker_compose() {
    ${COLOR_SUCCESS}"開始安裝 Docker compose....."${END}
    sleep 5
    if [ ! -e ${DOCKER_COMPOSE_FILE} ];then
        curl -L https://get.daocloud.io/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) -o /usr/bin/docker-compose
    else
        mv ${DOCKER_COMPOSE_FILE} /usr/bin/docker-compose
    fi
    chmod +x /usr/bin/docker-compose

    if docker-compose --version ;then
        ${COLOR_SUCCESS}"Docker Compose 安裝完成"${END} 
    else
        ${COLOR_FAILURE}"Docker compose 安裝失敗"${END}
        exit
    fi  
}

install_harbor() {
    ${COLOR_SUCCESS}"開始安裝 Harbor....."${END}
    sleep 5
    #下載文件
    if [ ! -e harbor-offline-installer-v${HARBOR_VERSION}.tgz ];then
        wget https://github.com/goharbor/harbor/releases/download/v${HARBOR_VERSION}/harbor-offline-installer-v${HARBOR_VERSION}.tgz || ${COLOR_FAILURE} "下載失敗!" ${END}
    fi
    #[ -d ${HARBOR_BASE} ] ||  mkdir ${HARBOR_BASE}
    tar xvf harbor-offline-installer-v${HARBOR_VERSION}.tgz  -C ${HARBOR_BASE}
    cd ${HARBOR_BASE}/harbor

    #編輯配置文件
    cp harbor.yml.tmpl harbor.yml
    sed -ri "/^hostname/s/reg.mydomain.com/${HARBOR_NAME}/" harbor.yml
    sed -ri "/^https/s/(https:)/#\1/" harbor.yml
    sed -ri "s/(port: 443)/#\1/" harbor.yml
    sed -ri "/certificate:/s/(.*)/#\1/" harbor.yml
    sed -ri "/private_key:/s/(.*)/#\1/" harbor.yml
    sed -ri "s/Harbor12345/${HARBOR_ADMIN_PASSWORD}/" harbor.yml
    sed -i 's#^data_volume: /data#data_volume: /data/harbor#' harbor.yml

    ${HARBOR_BASE}/harbor/install.sh && ${COLOR_SUCCESS}"Harbor 安裝完成"${END} ||  ${COLOR_FAILURE}"Harbor 安裝失敗"${END}

    cat > /lib/systemd/system/harbor.service << EOF
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f  ${HARBOR_BASE}/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f ${HARBOR_BASE}/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target
EOF

    systemctl daemon-reload
    systemctl enable --now harbor &> /dev/null || ${COLOR}"Harbor已配置為開機自動啟動"${END}

    if [ $?  -eq 0 ];then
        echo
        color "Harbor安裝完成!" 0
        echo "-------------------------------------------------------------------"
        echo -e "請訪問鏈接: \E[32;1mhttp://${HARBOR_IP}/\E[0m"
		echo -e "用戶和密碼: \E[32;1madmin/${HARBOR_ADMIN_PASSWORD}\E[0m"
    else
        color "Harbor安裝失敗!" 1
        exit
    fi
}

docker info &> /dev/null && ${COLOR_FAILURE}"Docker已安裝"${END} || install_docker
docker-compose --version &> /dev/null && ${COLOR_FAILURE}"Docker Compose已安裝"${END} || install_docker_compose
install_harbor

[root@rocky8 ~]$ sh /data/scripts/install_harbor.sh

1.2 在Harbor伺服器(10.0.0.18)上配置https

1.2.1 生成Harbor伺服器證書

#生成ca的私鑰
openssl genrsa -out ca.key 4096

#生成ca的自簽名證書
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Jiangsu/L=Nanjing/O=example/OU=Personal/CN=yanlinux.org" \
-key ca.key \
-out ca.crt

#生成harbor主機的私鑰
openssl genrsa -out harbor1.yanlinux.org.key 4096

#生成harbor主機的證書申請
openssl req -new -sha512 \
-subj "/C=CN/ST=Jiangsu/L=Nanjing/O=example/OU=Personal/CN=harbor1.yanlinux.org" \
-key harbor1.yanlinux.org.key \
-out harbor1.yanlinux.org.csr

#創建x509 v3擴展文件(新版新增的要求)
cat > v3.txt <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
 
[alt_names]
DNS.1=yanlinux.org
DNS.2=yanlinux
DNS.3=harbor1.yanlinux.org  #功能變數名稱
EOF

#給harbor主機頒發證書
openssl x509 -req -sha512 -days 3650 \
-extfile v3.txt \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor1.yanlinux.org.csr \
-out harbor1.yanlinux.org.crt

#最終文件
ca.crt  ca.srl                   harbor1.yanlinux.org.csr  v3.txt
ca.key  harbor1.yanlinux.org.crt  harbor1.yanlinux.org.key

1.2.2 配置Harbor伺服器使用證書

mkdir /data/harbor/certs/

#拷貝證書文件
cp harbor1.yanlinux.org.crt harbor1.yanlinux.org.key /data/harbor/certs/

#修改配置,加上https認證
vim /usr/local/harbor/harbor.yml
......
# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/harbor/certs/harbor1.yanlinux.org.crt
  private_key: /data/harbor/certs/harbor1.yanlinux.org.key
......

#使配置生效
cd /usr/local/harbor
./prepare; docker-compose down -v; docker-compose up -d

打開網址就會跳轉到https

1.3 在Docker伺服器端(10.0.0.8)下載CA的證書並上傳鏡像

直接登錄和上傳下載鏡像會報錯

[root@rocky8 ~]$ vi /etc/hosts
10.0.0.18 harbor1.yanlinux.org

#沒有證書驗證,直接登錄失敗
[root@rocky8 ~]$ docker login harbor1.yanlinux.org
Username: admin
Password: 
Error response from daemon: Get "https://harbor1.yanlinux.org/v2/": x509: certificate signed by unknown authority

#拉取失敗
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/nginx:1.22.1-20230222
Error response from daemon: Get "https://harbor1.yanlinux.org/v2/": x509: certificate signed by unknown authority

在docker伺服器端使用證書文件

#在harbor伺服器端,轉換harbor的crt證書文件為cert尾碼,docker識別crt文件為CA證書,cert為客戶端證書
[root@rocky8 certs]$ openssl x509 -inform PEM -in harbor1.yanlinux.org.crt -out harbor1.yanlinux.org.cert
[root@rocky8 certs]$ ll harbor1.yanlinux.org.c*rt
-rw-r--r-- 1 root root 2134 Feb 28 22:24 harbor1.yanlinux.org.cert
-rw-r--r-- 1 root root 2134 Feb 28 21:46 harbor1.yanlinux.org.crt

#兩個文件一樣,直接cp -a harbor1.yanlinux.org.crt harbor1.yanlinux.org.cert就行
[root@rocky8 certs]$ md5sum harbor1.yanlinux.org.cert harbor1.yanlinux.org.crt
23ef17b3e9fa2069fe5a190dd8b428de  harbor1.yanlinux.org.cert
23ef17b3e9fa2069fe5a190dd8b428de  harbor1.yanlinux.org.crt


#在docker服務端下載證書
[root@rocky8 ~]$ mkdir /etc/docker/certs.d/harbor1.yanlinux.org/ -p
[root@rocky8 ~]$ cd /etc/docker/certs.d/harbor1.yanlinux.org/
[root@rocky8 ~]$ scp 10.0.0.18:/root/certs/{harbor1.yanlinux.org.cert,harbor1.yanlinux.org.key,ca.crt} /etc/docker/certs.d/harbor1.yanlinux.org/


#在harbor伺服器上拷貝證書到/etc/docker下,實現harbor伺服器的上傳與下載鏡像
[root@rocky8 harbor1.yanlinux.org]$ scp -r /etc/docker/certs.d/ 10.0.0.18:/etc/docker/
[root@rocky8 ~]$ systemctl restart docker


#登錄賬戶
[root@rocky8 ~]$ docker login harbor1.yanlinux.org

#打標簽
[root@rocky8 ~]$ docker tag alpine-base:3.17.2 harbor1.yanlinux.org/test/alpine-base:3.17.2
[root@rocky8 ~]$ docker tag nginx-alpine:1.22.1 harbor1.yanlinux.org/test/nginx-alpine:1.22.1
[root@rocky8 ~]$ docker tag alpine-jdk:8u202 harbor1.yanlinux.org/test/alpine-jdk:8u202
[root@rocky8 ~]$ docker tag tomcat-base:v8.5.85 harbor1.yanlinux.org/test/tomcat-base:v8.5.85
[root@rocky8 ~]$ docker tag haproxy-alpine:2.1.2 harbor1.yanlinux.org/test/haproxy-alpine:2.1.2

#上傳鏡像
[root@rocky8 ~]$ docker push harbor1.yanlinux.org/test/alpine-base:3.17.2
The push refers to repository [harbor1.yanlinux.org/test/alpine-base]
87c8bbf9e2e8: Pushed 
0ba47f277eb9: Pushed 
7cd52847ad77: Pushed 
3.17.2: digest: sha256:d2aaa9d3e26da43e5b83d02b92aab403f33e9d4c9a3e9171a14ef314692e4a7a size: 947
[root@rocky8 ~]$ docker push harbor1.yanlinux.org/test/nginx-alpine:1.22.1
The push refers to repository [harbor1.yanlinux.org/test/nginx-alpine]
fa80f3c76ef6: Pushed 
01c65a043850: Pushed 
adbe8696b1b4: Pushed 
1e356a844716: Pushed 
ebb41e59056a: Pushed 
0ba47f277eb9: Mounted from test/alpine-base 
7cd52847ad77: Mounted from test/alpine-base 
1.22.1: digest: sha256:104304b5133de8acd1978485c2d980748dab7314d267d29b4278f22573010058 size: 1784
[root@rocky8 ~]$ docker push harbor1.yanlinux.org/test/alpine-jdk:8u202
The push refers to repository [harbor1.yanlinux.org/test/alpine-jdk]
d88c104af48e: Pushed 
4236564ab151: Pushed 
31af46d91eef: Pushed 
87c8bbf9e2e8: Mounted from test/alpine-base 
0ba47f277eb9: Mounted from test/nginx-alpine 
7cd52847ad77: Mounted from test/nginx-alpine 
8u202: digest: sha256:6a93df44d46e757dda66a6c2f8ea28c11d3954d3c714392b608c40f45b2e2413 size: 1574
[root@rocky8 ~]$ docker push harbor1.yanlinux.org/test/tomcat-base:v8.5.85
The push refers to repository [harbor1.yanlinux.org/test/tomcat-base]
6d1a20593ad3: Pushed 
8d7f5b279153: Pushed 
0abb32fe3733: Pushed 
d88c104af48e: Mounted from test/alpine-jdk 
4236564ab151: Mounted from test/alpine-jdk 
31af46d91eef: Mounted from test/alpine-jdk 
87c8bbf9e2e8: Mounted from test/alpine-jdk 
0ba47f277eb9: Mounted from test/alpine-jdk 
7cd52847ad77: Mounted from test/alpine-jdk 
v8.5.85: digest: sha256:a19bb6ff4a407cbd9881a27b8ca412b6bd45d5fd0b8bff35e6a6d759813fb273 size: 2200
[root@rocky8 ~]$ docker push harbor1.yanlinux.org/test/haproxy-alpine:2.1.2
The push refers to repository [harbor1.yanlinux.org/test/haproxy-alpine]
406ce5ba5219: Pushed 
3ecff3848c3e: Pushed 
89180f31278f: Pushed 
87c8bbf9e2e8: Mounted from test/tomcat-base 
0ba47f277eb9: Mounted from test/tomcat-base 
7cd52847ad77: Mounted from test/tomcat-base 
2.1.2: digest: sha256:bbf660062436f982e820d2daacb8fcd1d83ecc06115e178bfe094b8c4f513066 size: 1576

查看倉庫上傳的鏡像

1.4 在客戶端下載鏡像(10.0.0.38 安裝docker)

直接登錄和上傳下載鏡像會報錯

[root@rocky8 ~]$ vi /etc/hosts
10.0.0.18 harbor1.yanlinux.org

#沒有證書驗證,直接登錄失敗
[root@rocky8 ~]$ docker login harbor1.yanlinux.org
Username: admin
Password: 
Error response from daemon: Get "https://harbor1.yanlinux.org/v2/": x509: certificate signed by unknown authority

#拉取失敗
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/nginx:1.22.1-20230222
Error response from daemon: Get "https://harbor1.yanlinux.org/v2/": x509: certificate signed by unknown authority

配置Docker客戶端使用證書文件

#在docker客戶端下載證書
[root@rocky8 ~]$ mkdir /etc/docker/certs.d/harbor1.yanlinux.org/ -p
[root@rocky8 ~]$ cd /etc/docker/certs.d/harbor1.yanlinux.org/
[root@rocky8 harbor1.yanlinux.org]$ scp 10.0.0.18:/root/certs/{harbor1.yanlinux.org.cert,harbor1.yanlinux.org.key,ca.crt} /etc/docker/certs.d/harbor1.yanlinux.org/
[root@rocky8 ~]$ systemctl restart docker

拉取鏡像

[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/haproxy-alpine:2.1.2
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/tomcat-base:v8.5.85
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/alpine-jdk:8u202
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/nginx-alpine:1.22.1
[root@rocky8 ~]$ docker pull harbor1.yanlinux.org/test/alpine-base:3.17.2

[root@rocky8 ~]$ docker images 
REPOSITORY                                 TAG       IMAGE ID       CREATED             SIZE
harbor1.yanlinux.org/test/haproxy-alpine   2.1.2     9eeb5cb28dbe   About an hour ago   226MB
harbor1.yanlinux.org/test/tomcat-base      v8.5.85   f5a9ab5c83ab   2 hours ago         615MB
harbor1.yanlinux.org/test/alpine-jdk       8u202     a38ecf1969fd   3 hours ago         600MB
harbor1.yanlinux.org/test/alpine-base      3.17.2    b3e65dab1347   3 hours ago         197MB
harbor1.yanlinux.org/test/nginx-alpine     1.22.1    7f619fd93a01   5 hours ago         213MB

1.5 運行nginx服務

[root@rocky8 ~]$ docker run -d --name web01 -p 80:80 harbor1.yanlinux.org/test/nginx-alpine:1.22.1 
122ce510bc25d74325525aae4ed9d4a10296cb525fb893aa3c6635ebda7cd936

查看網頁信息


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在忙於 Fireasy 的重構,3.x 拋棄了 .Net Framework 時代的一些思想和模式,緊密擁抱 .Net Core,但它的思想仍然是開放性和靈活性。今天我主要來說說依賴註入與服務發現。 .Net Core 有自己的一套依賴註入,它的容器暴露給 IServiceCollection, ...
  • 上一章我們對XAML有個初步的認識了,知道XAML是用來設計UI的,那麼說怎麼設計,基本用法和語法分別是什麼呢?接下來我們就系統的簡單學習一下XAML的一些基本語法吧。 1 - XAML的結構 如果學習過Winform或者其他桌面設計的應該知道我們最終設計的是與人員交互的圖形界面。比如在Winfor ...
  • 4. ASP.NET Core預設服務 之前講了中間件,實際上一個中間件要正常進行工作,通常需要許多的服務配合進行,而中間件中的服務自然也是通過 Ioc 容器進行註冊和註入的。前面也講到,按照約定中間件的封裝一般會提供一個 User{Middleware} 的擴展方法給用戶使用,而服務註冊中也有一個 ...
  • 環境: DNS伺服器:192.168.10.200 僅主機模式 internet伺服器:192.168.10.123 僅主機模式 web1:10.0.0.100 (安裝apache2)NAT模式 web2:10.0.0.18 (安裝httpd) NAT模式 HAProxy伺服器:10.0.0.8(配 ...
  • 一、使用VMware安裝Ubuntu虛擬機 在Linux系統各個發行版中,Ubuntu系統在服務端和桌面端使用占比最高,網路上資料最是齊全,所以這裡使用Ubuntu LTS。 整體的系統安裝文件較大(>1G),這裡採用了迅雷加速下載。迅雷下載地址:下載迅雷工具 下載地址:Download Ubunt ...
  • 參數介紹 net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,預設為0,表示關閉; net.ipv4.tcp_tw_recycle = 1 表示開啟TCP連接中TIME-WAIT sockets的快速回收,預設為0,表示關 ...
  • 下載 Ubuntu 和 Virtual Box 鏈接: ubuntu:https://ubuntu.com/download/desktop virtual box:https://www.virtualbox.org/wiki/Downloads 安裝 Virtual Box 所有的地方都是預設安 ...
  • 前言 本文通過簡單的幾個示例,以及對同一個Makefile進行幾個版本的迭代,幫助快速的理解變數和模式規則的使用。 1、回顧 在上一篇文章中,我們使用Makefile編譯fun.c和main.c這兩個文件,最終生成名為app的可執行文件。 fun.c的內容 #include <stdio.h> vo ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...