Docker安裝和Harbor高可用部署

一、Namespace和cgroup介紹

1.1 Namespace

????Namespace是linux系統(tǒng)的底層概念,在內(nèi)核層實現(xiàn),用于提供容器獨立的運行空間;分為MNT Namespace、IPC Namespace、UTS Namespace、PID Namespace、Net Namespace、User Namespace。

  • MNT Namespace:提供磁盤掛載點和文件系統(tǒng)的隔離能力;每個容器都要有獨立的根文件系統(tǒng),有獨立的用戶空間,以實現(xiàn)在容器里面啟動服務(wù)并且使用容器的運行環(huán)境,即一個宿主機是Ubuntu的服務(wù)器,可以在里邊啟動一個centos運行環(huán)境的容器并且在容器里面啟動一個Nginx服務(wù),此Nginx運行時使用的運行環(huán)境就是centos系統(tǒng)目錄的運行環(huán)境,但是在容器里面不能訪問宿主機的資源,宿主機是使用了chroot技術(shù)把容器鎖定到一個指定的運行目錄里面并作為容器的根運行環(huán)境。

  • IPC Namespace:提供進程間通信的隔離能力;允許容器內(nèi)的不同進程的訪問。

  • UTS Namespace:提供主機名隔離能力;用于系統(tǒng)標識,其中包含hostname和域名domainname,它使得一個容器擁有屬于自己hostname標識,這個主機名標識獨立于宿主機系統(tǒng)和其上的其他容器。

  • PID Namespace:提供進程隔離能力;多個容器的進程如PID編號,容器內(nèi)的主進程生成與回收子進程等。

  • Net Namespace:提供網(wǎng)絡(luò)隔離能力;docker使用network啟動一個vethX接口,這樣你的容器將擁有它自己的橋接ip地址,通常是docker0,而docker0實質(zhì)就是Linux的虛擬網(wǎng)橋,網(wǎng)橋是在OSI七層模型的數(shù)據(jù)鏈路層的網(wǎng)絡(luò)設(shè)備,通過mac地址對網(wǎng)絡(luò)進行劃分,并且在不通網(wǎng)絡(luò)直接傳遞數(shù)據(jù)。

  • User Namespace:提供用戶隔離能力;允許在各個宿主機的各個容器空間內(nèi)創(chuàng)建相同的用戶以及相同的用戶UID和GID,會把用戶的操作范圍限制在每個容器內(nèi),不同容器文件系統(tǒng)相互獨立。

1.2 cgroup

????cgroup的主要作用就是限制一個進程能夠使用的資源上限,包括CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)帶寬等等,還能夠?qū)M程優(yōu)先級設(shè)置,以及將進程掛起和恢復(fù)等操作。

  • blkio: 塊設(shè)備IO限制

  • CPU: 使用調(diào)度程序為cgroup任務(wù)提供cpu的訪問

  • cpuacct:產(chǎn)生cgroup任務(wù)的cpu資源報告。

  • cpuset:如果是多核心的cpu,這個子系統(tǒng)會為cgroup任務(wù)分配單獨的cpu和內(nèi)存。

  • devices:允許或拒絕cgroup任務(wù)對設(shè)備的訪問。

  • freezer:暫停和恢復(fù)cgroup任務(wù)。

  • memory:設(shè)置每個cgroup的內(nèi)存限制以及產(chǎn)生內(nèi)存資源報告。

  • net_cls:標記每個網(wǎng)絡(luò)包以供cgroup方便使用。

  • ns:命名空間子系統(tǒng)。

  • perf_event:增加了對每個cgroup的監(jiān)測跟蹤的能力,可以監(jiān)測屬于某個特定cgroup的所有線程以及運行在特定CPU上的線程。

二、docker的安裝

環(huán)境準備

2.1 修改主機資源配置文件:

cat >> /etc/security/limits.conf <<EOF
* soft    core            unlimited
* hard    core            unlimited
* soft    nproc           1000000
* hard    nproc           1000000
* soft    nofile          1000000
* hard    nofile          1000000
* soft    memlock         32000
* hard    memlock         32000
* soft    msgqueue        8192000
* hard    msgqueue        8192000
EOF
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
vm.max_map_count=262144
kernel.pid_max=4194303
fs.file-max=1000000
net.ipv4.tcp_max_tw_buckets=6000
net.netfilter.nf_conntrack_max=2097152

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

2.2 解壓docker壓縮包并設(shè)置為開機自啟動

tar xf docker-20.10.9.tgz    # 需要先上傳包
cp docker/*  /usr/bin
cp containerd.service /lib/systemd/system/containerd.service
cp docker.service  /lib/systemd/system/docker.service
cp docker.socket /lib/systemd/system/docker.socket
groupadd  -r test
groupadd  -r docker # 如果不添加docker組,docker起不來
useradd -r -m -g test test
usermod test -G docker
systemctl  enable containerd.service && systemctl  restart containerd.service
systemctl  enable docker.service && systemctl  restart docker.service
systemctl  enable docker.socket && systemctl  restart docker.socket 

2.3 docker啟動

docker.jpg

三、Docker常用命令介紹

  • docker image
docker image ls    # 列出鏡像,等同于docker images
docker image history IMAGE    # 查看鏡像歷史信息
docker image inspect IMAGE    # 查看鏡像詳細信息
docker image load -i *.tar.gz    # 加載鏡像,等同于docker load
docker image prune    # 刪除沒有使用的鏡像
docker image pull IMAGE    # 拉取鏡像,等同于docker pull
docker image rm IMAGE    # 刪除鏡像,等同于docker rmi
docker image save IMAGE  -o IMAGE.tar.gz    # 保存鏡像為tar包,等同于docker save
docker image tag IMAGE newIMAGE    # 為鏡像打標簽
  • docker system
docker system df    # 查看docker使用磁盤信息
docker system events    # 查看實時事件信息
docker system info    # 查看docker信息,等同于docker info
docker system prune    # 刪除沒有使用的鏡像
  • docker volume
docker volume create    # 創(chuàng)建docker卷
docker volume inspect VOLUME    # 查看docker卷詳細信息
docker volume ls    # 列出docker卷
docker volume prune    # 刪除沒有使用的本地卷
docker volume rm VOLUME    # 刪除docker卷
  • docker build
docker build -t IMAGE .    # 指定tag打鏡像
docker build -f PATH .    # 指定Dockerfile文件的位置打鏡像
  • docker cp
docker cp CONTAINER:SRC_PATH DEST_PATH    # 從容器拷貝文件到宿主機
docker cp SRC_PATH CONTAINER:DEST_PATH    # 從宿主機拷貝文件到容器
  • docker create
docker create IMAGE    # 創(chuàng)建一個新容器不運行
  • docker exec
docker exec -i -t CONTAINER bash    # 在運行中的容器執(zhí)行命令
  • docker images
docker images -a    # 列出鏡像信息,等同于docker images
docker images -q    # 只列出鏡像id列
  • docker info
docker info    # 查看docker信息
  • docker inspect
docker inspect CONTAINER    # 查看容器詳細信息
docker inspect -s CONTAINER    # 比容器詳細信息多文件大小信息
  • docker kill
docker kill container    # 殺掉正在運行的容器
  • docker load
docker load -i *.tar.gz    # 加載鏡像
  • docker login
docker login HARBOR_IP:PORT -uUSER -pPASSWORD    # 指定harbor地址、用戶、密碼,登陸harbor
  • docker logout
docker logout HARBOR_IP:PORT    # 從鏡像倉庫中退出登陸
  • docker logs
docker logs -f CONTAINER    # 實時查看容器日志
docker logs -t CONTAINER    # 列出容器日志時間戳
  • docker ps
docker ps    # 列出正在運行的容器
docker ps -a    # 列出所有容器
docker ps -n N    # 列出最近創(chuàng)建的容器(包括所有狀態(tài))
docker ps -l    # 列出最近創(chuàng)建的一個容器
docker ps -q    # 列出正在運行容器的容器id
docker ps -s    # 多列出容器文件總大小
  • docker pull
docker pull IMAGE    # 拉取鏡像
  • docker push
docker push IMAGE    # 推送鏡像
  • docker restart
docker restart CONTAINER    # 重啟容器
  • docker rm
docker rm CONTAINER    # 刪除容器
docker rm -f    # 強制刪除容器
  • docker rmi
docker rmi IMAGE    # 刪除鏡像
  • docker run
docker run -itd IMAGE    # 后臺運行容器
  • docker save
docker save IMAGE -o IMAGE.tar.gz    # 保存鏡像并指定壓縮包名字
  • docker search
docker search IMAGE    # 在Docker Hub中搜索鏡像
  • docker start
docker start CONTAINER    # 啟動停止的容器
  • docker stats
docker stats    # 列出正在運行容器的資源使用信息
docker stats -a    # 列出所有容器的資源使用信息
  • docker stop
docker stop CONTAINER    # 停止運行中的容器
  • docker tag
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]    # 為源鏡像創(chuàng)建新的標簽
  • docker top
docker top CONTAINER    # 列出容器中運行的進程信息
  • docker version
docker version    # 列出docker版本信息

四、部署單機Harbor

環(huán)境準備

4.1 安裝docker-compose

mv docker-compose-linux-x86_64 docker-compose    # 需要先上傳包
cp docker-compose /usr/bin/
chmod +x /usr/bin/docker-compose

4.2 安裝harbor

tar xvf harbor-offline-installer-v2.4.1.tgz    # 需要先上傳包
chmod +x prepare install.sh common.sh
docker load < harbor.v2.4.1.tar.gz
cp harbor.yml.tmpl harbor.yml

修改harbor.yml文件

  • 修改第五行 hostname 為主機ip或域名
  • 注釋第13行 https
  • 注釋第15行 port: 443
  • 修改第34行 harbor_admin_password,設(shè)置一個admin用戶的密碼
  • 修改第47行 data_volume,修改harbor的數(shù)據(jù)目錄
  • 修改第120行 location,修改harbor的日志目錄

啟動harbor

bash install.sh
docker-compose ps
docker-compose ps.jpg

4.3 修改harbor地址為可信任源

cat >> /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["HARBOR_IP"]
}
EOF
systemctl restart docker
docker-compose up -d
docker login HOSTNAME -uadmin # 要等harbor的容器狀態(tài)都成為running (healthy)再登陸,不然可能會登陸失敗
docker login.jpg

五、部署基于負載均衡的Harbor高可用

環(huán)境準備

5.1 創(chuàng)建項目并添加復(fù)制策略

????兩個harbor添加方式一樣

  • 點擊項目,新建項目,項目類型選擇公開,點擊確定


    create project.jpg
  • 點擊系統(tǒng)管理,倉庫管理,新建目標,驗證遠程證書去掉勾選,輸入目標URL和用戶名密碼后,點擊測試連接,顯示測試連接成功,點擊確定


    create registry.jpg
  • 點擊系統(tǒng)管理,復(fù)制管理,新建規(guī)則,復(fù)制模式選擇默認的Push-based,觸發(fā)模式選擇事件驅(qū)動,勾選刪除本地資源時同時也刪除遠程的資源,點擊確定


    add duplicate.jpg

5.2 部署haproxy

????由于需要haproxy需要用到lua,所以要先下載lua并編譯

apt install  gcc make libreadline-dev libsystemd-dev zlib1g-dev libpcre3 libpcre3-dev libssl-dev
curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz
tar zxf lua-5.4.3.tar.gz
cd lua-5.4.3
make all test
tar xf haproxy-2.4.10.tar.gz    # 需要先上傳包
cd haproxy-2.4.10
make ARCH=x86_64 TARGET=linux-glibc USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1 \
USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src LUA_LIB=/usr/local/src/lua-5.4.3/src \
prefix=/usr/local/haproxy    # 注意修改lua源碼目錄
make install PREFIX=/usr/local/haproxy
cp haproxy /usr/sbin/

cat >> /lib/systemd/system/haproxy.service <<EOF
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
EOF

useradd haproxy -s /sbin/nologin
mkdir -p /var/lib/haproxy/
cat >> /etc/haproxy/haproxy.cfg <<EOF
global
    chroot /usr/local/haproxy
    user haproxy
    group haproxy
    maxconn 5000
    daemon
    pidfile /var/lib/haproxy/haproxy.pid
    stats socket /tmp/haproxy-fe.sock mode 666 level admin

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    option  httpclose
    retries 3
    maxconn 4000
    timeout connect 5000
    timeout client  50000
    timeout server  50000

listen stats
    mode http
    bind *:8001
    stats uri /
    stats admin if TRUE
    stats refresh 10s

listen harbor_ha
    bind HARBOR_VIP:PORT
    mode http
    balance source
    server harbor1 HARBOR1_IP:PORT check inter 2s fall 3 rise 5
    server harbor2 HARBOR2_IP:PORT check inter 2s fall 3 rise 5
EOF

systemctl start haproxy
vim /etc/docker/daemon.json
{
 "insecure-registries":["HARBOR_VIP:PORT"]
}
systemctl restart docker
docker-compose start
docker login HARBOR_VIP:PORT -uadmin
docker login.jpg

5.3 測試harbor的高可用

  • 推送一個鏡像
docker pull alpine:latest
docker tag alpine HARBOR_VIP:PORT/PROJECT/alpine:latest
docker push HARBOR_VIP:PORT/PROJECT/alpine:latest
  • 拉取鏡像測試
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
pull image.jpg
  • 停掉一個harbor拉取鏡像測試
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
pull image.jpg
  • 停掉兩個harbor拉取鏡像測試
docker-compose stop
docker-compose ps
docker pull HARBOR_VIP:PORT/PROJECT/alpine:latest
stop two pull image.jpg
  • 起一個harbor拉取鏡像測試


    start one pull image.jpg

????搭建完成,完結(jié)撒花????。?!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容