2023年1月24日 星期二

win11或win10安裝docker

 1.安裝好win11並更新最新版本

2.在瀏覽器打docker desktop 或https://www.docker.com/products/docker-desktop/

選download docker desktop for windows 

3.執行下載後Docker Desktop Installer.exe

4.安裝後重新開機

5.執行Docker Desktop並選Accept

6.啟動很久或出現錯誤時

7.下載並安裝 WSL: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

8.安裝後重啟電腦

9.啟動Docker Desktop應該就可以了

2023年1月20日 星期五

ubuntu 安裝harbor

 安裝ubuntu 20.04.5後

設定固定IP

sudo vi /etc/netplan/00-installer-config.yaml

例如:

# This is the network config written by 'subiquity'

network:

  version: 2

  ethernets:

    ens32:

      dhcp4: false

      addresses: [192.168.0.50/24]

      routes:

      - to: default

        via: 192.168.0.1

      nameservers:

        addresses: [1.1.1.1,8.8.8.8]


重啟網路設定

sudo netplan apply


進入ubuntu

sudo apt-get update && sudo apt-get upgrade -y


更改系統的時區

看目前時區

timedatectl


修改時區

sudo timedatectl set-timezone Asia/Taipei


安裝docker

更新軟件存儲庫

sudo apt update


下載依賴項:允許您的 Ubuntu 20.04 系統通過 HTTPS 訪問 Docker 存儲庫

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common


添加 Docker 的 GPG 密鑰

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


安裝 Docker 存儲庫

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"


安裝最新的 Docker

先再次更新存儲庫

sudo apt update


安裝最新的 Docker 版本

sudo apt-get install -y docker-ce


驗證 Docker 安裝

docker --version


啟用 Docker 服務

sudo systemctl start docker

sudo systemctl enable docker


檢查服務的狀態

sudo systemctl status docker


在沒有 Sudo 的情況下運行 Docker 命令

創建docker組

sudo groupadd docker


鍵入以下命令(確保將[user]替換 為您的用戶名,但別保留[])

sudo usermod -aG docker [user]

例如

sudo usermod -aG docker sct


啟用新設置

su - [user]

例如

su - sct


檢查以確認用戶現在是 docker 組的一部分

id -nG


測試

docker run hello-world


-----------------------------------------------------------------

安裝Docker Compose

sudo curl -L https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo curl -L https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose


設定執行權限

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


看版本

docker-compose --version


----------------------------------------------------------------

安裝Harbor

要先安裝 Docker 與 Docker Compose

獲得的安裝包位置

wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz


解壓縮

tar xvf harbor-offline-installer-v2.6.2.tgz


修改harbor.yml

cd harbor

sudo cp harbor.yml.tmpl harbor.yml

sudo vi harbor.yml

修改hostname、先將happs拿掉、登入admin密碼及資料庫密碼

hostname: 192.168.137.200

#https:

  # https port for harbor, default is 443

  #  port: 443

  # The path of cert and key files for nginx

  #  certificate: /your/certificate/path

  #  private_key: /your/private/key/path

harbor_admin_password: Taisugar1

database:

  password: Taisugar1


修改完成後執行 sudo ./install.sh


完成後開啟瀏覽器http://192.168.137.200登入

也可以docker login 192.168.137.200

重開機後要輸入sudo docker-compose up -d 


-------------------------------------------------------------

使用HTTPS

建置放證書的目錄

sudo mkdir -p /data/certs

cd /data/certs


產生CA證書

創建key文件:

sudo openssl genrsa -out ca.key 4096

產生證書

sudo openssl req -x509 -new -nodes -sha512 -days 3650 -subj "/CN=192.168.137.200" -key ca.key -out ca.crt


產生服務器證書

創建私鑰

sudo openssl genrsa -out server.key 4096

產生證書簽名請求

sudo openssl req -new -sha512 -subj "/CN=192.168.137.200" -key server.key -out server.csr


產生harbor倉庫主機的證書

產生一個x509 v3擴展文件

sudo vim v3.ext


authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

extendedKeyUsage = serverAuth

subjectAltName = IP:192.168.137.200



使用此v3.ext文件為您的Harbor主機產生證書

sudo openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt


配置和安裝證書

將server.crt文件和server.key文件拷貝到此目錄/data/cert下

因為我前面一直是在這個路徑操作的就省略了該步驟

修改harbor的配置文件 修改以下配置項

root@eb7023:/data/certs>sudo vim ~/harbor/harbor.yml

hostname: 192.168.137.200

https:

port:443

certificate: /data/certs/server.crt

private_key: /data/certs/server.key


可以重啟一下harbor倉庫了,注意這里要CD到harbor解壓目錄

cd /home/sct/harbor/

sudo ./prepare


停止當前運行的harbor

sudo docker-compose down -v


後台運行的harbor

sudo docker-compose up -d


為docker配置harbor認證

將server證書cp到docker所在的機器固定目錄中

sudo mkdir -p /etc/docker/certs.d/192.168.137.200

cd /data/certs/

sudo cp server.crt /etc/docker/certs.d/192.168.137.200/server.crt


然后docker直接login即可

docker login 192.168.137.200


將 Harbor 設置為系統服務

編輯文件 sudo vim /lib/systemd/system/harbor.service


[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/local/bin/docker-compose -f /home/sct/harbor/docker-compose.yml up

ExecStop =/usr/local/bin/docker-compose -f /home/sct/harbor/docker-compose.yml down


[Install]

WantedBy=multi-user.target


sudo systemctl start harbor

sudo systemctl enable harbor



------------------------------------------------------------------------------------

測試建置Harbor倉庫主機是否可行

以瀏覽器登入

https://192.168.137.200

在左邊點選項目-->選新建項目-->填入項目名稱(例如ithome),確定即可


透過 Docker login 到 https://192.168.137.200

下載我本來放在 Docker hub 上的 Image,並透過 docker tag 將其重新命名

docker pull hwchiu/netutils

docker tag hwchiu/netutils 192.168.137.200/ithome/netutils:latest


將新命名的 docker image 推向我們建置的 Harbor container registry

docker push 192.168.137.200/ithome/netutils:latest


瀏覽器登入192.168.137.200 看netutils是否在ithome項目目錄中


-------------------------------------------------------------------------

安裝掃描器(掃漏洞)

先停止服務

sudo systemctl stop harbor


安裝掃描器

cd /home/sct/harbor

sudo ./install.sh --with-notary --with-trivy --with-chartmuseum


啟動服務

sudo systemctl start harbor


登入瀏覽器,進入項目,點選項目名稱,再點選鏡像倉庫名稱,選工作,選掃描即可













































2023年1月18日 星期三

2023年1月17日 星期二

如何在 Windows 中以命令行方式執行 Windows Update 更新

 1.windows 10以上

使用 CMD 執行 Windows Update 更新(需要系統管理員執行命令)

UsoClient ScanInstallWait  --檢查、下載和安裝更新    
安裝更新后重新啟動設備
UsoClient RestartDevice 


2.windows 10以下

使用 CMD 執行 Windows Update 更新(需要系統管理員執行命令)

wuauclt /detectnow /updatenow  --檢查、下載和安裝更新    

2023年1月13日 星期五

portainer安裝

 Portainer 是一款輕量級的應用,它提供了圖形化界面,用於方便地管理Docker環境,包括單機環境和集群環境。

安裝

Portainer 生成並使用自簽名 SSL 證書來保護端口 9443--https

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest


如果您出於某些原因需要打開 HTTP 端口 9000--http

docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

開瀏覽器登入https://IP:9443或http://IP:9000

輸入admin的密碼,選local端即可看見container、images等的訊息

相似打docker system df 一樣



2023年1月12日 星期四

docker compose

 Docker-ComposeDocker官方的目, 負責實現對Docker容器集群的快速編輯排列

Compose Docker 公司推出的一個工具軟件,可以管理多個 Docker 容器組成一個應用。你需要定義一個 YAML 格式的配置文件docker-compose.yml寫好多個容器之間的調用關係。然后,只要一個命令,就能同時啟動/關閉這些容器

docker建議我們每一個容器中只運行一個服務,因為docker容器本身占用資源極少,所以最好是將每個服務單獨的分割開來但是這樣我們又面臨了一個問題?

如果我需要同時部署好多個服務,難道要每個服務單獨寫Dockerfile然后在構建鏡像,建容器,因此,docker官方給我們提供了docker-compose多服務部署的工具

例如要實現一個Web微服務項目,除了Web服務容器本身,往往還需要再加上后端的數據庫mysql服務容器,redis服務器,注冊中心eureka,甚至還包括負載均衡容器等等。。。。。。

Compose允許用戶通過一個單獨的docker-compose.yml模板文件YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。

可以很容易地用一個配置文件定義一個多容器的應用,然后使用一條指令安裝這個應用的所有依賴,完成構建。Docker-Compose 解決了容器與容器之間如何管理編排的問題。

compose版本請參考https://docs.docker.com/compose/compose-file/compose-file-v3/

目前均以3.0以上為準

---------------------------------------------------------------

安裝Docker Compose步驟

1.下載Docker Compose

sudo curl -L https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

2.設定執行權限

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

3.看版本

docker-compose --version

--------------------------------------------------

卸載Docker Compose

3.1基於Ubuntu版本Linux

3.1.1 自動安裝后卸載

1.執行apt-get remove docker-compose-plugin命令卸載docker compose。

sudo apt-get remove docker-compose-plugin

2.執行docker-compose --version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker-compose --version

bash: /usr/local/bin/docker-compose: No such file or directory

3.1.2 手動安裝后卸載

方法1-pip卸載

1.執行pip uninstall docker-compose命令進行卸載。

sudo pip uninstall docker-compose

2.執行docker-compose --version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker-compose --version

bash: /usr/local/bin/docker-compose: No such file or directory

方法2-rm卸載

1.執行rm /usr/local/bin/docker-compose -f命令進行rm卸載。

sudo rm /usr/local/bin/docker-compose -f

2.執行docker compose version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker-compose --version

bash: /usr/local/bin/docker-compose: No such file or directory


3.2基於Centos版本Linux

3.2.1 自動安裝后卸載

1.執行yum remove docker-compose-plugin命令卸載docker compose。

sudo yum remove docker-compose-plugin

2.執行docker-compose --version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker compose version

docker: 'compose' is not a docker command.

See 'docker --help'

3.2.2 手動安裝后卸載

方法1-pip卸載

1.執行pip uninstall docker-compose命令進行卸載。

sudo pip uninstall docker-compose

2.執行docker compose version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker-compose --version

bash: /usr/local/bin/docker-compose: No such file or directory

方法2-rm卸載

1.執行rm /usr/local/bin/docker-compose -f命令進行rm卸載。

sudo rm /usr/local/bin/docker-compose -f

2.執行docker compose version命令查看Docker Compose版本。這里觀察到,已成功卸載。

docker-compose --version

bash: /usr/local/bin/docker-compose: No such file or directory

--------------------------------------------------------------------------------

service)--個個應用容器

個個應用容器例,比如訂單微服存微服mysql容器、nginx容器或者redis容器
工程(project)--多個服務(用容器)
由一組關聯用容器成的一完整業務單,在 docker-compose.yml 文件中定
Compose使用的三
1.編寫Dockerfile微服務應用并建出對應像文件
2.使用 docker-compose.yml 完整業務單元,安排好整體應用中的各容器服
3.最后,docker-compose up命令 來啟動行整個應用程序,完成一部署上
Compose常用命令

docker-compose -h # 查看幫助

docker-compose up # 啟動所有docker-compose服務

docker-compose up -d # 啟動所有docker-compose服務并后台運行

docker-compose down # 停止并刪除容器、網路、卷、鏡像。

docker-compose exec yml里面的服務id # 進入容器實例內部 docker-compose exec docker-compose.yml文件中寫的服務id /bin/bash

docker-compose ps # 展示當前docker-compose編排過的運行的所有容器

docker-compose top # 展示當前docker-compose編排過的容器進程

docker-compose logs yml里面的服務id # 查看容器輸出日志

docker-compose config # 檢查配置

docker-compose config -q # 檢查配置,有問題才有輸出

docker-compose restart # 重啟服務

docker-compose start # 啟動服務

docker-compose stop # 停止服務





2023年1月7日 星期六

docker 網路

 docker network ls  默認創建以下網路模式

bridge--為每一個容器分配、設置IP等,並將容器連接到一個docker0的虛擬網橋,默認為該模式

使用--network bridge指定,默認使用docker0

---------------------------

host--容器將不會虛擬出仔己的網咖,配置自己的IP等,而是使用宿主機的IP和端口

使用--network host指定

--------------------------

none--容器有獨立的network namespace,但並沒有對其進行任何網路設置,如分配veth pair和網橋連接,IP等

使用--network none指定

----------------------------

container--新創見的容器不會創建自己的網髂和配置自己的IP,而是和一個指定的容器共享IP端口範圍等

使用--network container:NAME或是容器ID指定

-----------------------------

自建

--------------------------------------------------------------

列出網路

docker network ls

------------------------------------------------------------------

自建網路

docker network create 網路名稱

例如:docker network create aa_network         aa_network 默認網橋模式(bridge)

--------------------------------------------------------------------

刪除網路

docker network rm 網路名稱

例如:docker network rm aa_network

----------------------------------------------------------------------

列出網路明細(數據源)

docker network inspect 網路名稱

例如:docker network inspect bridge

----------------------------------------------------------------------

容器IP變動時,可以通過服務名稱直接網路通信而不受到影響--也就是說要有服務名稱,當容器IP變更時,不受其影響,只要服務名稱不變即可

-------------------------------------------

例如

docker run -it --name u1 ubuntu bash

docker inspect u1   看網路,內定bridge

            "Networks": {

                "bridge": {

                    "IPAMConfig": null,

                    "Links": null,

                    "Aliases": null,

                    "NetworkID": "16b96c434cc7a5a0200e9fc57ce35bf8d7c863865d30d9edf4ff79e5dfc8c415",

                    "EndpointID": "d52c26e1c2b0113499dab785cec3eefa260b0f268174d9003ae88566328de4c1",

                    "Gateway": "172.17.0.1",

                    "IPAddress": "172.17.0.2",

因inspect太多資訊可以下docker inspect u1 | tail -n 20  --列出最後20行

---------------------------------------------------------

bridge模式

Host 網路-->en33

docker0網路-->vethxxxx@ifzz

container網路-->eth0@ifyy

-------------------------------------------------------

host模式

container網路-->Host網路  --與HOST共用網路

例如:

docker run -d -p 8083:8080 --network host --name tomcat83 billygoo/tomcat8-jdk8  --會警告

docker run -d                        --network host --name tomcat83 billygoo/tomcat8-jdk8 --正確

訪問container -->http://宿主機IP:8080

容器IP借用宿主機的IP

------------------------------------------

none模式(少用)

禁用網路功能,只有lo標誌(127.0.0.1) -->進入container中,打ip addr

------------------------------------------

container模式

使用--network container:NAME或者容器ID指定

錯誤範例

docker run  -d  -p 8081:8080                                                         --name tomcat81 billygoo/tomcat8-jdk8

docker run  -d  -p 8082:8080  --network container:tomcat85  --name tomcat82 billygoo/tomcat8-jdk8

會出現問題,相當於tomcat82tomcat81公用同一個ip同一個端口,導致端口沖突

正確範例

docker run  -it                                                    --name alpine1 alpine /bin/sh

docker run  -it  --network container:alpine1  --name alpine2 alpine /bin/sh

假如此時關閉alpine1,再看看alpine2,網路剩lo

----------------------------------------------------

網路自定義

未使用網路名

docker run  -d  -p 8081:8080    --name tomcat81 billygoo/tomcat8-jdk8

docker run  -d  -p 8082:8080    --name tomcat82 billygoo/tomcat8-jdk8

上述成功啟動後用docker exec入各自容器

按照IP地址pingOK的,但按照服ping出現Name or service not know,且容器IP會因容器關閉後重啟後有所改變

使用網路名

自定義橋網路,自定網路使用的是網路bridge

新建自定義網路

例如

docker   network create abc_network

docker run  -d  -p 8081:8080  --network abc_network  --name tomcat81 billygoo/tomcat8-jdk8

docker run  -d  -p 8082:8080  --network abc_network  --name tomcat82 billygoo/tomcat8-jdk8

成功啟動後用docker exec入各自容器

按照IP地址pingOK的,但按照服ping也是OK

自定義網路本身就維護好了主名和ip對應關係(ip和域名都能通)





2023年1月5日 星期四

虛懸鏡像(dangling image)

 倉庫名(REPOSITORY)及標籤(TAG)都是<none>的鏡像

如何查看  docker images ls -f dangling=true

如何刪除  docker image prune