主頁 >  其他 > Docker容器

Docker容器

2020-09-15 09:39:38 其他

Docker容器介紹

1.1 docker是什么

Docker 是 Docker.Inc 公司開源的一個基于 LXC技術之上構建的Container容器引擎, 源代碼托管在 GitHub 上, 基于Go語言并遵從Apache2.0協議開源,
Docker是通過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等,由于Docker通過作業系統層的虛擬化實作隔離,所以Docker容器在運行時,不需要類似虛擬機(VM)額外的作業系統開銷,提高資源利用率,

namespace命名空間

Mount Namespace - 用于隔離檔案系統的掛載點
UTS Namespace - 用于隔離 HostName 和 DomianName
IPC Namespace - 用于隔離行程間通信
PID Namespace - 用于隔離行程 

cgroups資源限制

控制組(cgroups)是 Linux 內核的一個特性,主要用來對共享資源進行隔離、限制、審計等,只有

能控制分配到容器的資源,才能避免當多個容器同時運行時的對系統資源的競爭,

控制組技術最早是由 Google 的程式員在 2006 年提出,Linux 內核自 2.6.24 開始支持,

控制組可以提供對容器的記憶體、CPU、磁盤 IO 等資源的限制和審計管理,

1.2 容器與虛擬機對比

img

img

1.3 docker的三個重要概念

Image(鏡像):
那么鏡像到底是什么呢?Docker 鏡像可以看作是一個特殊的檔案系統,除了提供容器運行時所需的程式、庫、資源、配置等檔案外,還包含了一些為運行時準備的一些配置引數(如匿名卷、環境變數、用戶等),
Container(容器)
容器(Container)的定義和鏡像(Image)幾乎一模一樣,也是一堆層的統一視角,唯一區別在于容器的最上面那一層是可讀可寫的,
Repository(倉庫)
鏡像倉庫是 Docker 用來集中存放鏡像檔案的地方,類似于我們之前常用的代碼倉庫,
通常,一個倉庫會包含同一個軟體不同版本的鏡像,而標簽就常用于對應該軟體的各個版本 ,
我們可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟體哪個版本的鏡像,如果不給出標簽,將以 Latest 作為默認標簽,

img

1.4 docker的組成部分

docker是傳統的CS架構分為docker client和docker server
Docker 客戶端是 Docker 用戶與 Docker 互動的主要方式,當您使用 Docker 命令列運行命令時,Docker 客戶端將這些命令發送給服務器端,服務端將執行這些命令,
Docker 命令使用 Docker API ,Docker 客戶端可以與多個服務端進行通信,

img

組件:鏡像,容器,倉庫,網路,存盤

鏡像:把系統檔案打包

虛擬化的幾種架構圖

Docker安裝部署

2.1 國內源安裝docker-ce

這里我們使用清華源:
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
操作步驟:

yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
#更新yum快取
yum makecache fast
yum install docker-ce -y
docker version
systemctl start docker 

上傳安裝包,
yum localinstall '*.rpm'

2.2 國內遠鏡像加速配置

官網地址
https://www.daocloud.io/mirror
加速命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
需要重啟docker
阿里鏡像加速地址
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
加速命令
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

2.3 快速安裝

思路:
1.開啟yum快取
2.全新環境安裝docker
3.將快取的包全部打包出來
4.安裝的時候使用rpm -ivh *.rpm方式安裝

2.4 運行第一個容器

運行一個Hello world

docker run alpine /bin/echo "Hello world"

Docker鏡像和容器管理

3.1 鏡像相關命令

3.1.1 搜索鏡像

選擇鏡像建議:
1.優先選擇官方的
2.選擇星星多的

docker search centos

#搜索鏡像所有的版本號.jq是一個json格式化工具
yum install jq
curl -s https://registry.hub.docker.com/v1/repositories/centos/tags|jq

3.1.2 獲取鏡像(沒有指定版本,默認最新)

docker pull centos
docker pull busybox
docker pull busybox:1.29

3.1.3 查看鏡像

docker images

3.1.4 洗掉鏡像(首先洗掉容器,再洗掉鏡像)

docker rmi centos:7
docker images|awk 'NR>1{print "docker rmi "$3}'|bash
docker rmi $(docker images|awk 'NR>1{print $3}')
docker rmi $(docker images -q)

3.1.5 匯出鏡像

docker save -o centos.tar centos:latest

3.1.6 匯入鏡像

docker load  < centos.tar

3.2 容器相關命令

3.2.1 啟動容器

docker run -d -p 80:80 nginx 
#啟動一個容器并保持不退出 并自定義命名
docker run --name mydocker -t -i centos /bin/bash
#啟動一個容器并保持不退出
docker run -it -d centos:7 /bin/bash 
#啟動并進入容器,啟動一個終端,pid為1
docker run -it  centos:7 /bin/bash 
#啟動一個已經停止的容器
docker start  容器ID
-d放后臺
-p埠映射
#system管理啟動
docker run -d -it --privileged nginx-1 /usr/sbin/init

3.2.2 停止容器

docker stop 容器的ID
#批量停止所有運行的容器
docker stop $(docker ps -q)

3.2.3 查看容器

#查看當前正在運行的容器
docker ps 
#查看正在運行以及停止運行的容器
docker ps -a 

docker ps -q
docker ps -aq

#查看容器的詳細資訊
docker inspect 容器ID

3.2.4 進入容器

docker exec會分配一個新的終端tty
#進入已經運行的容器
docker exec -it 容器ID  /bin/bash 
#啟動并進入容器,啟動一個終端,pid為1
docker run -it  centos:7 /bin/bash 

docker attach會使用同一個終端
docker attach 容器ID

3.2.5 洗掉容器

洗掉單個容器

docker rm 容器ID

批量洗掉容器

docker rm $(docker ps -aq)

Docker網路管理

4.1 隨機映射埠

docker run -P :80 -d nginx:latest

4.2 指定映射埠

-p 宿主機埠:容器埠

docker run -p 8080:80 -d nginx:latest

-p 80:80 -p 443:443
-p 宿主機IP:宿主機埠:容器埠

如果想多個容器使用8080埠,可以通過添加多個IP地址實作

ifconfig eth0:1 10.0.1.13 up
docker run -d -p 10.0.1.11:8080:80 nginx:latest
docker run -d -p 10.0.1.13:8080:80 nginx:latest

進入容器里修改站點目錄,然后訪問測驗

docker exec -it bdb2a4e7e24d /bin/bash
echo "web01" > /usr/share/nginx/html/index.html
docker exec -it 31c1de138dda /bin/bash
echo "web02" > /usr/share/nginx/html/index.html

訪問測驗:

[root@docker01 ~]# curl 10.0.1.11:8080
web02
[root@docker01 ~]# curl 10.0.1.13:8080
web01

Docker資料卷管理

5.1 持久化資料卷

-v 宿主機目錄:容器內目錄
下面我們來創建一個html5小游戲

5.1.1 創建游戲代碼目錄

mkdir /data/xiaoniao -p
cd /data/
unzip xiaoniaofeifei.zip  -d xiaoniao /

5.1.2 創建容器并映射資料卷

docker run -d  -p 80:80 -v /data/xiaoniao:/usr/share/nginx/html nginx:latest
docker ps

5.1.3 訪問游戲頁面

10.0.1.11

5.2 持久化資料卷容器

--volumes-from (跟某一個已經存在的容器掛載相同的卷)

查看當前容器有哪些卷

docker volume ls

下面我們利用容器卷創建一個小游戲

5.2.1 創建一個容器卷

docker run -d  -p 8080:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest
docker volume ls

5.2.2 查看卷的目錄

docker volume inspect xiaoniao

5.2.3 復制代碼目錄到容器卷目錄

\cp -a /data/xiaoniao/* /var/lib/docker/volumes/xiaoniao/_data/

5.2.4 使用容器卷創建新容器

docker run -d  -p 8090:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest

5.3 專案實戰-訪問不同埠展示不同頁面

前提:基于自定義鏡像c7_nginx:v1

基于Centos7創建自定義nginx鏡像

1.拉取一個基礎鏡像
docker run --name myc7 -it centos:7 /bin/bash 

2.安裝nginx
cat > /etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum install nginx 

3.基于自定義的容器生成新的鏡像
docker commit myc7 c7_nginx:v1

4.查看是否生成新鏡像
docker images 

5.基于自定義的nginx鏡像創建新的容器并指定映射埠
docker run --name mynginx -itd -p 80:80 c7_nginx:v1 nginx -g "daemon off;"

6.查看容器是否運行并在windows訪問測驗
docker ps 
10.0.0.51

7.進入容器查看行程
docker exec -it mynginx /bin/bash 
ps aux 
nginx -s stop 

8.重啟啟動容器測驗是否可以訪問
docker start mynginx
10.0.0.51

有報錯,可以換國內源安裝
docker cp /etc/yum.repos.d/CentOS-Base.repo  b1965575341b:/etc/yum.repos.d/
docker cp /etc/yum.repos.d/CentOS-epel.repo  b1965575341b:/etc/yum.repos.d/

專案要求:

一個容器實作:
訪問8080埠跳轉到xiaoniao
訪問8090跳轉到game
資料目錄,組態檔,日志檔案都以映射掛載的方式實作

1.創建資料目錄
mkdir /code 
cd /code 

2.撰寫Nginx組態檔
cat >game.conf<<EOF 
server {
    listen       8080;
    server_name  localhost;
    location / {
        root   /opt/xiaoniao/;
        index  index.html index.htm;
    }
}

server {
    listen       8090;
    server_name  localhost;
    location / {
        root   /opt/game/;
        index  index.html index.htm;
    }
}
EOF

3.上傳代碼目錄并解壓
tar zxf xiaoniao.tar.gz
tar zxf game.tar.gz

4.關鍵容器并掛載
docker run -d \
	-p 8080:8080 \
	-p 8090:8090 \
	-v /code/game/:/opt/game/ \
	-v /code/xiaoniao/:/opt/xiaoniao/ \
	-v /code/game.conf:/etc/nginx/conf.d/game.conf \
	-v /var/log/nginx/:/var/log/nginx/ \
	c7_nginx:v1 \
	nginx -g "daemon off;"

5.訪問測驗
10.0.0.51:8080
10.0.0.52:8090

Docker鏡像手動構建

6.1 手動制作游戲鏡像(沒測驗)

下面我們基于centos容器制作一個新鏡像,并安裝nginx服務

docker run -it centos:7 /bin/bash
yum install wget install openssh-clients -y
rm -rf /etc/yum.repos.d/*
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
cat >/etc/yum.repos.d/nginx.repo<<EOF  
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF
yum makecache fast
yum install nginx -y
scp -r 10.0.1.51:/data/* /opt/
mv /opt/game.conf /etc/nginx/conf.d/
docker ps
docker commit 容器ID game:v1
docker images
docker save game:v1 > game-v1.tar
docker load < game-v1.tar
docker run -p 8080:8080 -p 8090:8090 -d game:v1 nginx -g 'daemon off;'

6.2 手動制作云盤鏡像

制作成容器:

docker run -it -d -p 80:80 centos:7 /bin/bash
docker exec -it ed90a5662ac4 /bin/bash

容器內正常安裝

0.初始化
使用阿里源
groupadd www -g 1000
useradd www -u 1000 -g 1000 -M -s /sbin/nologin
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


1.安裝依賴環境 nginx+php
cat>/etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

yum makecache fast
yum install nginx php-fpm php-mbstring php-gd unzip -y


2.配置Nginx和php
rm -rf /etc/nginx/conf.d/default.conf
sed -i '/^user/c user www;' /etc/nginx/nginx.conf
sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
sed -i '/daemonize/s#no#yes#g' /etc/php-fpm.conf     
cat >/etc/nginx/conf.d/kod.conf<<EOF
server {
    server_name localhost;
    listen 80;
    root /code;
    index index.php index.html;

    location ~ \.php\$ {
        root /code;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        include fastcgi_params;
    }
}
EOF

3.配置代碼
mkdir /code 
cd /code 
curl -o kodexplorer4.40.zip http://static.kodcloud.com/update/download/kodexplorer4.40.zip
unzip kodexplorer4.40.zip
chown -R www:www /code 


4.啟動腳本
cd /root
cat >init.sh<<EOF
#!/bin/bash
php-fpm -c /etc/php.ini -y /etc/php-fpm.conf
nginx -g 'daemon off;'
EOF
chmod +x init.sh
5.測驗
方法一:
#若前面沒有映射埠,執行腳本用curl測驗
sh init.sh
重開埠測驗
[root@d0c987bcefa2 code]# curl -I 127.0.0.1
方法二:
登錄web 10.0.0.51測驗

6.宿主機操作
#生成鏡像
docker commit ed90a5662ac4 my_kod:v1
#基于新生成的鏡像.啟動容器
docker run -p 80:80 -d my_kod:v1 /bin/bash /root/init.sh

Dockerfile自動構建Docker鏡像

7.1 Dockerfile操作命令說明

Docker通過對于在Dockerfile中的一系列指令的順序決議實作自動的image的構建
  通過使用build命令,根據Dockerfiel的描述來構建鏡像
  通過源代碼路徑的方式
  通過標準輸入流的方式
Dockerfile指令:
  只支持Docker自己定義的一套指令,不支持自定義
  大小寫不敏感,但是建議全部使用大寫
  根據Dockerfile的內容順序執行
FROM:
  FROM {base鏡像}
  必須放在DOckerfile的第一行,表示從哪個baseimage開始構建
MAINTAINER:
  可選的,用來標識image作者的地方
RUN:
  每一個RUN指令都會是在一個新的container里面運行,并提交為一個image作為下一個RUN的base
  一個Dockerfile中可以包含多個RUN,按定義順序執行
  RUN支持兩種運行方式:
    RUN <cmd> 這個會當作/bin/sh -c “cmd” 運行
    RUN [“executable”,“arg1”,,,],Docker把他當作json的順序來決議,因此必須使用雙引號,而且executable需要是完整路徑
  RUN 都是啟動一個容器、執行命令、然后提交存盤層檔案變更,第一層 RUN command1 的執行僅僅是當前行程,一個記憶體上的變化而已,其結果不會造成任何檔案,而到第二層的時候,啟動的是一個全新的容器,跟第一層的容器更完全沒關系,自然不可能繼承前一層構建程序中的記憶體變化,而如果需要將兩條命令或者多條命令聯合起來執行需要加上&&,如:cd /usr/local/src && wget xxxxxxx
CMD:
  CMD的作用是作為執行container時候的默認行為(容器默認的啟動命令)
  當運行container的時候宣告了command,則不再用image中的CMD默認所定義的命令
  一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最后一個才會起作用 
CMD定義的三種方式:
  CMD <cmd> 這個會當作/bin/sh -c "cmd"來執行
  CMD ["executable","arg1",....]
  CMD ["arg1","arg2"],這個時候CMD作為ENTRYPOINT的引數 
EXPOSE 宣告埠
  格式為 EXPOSE <埠1> [<埠2>...],
  EXPOSE 指令是宣告運行時容器提供服務埠,這只是一個宣告,在運行時并不會因為這個宣告應用就會開啟這個埠的服務,在 Dockerfile 中寫入這樣的宣告有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護埠,以方便配置映射;另一個用處則是在運行時使用隨機埠映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的埠,
entrypoint:
  entrypoint的作用是,把整個container變成了一個可執行的檔案,這樣不能夠通過替換CMD的方法來改變創建container的方式,但是可以通過引數傳遞的方法影響到container內部
  每個Dockerfile只能夠包含一個entrypoint,多個entrypoint只有最后一個有效
  當定義了entrypoint以后,CMD只能夠作為引數進行傳遞
entrypoint定義方式:
  entrypoint ["executable","arg1","arg2"],這種定義方式下,CMD可以通過json的方式來定義entrypoint的引數,可以通過在運行container的時候通過指定command的方式傳遞引數
  entrypoint <cmd>,當作/bin/bash -c "cmd"運行命令
ADD & COPY:
  當在源代碼構建的方式下,可以通過ADD和COPY的方式,把host上的檔案或者目錄復制到image中
  ADD和COPY的源必須在context路徑下
  當src為網路URL的情況下,ADD指令可以把它下載到dest的指定位置,這個在任何build的方式下都可以work
  ADD相對COPY還有一個多的功能,能夠進行自動解壓壓縮包
ENV:
  ENV key value
  用來設定環境變數,后續的RUN可以使用它所創建的環境變數
  當創建基于該鏡像的container的時候,會自動擁有設定的環境變數 
WORKDIR:
  用來指定當前作業目錄(或者稱為當前目錄)
  當使用相對目錄的情況下,采用上一個WORKDIR指定的目錄作為基準 
USER:
  指定UID或者username,來決定運行RUN指令的用戶 
ONBUILD:
  ONBUILD作為一個trigger的標記,可以用來trigger任何Dockerfile中的指令
  可以定義多個ONBUILD指令
  當下一個鏡像B使用鏡像A作為base的時候,在FROM A指令前,會先按照順序執行在構建A時候定義的ONBUILD指令
  ONBUILD <DOCKERFILE 指令> <content>
VOLUME:
  用來創建一個在image之外的mount point,用來在多個container之間實作資料共享
  運行使用json array的方式定義多個volume
  VOLUME ["/var/data1","/var/data2"]
  或者plain text的情況下定義多個VOLUME指令

7.2 使用Dockerfile創建云盤

7.2.1 準備需要的檔案

1.創建目錄
mkdir /root/dockerfile_kod/{code,conf,repo} -p


2.拷貝檔案到指定目錄
docker cp afc35bc7f8a1:/root/init.sh /root/dockerfile_kod/conf/
#構建好的目錄結構
[root@db01 ~]# tree  dockerfile_kod/
dockerfile_kod/
├── build.sh
├── code
│   └── kodexplorer4.40.zip
├── conf
│   ├── init.sh
│   ├── kod.conf
│   ├── nginx.conf
│   ├── php-fpm.conf
│   └── www.conf
├── dockerfile
└── repo
    ├── CentOS-Base.repo
    ├── epel.repo
    └── nginx.repo

7.2.2 撰寫dockerfile

[root@db01 dockerfile_kod]# cat dockerfile 
#0.基礎鏡像
FROM centos:7

#1.初始化操作
RUN groupadd www -g 1000
RUN useradd www -u 1000 -g 1000 -M -s /sbin/nologin
RUN rm -rf /etc/yum.repos.d/*
ADD repo/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
ADD repo/epel.repo /etc/yum.repos.d/epel.repo
ADD repo/nginx.repo /etc/yum.repos.d/nginx.repo

#2.安裝依賴環境 nginx+php
RUN yum makecache fast
RUN yum install nginx php-fpm php-mbstring php-gd unzip -y
RUN yum clean all

#3.配置Nginx和php
RUN rm -rf /etc/nginx/conf.d/default.conf
ADD conf/nginx.conf /etc/nginx/nginx.conf
ADD conf/kod.conf /etc/nginx/conf.d/kod.conf
ADD conf/php-fpm.conf /etc/php-fpm.conf
ADD conf/www.conf /etc/php-fpm.d/www.conf

#4.配置代碼
RUN mkdir /code 
WORKDIR /code 
ADD code/kodexplorer4.40.zip /code/kodexplorer4.40.zip
RUN unzip kodexplorer4.40.zip
RUN chown -R www:www /code 

#5.復制啟動腳本
ADD conf/init.sh /root/init.sh 

#6.啟動命令
CMD ["/bin/bash","/root/init.sh"]

7.2.3 構建新鏡像

[root@docker01 ~/dockerfile/kod]# docker build --network=host -t centos_kod:v1 .
[root@docker01 ~/dockerfile/kod]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_kod          v1                  87071ea7c86b        2 minutes ago       465MB

7.2.4 基于新鏡像運行容器

[root@docker01 ~/dockerfile/kod]# docker run -d -p 80:80 centos_kod:v1
4d1007d7194d434248762e5aca76070206643f0f0f533f2112d0359b25fe7ba0

7.2.5撰寫構建,啟動腳本

[root@db01 dockerfile_kod]# cat build.sh 
#!/bin/bash
docker stop $(docker ps -qa)
docker rm $(docker ps -qa)
docker build --network=host -t my_kod:v2 .
docker run -p 80:80 -d my_kod:v2 

Docker私有倉庫

8.1 普通的docker registry

8.2 帶認證的docker registry

8.3 企業級的docker-harbor

8.3.1 部署思路

第一步:安裝docker和docker-compose
第二步:下載harbor-offline-installer-v1.9.0-rc1.tgz
第三步:上傳到/opt,并解壓
第四步:修改harbor.yml組態檔 hostname = 10.0.0.11 harbor_admin_password = 123456
第五步:執行install.sh

8.3.2 安裝私有倉庫

1.下載軟體包
cd /opt
wget https://github.com/goharbor/harbor/releases/download/v1.9.3/harbor-offline-

installer-v1.9.3.tgz
上傳包
tar xf harbor-offline-installer-v1.9.0-rc1.tgz

2.修改配置
vim harbor.yml 
hostname: 10.0.0.51
harbor_admin_password: 123456

3.下載docker-compose,編排工具
yum install docker-compose -y 

4.安裝harbor
停止80埠執行
./install.sh

查看編排狀態
cd /opt/harbor
docker-compose ps

登錄:web 10.0.0.51 創建linux專案

5.修改鏡像名稱(鏡像的ID)
docker tag ae21150e3af8 10.0.0.51/linux/my_kod:v2
docker images

6.修改docker配置添加信任倉庫
cat >/etc/docker/daemon.json<<EOF 
{
  "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
  "insecure-registries": ["http://10.0.0.51"] 
}
EOF

#重啟docker
systemctl restart docker
docker-compose ps
docker-compose stop
docker-compose up -d

7.docker登錄到harbor
docker login 10.0.0.51

8.上傳鏡像到私有倉庫
docker push 10.0.0.51/linux/my_kod:v2

9.客戶端使用倉庫下載鏡像
洗掉已有的:注意.先停容器,在洗掉容器,鏡像 
docker pull 10.0.0.51/linux/my_kod:v2

8.3.3 其他主機上下載鏡像

[root@docker02 ~]# cat /etc/docker/daemon.json 
{
      "registry-mirrors": ["http://hub-mirror.c.163.com"],
      "insecure-registries": ["http://10.0.1.11"],
      "insecure-registries": ["https://10.0.1.11"] 
}
[root@docker02 ~]# docker pull 10.0.1.11/linux/centos_kod:v1

容器的基本架構圖

專案實戰:制作kvm管理工具容器

前提:新起一個容器,容器內操作

1.初始化
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安裝python依賴
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel
python -m pip install --upgrade --force pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install setuptools==33.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple


3.安裝python的Django環境
cd /opt/
git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
[root@402aca4eaa81 webvirtmgr]# chmod +x manage.py 

./manage.py syncdb
./manage.py collectstatic

4.安裝Nginx
cat>/etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum makecache fast
yum install nginx -y
yum clean all 

5.配置Nginx和代碼
mkdir /code
mv /opt/webvirtmgr /code/
chown -R nginx:nginx /code
rm -rf /etc/nginx/conf.d/default.conf
cat >/etc/nginx/conf.d/webvirtmgr.conf<<EOF
server {
    listen 80 default_server;

    server_name localhost;
    access_log /var/log/nginx/webvirtmgr_access_log; 

    location /static/ {
        root /code/webvirtmgr;        
        expires max;
    }
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-for \$proxy_add_x_forwarded_for;
        proxy_set_header Host \$host:\$server_port;
        proxy_set_header X-Forwarded-Proto \$scheme;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        client_max_body_size 1024M; 
    }
}
EOF
nginx -t
nginx
ss -lntup


6.配置Supervisor
cat >/etc/supervisord.d/webvirtmgr.ini<<EOF
[program:webvirtmgr]
command=/usr/bin/python /code/webvirtmgr/manage.py run_gunicorn -c /code/webvirtmgr/conf/gunicorn.conf.py
directory=/code/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx

[program:webvirtmgr-console]
command=/usr/bin/python /code/webvirtmgr/console/webvirtmgr-console
directory=/code/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx

[program:nginx]
command=nginx -g 'daemon off;'
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/nginx.log
redirect_stderr=true
EOF
sed -i "s#nodaemon=false#nodaemon=true#g" /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
supervisorctl status

7.創建用戶
mkdir /var/cache/nginx/.ssh/ -p
chown -R nginx:nginx /var/cache/nginx/
su - nginx -s /bin/bash
ssh-keygen
touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
chmod 0600 ~/.ssh/config
ssh-copy-id [email protected]

8.提交新鏡像
docker commit 402aca4eaa81 mykvm:v1

9.運行新容器,注意:其他埠有時會跳轉,

docker run --name mykvm3 -p 80:80  -it -d  mykvm:v1 supervisord -c /etc/supervisord.conf

docker監控

1.docker自帶的監控命令
docker container ps    :查看正在運行的容器
docker container top  +容器的id :知道某個容器運行了哪些行程
docker container stats +容器的id :顯示每個容器各種資源使用情況 

2.cAdvisor+ prometheus+ grafana組件介紹
組件介紹: 在不同頁面之間跳轉,并且只能監控一個host,這不免讓人質疑他的實用性,但cAdvisor有一個亮點是可以將監控到的資料匯出給第三方工具,有這些工具進一步加工處理,
所以我們可以把cAdvisor定位為一個監控資料收集器,收集和匯出資料是他的強項,而非展示資料,
cAdvisor支持很多第三方工具,其中就包含prometheus

#prometheus
Prometheus是一個非常優秀的監控工具,提供了監控資料搜集,存盤,處理,可視化和告警一系列完整的解決方案,包含組件
Node Exporter :負責收集host硬體和作業系統資料,以容器的形式運行在所有host上
cAdvisor      :負責收集容器資料,以容器的形式運行在所有host上

#grafana
grafana是一款支持多種資料源的圖形展示工具

3.部署
#地址規劃:
10.0.0.51   cAdvisor+ Node Exporter +prometheus+ grafana
10.0.0.52   cAdvisor+ Node Exporter

#docker01的組態檔:
mkdir prometheus
cd prometheus
#上傳壓縮包
docker load < 壓縮包
cat >docker-compose.yml<<EOF
version: '3.2'
services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
    - 9090:9090
    command:
    - --config.file=/etc/prometheus/prometheus.yml
    volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
    depends_on:
    - cadvisor

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    ports:
    - 9100:9100

  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
    - 3000:3000
EOF

#prometheus組態檔
cat >prometheus.yml <<EOF
scrape_configs:
- job_name: cadvisor
  scrape_interval: 5s
  static_configs:
  - targets:
    - 10.0.0.51:8080
    - 10.0.0.52:8080

- job_name: prometheus
  scrape_interval: 5s
  static_configs:
  - targets: 
    - 10.0.0.51:9090

- job_name: node_exporter
  scrape_interval: 5s
  static_configs:
  - targets: 
    - 10.0.0.51:9100
    - 10.0.0.52:9100
EOF

#docker02組態檔:
cat >docker-compose.yml<<EOF
version: '3.2'
services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    ports:
    - 9100:9100

  cadvisor:
    image: google/cadvisor:latest
    container_name: cadvisor
    ports:
    - 8080:8080
    volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
EOF

4.運行
ntpdate time1.aliyun.com
docker-compose up -d

5.檢查
http://10.0.0.51:8080/metrics
http://10.0.0.51:9100/metrics
http://10.0.0.51:9090
http://10.0.0.51:3000


登錄:10.0.0.51:3000

賬號:admin 密碼;admin

配置源地址

下載


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/45386.html

標籤:其他

上一篇:Kubernetes中網路相關知識

下一篇:期末作業

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more