2022年12月28日 星期三

Docker Dockerfile使用

 Dockerfile --製作image 鏡像腳本文件

1.編寫Dockerfile文件

2.docker build 構建鏡像

3.docker run 依鏡像運行容器實例

Dockerfile內容知識

1.Dockerfile每條保留字指令必須要大寫字母且後面要跟隨至少一個參數

2.指令按照從上到下,順序執行

3.#表註解

4.每條指令均會建置一個新的鏡像層並對鏡像進行提交

5.上層映像如有異動,以下所有映像層均會重新建置,所以將常異動的映像層放在底下

Docker執行Dockerfile流程

1.docker從基礎鏡像運行一個容器

2.執行一條指令並對容器做出修改

3.執行類似docker commit的操作提交一個新的鏡像層

4.docker在基於剛提交的鏡像運行一個新容器

5.執行dockerfile中的下一條指令直到所有指令都執行完成

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

例如:在centos中加入vim,ifconfig,jdk8,先下載jdk-8u171-linux-x64.tar.gz與Dockerfile同一目錄

#基礎鏡像來源

FROM centos

MAINTAINER sct<xxx@gmail.com>

ENV MYPATH /usr/local

WORKDIR $MYPATH

#安裝vim

RUN yum -y install vim

#安裝ifconfig

RUN yum -y install net-tools

#安裝java8及lib

RUN yum -y install glibc.i686

RUN mkdir /usr/local/java

#ADD 是相對路徑jar,把jdk-8u171-linux-x64.tar.gz加入容器中,安裝包必須與Dockerfile文件在同一位置

#ADD將宿主機目錄下的文件拷貝進鏡像且會自動處理URL及解壓tar壓縮包

ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/

#配置java環境變量

ENV JAVA_HOME /usr/local/jdk1.8.0_171

ENV JRE_HOME $JAVA_HOME/jre

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH

EXPOSE 80

CMD echo $MYPATH

CMD echo "success........ok"

CMD /bin/bash

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

建置Dockerfile

docker build -t 新鏡像名字:TAG .     -->後面要有個 . ,表示目前目錄下構建docker image

docker build -t centosjava8:1.5 .

docker build --tag centosjava8:1.5 .

運行測試

docker run -it 新鏡像名字:TAG

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

多階段建置映像檔方式

建置Dockerfile其順序為由上而下產生,每一行均產生一個image,如果有一行變動,其以下均會重新產生新的image,浪費時間,所以會將常異動的指令放在底下,但要注意指令的先後順序。

重新build後,檔案會變大時,就需要使用--多階段建置映像檔方式

例如:

FROM alpine:3.16.2 AS test1

RUN echo 'Builder' > /example.txt


FROM alpine:3.16.2 AS tester

COPY --from=test1 /example.txt /example.txt

RUN echo 'Tester' >> /example.txt


FROM alpine:3.16.2

COPY --from=tester /example.txt /example.txt

CMD [ "cat","/example.txt" ]

...

FROM與FROM之間為一個階段,階段完成後,就會將前一個階段編譯的工具丟棄,大幅減少了映像檔的大小。

其精華在COPY --from,讓我們從另一個映像檔複製檔案到現階段的映像檔。

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

使用.dockerignore

在Dockerfile目錄加入.dockerignore 檔案,其內容如

.dockerignore 

./README.md

./Dockerfile

如果Dockerfile中有COPY . .

將會把README.md及Dockerfile排除


2022年12月27日 星期二

docker mysql 主從複製

 1.主服務器

docker run -p 3307:3306 --name mysql-master \

-v /mydata/mysql-master/log:/var/log/mysql \

-v /mydata/mysql-master/data:/var/lib/mysql \

-v /mydata/mysql-master/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

2.在/mydata/mysql-master/conf 新建my.cnf

cd /mydata/mysql-master/conf 

sudo vi my.cnf

[mysqld]

##設置server_id,同一網域中需要唯一

server_id=101

##指定不需要同步的數據名稱

binlog-ignore-db=mysql

##開啟二進制日誌功能

log-bin=mall-mysql-bin

##設置二進制日誌使用記憶體大小(事務)

binlog_cache_size=1M

##設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed

##二進制日誌過期清理時間。默認值為0,表示不自動清理

expire_logs_days=7

##跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷

##如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從數據不一致

slave_skip_errors=1062

3.修改後重啟master

docker restart mysql-master

4.進入mysql-master 容器

docker exec -it mysql-master /bin/bash

mysql -uroot -proot

show databases;

5.mysql-master容器內建數據同步用戶

create user 'slave'@'%' identified by '12345678';

grant replication slave,replication client on *.* to 'slave'@'%';

6.新建從服務器

docker run -p 3308:3306 --name mysql-slave \

-v /mydatamysql-slave/log:/var/log/mysql \

-v /mydata/mysql-slave/data:/var/lib/mysql \

-v /mydata/mysql-slave/conf:/etc/mysql \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:5.7

7.在/mydata/mysql-slave/conf 新建my.cnf

cd /mydata/mysql-slave/conf 

sudo vi my.cnf

[mysqld]

##設置server_id,同一網域中需要唯一

server_id=102

##指定不需要同步的數據名稱

binlog-ignore-db=mysql

##開啟二進制日誌功能,以備slave作為其他數據實例的master時使用

log-bin=mall-mysql-slave1-bin

##設置二進制日誌使用記憶體大小(事務)

binlog_cache_size=1M

##設置使用的二進制日誌格式(mixed,statement,row)

binlog_format=mixed

##二進制日誌過期清理時間。默認值為0,表示不自動清理

expire_logs_days=7

##跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷

##如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從數據不一致

slave_skip_errors=1062

##relay_log配置中繼日誌

relay_log=mall-mysql-relay-bin

##log_slave_updates表示slave將複製事件寫入自己的二進制日誌

log_slave_updates=1

##slave設置為只讀(具有super權限的用戶除外)

read_only=1

8.修改後重啟slave

docker restart mysql-slave

9.在主數據庫中查看主從同步狀態

在主服務器的mysql中,show master status;

10.進入mysql-slave 容器

docker exec -it mysql-slave /bin/bash

mysql -uroot -proot

show databases;

11.在從服務器數據庫中配置主從複製-->在mysql中

change master to master_host='宿主機IP',master_user='slave',master_password='12345678',master_port=3307,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_count_retry=30;

12.在從服務器數據庫中查看主從同步狀態

show slave status \G;

看slave_io_running:no   slave_sql_running:no -->表示還沒開始同步

13.在從服務器數據庫中開啟主從同步

start slave;

14.查看從服務器數據庫狀態發現已經同步

show slave status \G;

看slave_io_running:yes   slave_sql_running:yes -->表示已經開始同步

15.主從複製測試

在主服務器數據庫

create database db01;

use db01;

create table t1 (id int,name varchar(20));

insert into t1 values(1,'z3');

select * from t1;

在從服務器數據庫

use db01;

select * from t1;

看資料是否有進來





2022年12月26日 星期一

docker 虛懸鏡像

 那些標簽像被稱為懸虛鏡像,在列表中展示<none>:<none>

查詢顯示虛懸鏡像

docker images -f dangling=true

刪除虛懸鏡像

docker rmi $(docker images -q -f dangling=true) 或 docker image prune



2022年12月23日 星期五

Ubuntu 如何啟用,停用 root 帳號與切換為 root 使用者

參考:http://joshchangs.blogspot.com/2017/03/ubuntu-root-root.html

查 root 帳號是否有被啟動

sudo passwd -S root

root L 08/09/2022 0 99999 7 -1  --P 為啟動狀態,L 為停用狀態

要停用 root 帳號 

sudo passwd -l root
或者
sudo passwd -p '!' root


Ubuntu 原本的 root 是預設尚未設定密碼(不是空白密碼), 第一次使用root的話使用sudo passwd root指令, 若之前尚未使用sudo執行其他指令, 此時一樣會提示你輸入你的使用者密碼(sudo確認身份用的).
當此密碼通過後, sudo會執行後面的指令, 也就是用root權限執行 passwd root(修改root密碼), 跟著系統提示輸入兩次root密碼後就將root密碼改成功了!

sct@sct-linux:~$ sudo passwd root
[sudo] password for sct: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully


以後若不想用 sudo 而想直接用 root 權限的話就使用 su - 切換進 root 身份即可

sct@sct-linux:~$ su -
Password: 
root@sct-linux:~#



2022年12月22日 星期四

Docker 建置 mysql

 1.docker run -d -p 3306:3306 --privileged=true    \

    -v /abc/mysql/log:/var/log/mysql    \

    -v /abc/mysql/data:/var/lib/mysql    \

    -v /abc/mysql/conf:/etc/mysql/conf.d    \

    -e MYSQL_ROOT_PASSWORD=12345678    \

    --name=mysql    \

    mysql:5.7

2.新建my.cnf

cd /abc/mysql/conf

vi my.cnf

加入

[client]

default_character_set=utf8

[mysqld]

collation_server=utf8_general_ci

character_set_server=utf8

3.重新啟動mysql容器,再進入查看字符編碼

docker restart mysql

docker exec -it mysql bash

mysql -uroot -p

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

4.測試,看中文是否為亂碼

show databases;

create database db01;

use db01;

create table t1(id int,name varchar(40));

insert into t1 values(1,'u3');

insert into t1 values(2,'王五');

select * from t1;

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

安裝mysql 8

docker run --name 容器名稱 -d  mysql --net=網路名稱 -p xxxx:xxxx --privileged=true  \

-e MYSQL_ROOT_PASSWORD=MYSQL的管理員密碼 \

-e MYSQL_DATABASE=資料庫網域名稱 \

-e MYSQL_USER=MYSQL的使用者名稱 \

-e MYSQL_PASSWORD=MYSQL的使用者密碼 \

--character-set-server=字元編碼 \

--collationserver=字符對照表 \

--default-authentication-plugin=驗證方式

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

例如

docker network create netmysql

docker run --name mymysql -d --net=netmysql -p 3306:3306 --privileged=true \

-e MYSQL_ROOT_PASSWORD='12345678' \

-e MYSQL_DATABASE=sctmysql \

-e MYSQL_USER=sct \

-e MYSQL_PASSWORD='sct123456' \

mysql \

--character-set-server=utf8mb4 \

--collation-server=utf8mb4_unicode_ci \

--default-authentication-plugin=mysql_native_password


=============================================

docker run -d -p 3306:3306 --privileged=true    \

-v /abc/mysql/log:/var/log/mysql    \

-v /abc/mysql/data:/var/lib/mysql    \

-v /abc/mysql/conf:/etc/mysql/conf.d    \

-e MYSQL_ROOT_PASSWORD=12345678    \

-e MYSQL_DATABASE=sctmysql \

-e MYSQL_USER=sct \

-e MYSQL_PASSWORD='sct123456' \

--name=mysql \

mysql


vi my.cnf

加入

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

collation-server=utf8mb4_unicode_ci

character-set-server = utf8mb4

character-set-client-handshake = FALSE




2022年12月14日 星期三

Hyper-v設定巢狀虛擬化

設定巢狀虛擬化--關閉虛擬機,以系統管理員開啟PowerShell

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

停用巢狀虛擬化--關閉虛擬機,以系統管理員開啟PowerShell

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

改變 MAC 位址--關閉虛擬機,以系統管理員開啟PowerShell

Get-VMNetworkAdapter -VMName <VMName> | Set-VMNetworkAdapter -MacAddressSpoofing On


參考:https://learn.microsoft.com/zh-tw/virtualization/hyper-v-on-windows/user-guide/nested-virtualization

2022年11月29日 星期二

在windows中使用ssh、scp命令

 1.windows安裝openssh server

首先需要用管理員身份啟動 PowerShell,使用如下命令看一下,要確保 OpenSSH 可用於安裝:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

輸出應該是類似的結果:

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent
Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

然後使用 PowerShell 安裝伺服器即可:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

輸出結果類似:

Path          :
Online        : True
RestartNeeded : False

這樣就可以完成 OpenSSH 的安裝。參考https://www.gushiciku.cn/pl/2GFQ/zh-tw

接下來用系統管理員身分打開 PowerShell,並輸入以下指令:

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

第一行是用來開啟 Server,第二行則是讓系統開機是自動啟用。


最後確認一下防火牆是否是放開的:

Get-NetFirewallRule -Name *ssh*

如果是放開的,那麼結果會提示 OpenSSH-Server-In-TCP 這個狀態是 enabled。


SH 連線登入

到這一步總算是完成啦!基本上最後是最簡單的部分,也就是用其他電腦連線到你的桌機。要注意的是如果其他電腦是 Windows 10,也是要到設定去安裝 OpenSSH 用戶端。
接下來輸入以下指令

ssh 使用者名稱@實體IP位置

使用者名稱為主機的使用者,輸入完主機的密碼就大功告成啦!


SCP 指令使用教學


scp [參數] [使用者@主機IP]:來源檔案 [使用者@主機IP]:目的檔案
Bash
常用參數:
-p: 保留原本檔案資訊和權限
-C: 壓縮
-r: 遞迴複製整個資料夾的所有資料
-P: 後面接連接埠號碼,使用指定連接埠
-v: 顯示詳細資訊
-4: 強制使用 IPv4
-6: 強制使用 IPv6

例如將windows 本機的檔案傳到 遠端windows 桌面上

scp D:\Desktop\1111.txt sct@192.168.137.104:C:\Users\sct\Desktop

例如將 遠端windows 桌面上的檔案傳回本機

scp sct@192.168.137.104:C:\Users\sct\Desktop\1111.txt e:\test

參考:https://medium.com/@fortunatemaker2603/ssh-%E9%81%A0%E7%AB%AF%E9%80%A3%E7%B7%9A%E5%9B%9E%E5%AE%B6%E4%B8%AD%E7%9A%84-windows-%E9%9B%BB%E8%85%A6-7e5267ae1e93

https://www.ruyut.com/2022/04/scp-copy-file.html

2022年11月21日 星期一

ubuntu 簡易安裝docker zabbix

 ubuntu要先安裝docker及docker-compose

Detailed Guide – Method: 1

The example demonstrates how to run Zabbix server with MySQL database support, Zabbix web interface based on the Nginx web server and Zabbix Java gateway.


1. Create network dedicated for Zabbix component containers:

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net


2. Start empty MySQL server instance

# docker run --name mysql-server -t \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix_pwd" \

      -e MYSQL_ROOT_PASSWORD="root_pwd" \

      --network=zabbix-net \

      -d mysql:5.7 \

      --character-set-server=utf8 --collation-server=utf8_bin


3. Start Zabbix Java gateway instance

# docker run --name zabbix-java-gateway -t \

      --network=zabbix-net \

      --restart unless-stopped \

      -d zabbix/zabbix-java-gateway:alpine-5.4-latest


4. Start Zabbix server instance and link the instance with created MySQL server instance

# docker run --name zabbix-server-mysql -t \

      -e DB_SERVER_HOST="mysql-server" \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix_pwd" \

      -e MYSQL_ROOT_PASSWORD="root_pwd" \

      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \

      --network=zabbix-net \

      -p 10051:10051 \

      --restart unless-stopped \

      -d zabbix/zabbix-server-mysql:alpine-5.4-latest


5. Start Zabbix web interface and link the instance with created MySQL server and Zabbix server instances

# docker run --name zabbix-web-nginx-mysql -t \

      -e ZBX_SERVER_HOST="zabbix-server-mysql" \

      -e DB_SERVER_HOST="mysql-server" \

      -e MYSQL_DATABASE="zabbix" \

      -e MYSQL_USER="zabbix" \

      -e MYSQL_PASSWORD="zabbix_pwd" \

      -e MYSQL_ROOT_PASSWORD="root_pwd" \

      --network=zabbix-net \

      -p 80:8080 \

      --restart unless-stopped \

      -d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest


Zabbix web interface instance exposes 80/TCP port (HTTP) to host machine.



Zabbix server主机安装Zabbix agent2服务

#sudo mkdir /var/lib/docker/volumes/zabbix-agent2-volume

#docker volume create zabbix-agent2-volume

#docker run -v /etc/localtime:/etc/localtime \

      --name zabbix-agent2 \

      -v zabbix-agent2-volume:/etc/zabbix \

      -e ZBX_HOSTNAME="zabbix-server" \

      -e ZBX_SERVER_HOST="zabbix-server-mysql" \

      -p 10050:10050 \

      -e ZBX_SERVER_PORT=10051 \

      -v ${server_dir}/agent2/modules:/var/lib/zabbix/modules \

      --privileged \

      --network=zabbix-net \

      --restart unless-stopped \

      -d zabbix/zabbix-agent2:ubuntu-6.0-latest

ubuntu 20.04.5安裝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:

    eth0:

      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 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 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 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: Windows1

database:

  password: Windows1


修改完成後執行 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


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


安裝ubuntu 20.04.5後 設定固定IP

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

例如:

# This is the network config written by 'subiquity'

network:

  ethernets:

    eth0:

      dhcp4: no

      addresses: [192.168.137.200/24]

      optional: true

      gateway4: 192.168.137.1

      nameservers:

        addresses: [8.8.8.8, 8.8.4.4]

  version: 2


重啟網路設定

sudo netplan apply


更改系統的時區

看目前時區

timedatectl

修改時區

sudo timedatectl set-timezone Asia/Taipei


2022年10月2日 星期日

PowerShell 一長行如何分隔多行

 docker run -p 3307:3306 --name mysql-master ` 

-v e:\mydata\mysql-master\log:/var/log/mysql `

-v e:\mydata\mysql-master\data:/var/lib/mysql `

-v e:\mydata\mysql-master\conf:/etc/mysql `

-e MYSQL_ROOT_PASSWORD=root `

-d mysql:5.7


可以使用反勾号`(ESC下方第一个键),且要與最後一個字有空格


2022年7月15日 星期五

mysql 授權root遠端存取

Mysql 5.7版為

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '!QAZ@WSX' WITH GRANT OPTION;

FLUSH PRIVILEGES;

exit


Mysql 8版為

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '!QAZ@WSX';

FLUSH PRIVILEGES;

exit


CREATE USER 'root'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* to 'root'@'%';

FLUSH PRIVILEGES;

exit


2022年7月10日 星期日

如何把powershell或終端機一行命令分割成多行?

 可以使用反勾号`(ESC下方第一个键)来进行换行

例如:

docker run --name mysql-server -t `

      -e MYSQL_DATABASE="zabbix" `

      -e MYSQL_USER="zabbix" `

      -e MYSQL_PASSWORD="!QAZ@WSX" `

      -e MYSQL_ROOT_PASSWORD="!QAZ@WSX" `

      --network=zabbix-net `

      -d mysql:8.0 `

      --restart unless-stopped `

      --character-set-server=utf8 --collation-server=utf8_bin `

      --default-authentication-plugin=mysql_native_password

2022年7月6日 星期三

docker ubuntu 時間不對

apt update  --一定要先做,否則以下無法安裝

apt-get -y install tzdata

mv /etc/localtime /etc/localtime1  --如果原先有檔案的話

cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime

2022年6月1日 星期三

Docker 一些指令

建立docker 網路

docker network create 網路名稱

例如:docker network create net1

建立mysql (mariadb)容器及啟動時的選項與參數

docker run --name 容器名稱 -dit --net=網路名稱 -e MYSQL_ROOT_PASSWORD=mysql的管理員密碼 -e MYSQL_DATABASE=資料庫網域名稱 -e MYSQL_USER=mysql的使用者名稱 -e MYSQL_PASSWORD=mysql的使用者密碼 mysql(mariadb) --character-set-server=字元編號 --collation-server=字符對照表 --default-authentication-plugin=驗證方式

例如:docker run --name mysqltest -dit --net=net1 -e MYSQL_ROOT_PASSWORD=Mysqltest1@ -e MYSQL_DATABASE=wordpressdb -e MYSQL_USER=wordpress001 -e MYSQL_PASSWORD=testPress mysql(mariadb) --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password

建立程式容器(container)

例如建立wordpress容器與mysql、網路連線

docker run --name wordpress01 -dit --net=net1 -p 8085:80 -e WORDPRESS_DB_HOST=mysqltest -e WORDPRESS_DB_NAME=wordpressdb -e WORDPRESS_DB_USER=wordpress001 -e WORDPRESS_DB_PASSWORD=testPress wordpress

確認容器執行狀況

docker ps  在status 是否Up

docker ps -a 列出容器清單在status 有Up或Exited

刪除容器--必須先停止再刪除,docker stop 容器名稱,docker rm容器名稱

例如:docker stop wrodpress01

docker stop mysqltest

docker rm wordpress01

docker rm mysqltest

刪除映像檔(image)

docker image rm 映像檔名稱

例如:docker image rm mysql,docker image rm wordpress

刪除網路

docker network rm 網路名稱

例如:docker network rm net1

顯示清單

容器:docker ps -a

映像檔:docker image ls

網路:docker network ls

卷宗:docker volume ls

容器與主機間的檔案複製, CP 源頭 目的地

docker cp 複製源頭 複製目的地

docker cp 主機端路徑 容器名稱:容器端路徑  主機-->容器

docker cp 容器名稱:容器端路徑  主機端路徑 容器-->主機

掛載儲存空間分卷宗掛載及繫結掛載

卷宗掛載:在Docker Engine 管理空間中建立卷宗,再當作硬碟掛載至容器

常用於放置想要臨時使用的資料、少用但不可刪除的檔案

繫結掛載:在安裝Docker的電腦,不再Docker Engine 管理下的既存目錄掛載至容器

常用來存放需要頻繁使用的檔案

建立卷宗(卷宗掛載)

docker volume create 卷宗名稱

例如:docker volume create appvol01

顯示卷宗的詳細資訊

docker volume inspect 卷宗名稱

例如:docker volume inspect appvol01

刪除卷宗(卷宗掛載)

docker volume rm 卷宗名稱

例如:docker volume rm appvol01

掛載儲存空間指令

docker run -it --privileged=true /宿主機絕對路徑目錄:/容器內目錄 鏡像名

默認目錄為rw

繫結掛載:docker run (省略) -v 實際的儲存空間路徑:容器的儲存空間路徑 (省略) 鏡像名

卷宗掛載:docker run (省略) -v 卷宗名稱:容器的儲存空間路徑 (省略) 鏡像名

建議加載--privileged=true

例如:docker run --name web1 -d -p 8081:80 -v appvol01:/usr/local/apache2/htdocs --privileged=true httpd

docker run -d -p 5000:5000 -v /abcd/myregistry/:/tmp/registry --privileged=true registry

/abcd/myregistry/:/tmp/registry-->宿主機的路徑:容器內的路徑

--privileged=true-->特權為true,不加也可以,建議加入

限制容器內部,只能讀取不能寫

docker run -it --privileged=true -v /宿主機的路徑:/容器內的路徑:ro 鏡像名

ro=read only

容器繼承

docker run -it --privileged=true --name=u1 ubuntu

docker run -it --privileged=true --volume-from u1 --name=u2 ubuntu

u1為父,u2為子;u1關機,u2與宿主機繼續通訊;u1啟動後,資料仍保持最新狀態及共享

顯示卷宗的詳細資料

例如:docker volume inspect appvol01

出現

[

    {

        "CreatedAt": "2022-06-01T06:30:40Z",

        "Driver": "local",

        "Labels": {},

        "Mountpoint": "/var/lib/docker/volumes/appvol01/_data",

        "Name": "appvol01",

        "Options": {},

        "Scope": "local"

    }

]

顯示容器的詳細資料

例如:docker container inspect web1

省略...

        "Mounts": [

            {

                "Type": "volume",

                "Name": "appvol01",

                "Source": "/var/lib/docker/volumes/appvol01/_data",

                "Destination": "/usr/local/apache2/htdocs",

                "Driver": "local",

                "Mode": "z",

                "RW": true,

                "Propagation": ""

            }

        ],

省略...

以Dockerfile建立映像檔

準備名為dockerfile的檔案,再以build 指令建立映像檔

docker build -t 建立的映像檔名稱 所需資料夾路徑

-t-->tag,標籤資訊

dockerfile內容範例

FROM 映像檔名稱

COPY 複製源頭路徑 複製目的地路徑

RUN Linux 指令

CMD["executable","param1","param2"]

......

docker build -f e:\ubuntutest\dockerfile -t ubuntu:1.2 .  --最後 . 表示當前目錄

docker build -t ubuntu:production -f dockerfile.production . --想建置的是production的映像檔


刪除所有容器(Container)

docker rm -f $(docker ps -q)

完整版

docker container rm --force $(docker container list --all --quiet)

刪除停止容器(Container)

docker container prune

清理不需要的映像檔

docker image prune  -->只會刪除dangling的映像檔

docker image prune --all  -->清除所有沒有執行的映像檔

清理系統

docker system prune    -->一次清除停止的容器,無名的映像檔,無名快取,沒有使用到的虛擬網路,只有volume沒被清除。

Docker scan file

例如: docker scan --file dockerfile myubuntu:1.2

Docker container 退出

1.退出仍執行:Ctrl+P和Ctrl+Q分别按,可以退出容器,讓容器仍繼續執行,如要進入使用 docker attach 容器名/id 或使用docker exec -it 容器名/id /bin/bash,退出下exit時,容器繼續執行(建議使用此方案)

2.退出不執行:Ctrl+Dexit退出容器,不行、在容器里面退出可以使用docker stop 容器名/id

導出導入容器

導出-->docker export 容器名/id > 文件名.tar

導入-->cat 文件名.tar | docker import - 鏡像用戶/鏡像名:鏡像版本號

用commit產生新的鏡像(image)

docker commit -m="提交的描述訊息"  -a="作者" 容器名/id  要創建的目標鏡像名:[標籤名(TAG)]

1.Docker registry 建置私有倉庫

docker pull registry

docker run -d -p 5000:5000 -v /aaa/myregistry/:/tmp/registry --privileged=true registry:2

默認情況下,倉庫被創建在容器的/var/lib/registry目錄下,建議自行用容器映射,方便於宿主機聯調

2.驗證一下

curl -XGET http://宿主機IP:5000/v2/_catalog

出現{"repositories".[]} 表示目前為空

3.將image推送至私有倉庫 

docker tag <鏡像名:tag> registryIP:5000/<鏡像名:tag>

4.修改文件可以使之支持http

vi /etc/docker/daemon.json

加入

{

".....................................[] ,

"insecure-registries":["registryIP:5000"]

}

重啟docker

sudo systemctl restart docker

5.推送鏡像到私有倉庫

docker push 鏡像名(registryIP:5000/鏡像名:tag)

6.驗證一下,是否有上傳成功

curl -XGET http://宿主機IP:5000/v2/_catalog

出現{"repositories".[鏡像名]} 表示目前OK

7.測試將鏡像送到本地

docker pull registryIP:5000/鏡像名:tag




2022年4月21日 星期四

修改domain user 權限即可將電腦加入網域,有10次的配額

 網路上有3種

1.開始->程式集->網域控制站安全性原則->安全性原則->本機原則->使用者權力指派->將工作站加入電腦->將 Authenticated User 改成 Domain Admin。

2.利用使用委派來管理

加入網域ADUC—>View —> Advanced feature
按右鍵檢查 computer 的 properties
Security tab—> Advanced
Permission tab —> authenticated users—> Edit
將下列兩個打勾
Create Computer object
Delete Computer object ACEs

3.修改加入網域 10 次限制
執行 adsiedit.msc 
ADSI edit—> 選取 domain (dc=contoso,dc=com)
找出 ms-DS-MachineAccountQuota 的 attribute. 預設是 10,
可以透過這裡修改加入網域的次數(如廠商安裝新電腦時可以先變大,安裝後再縮小)

2022年3月30日 星期三

Windows AD 群組原則一些觀念

 

  1. 剛建好AD 網域時,預設有兩個 GPO—Default Domain Policy和Default Domain Controllers Policy,前者用來管理網域中所有的電腦與使用者;後者則專門用於管理網域控制站。
  2. 群組原則的套用順序為:最先套用本機電腦原則,其次為站台的群組原則,再其次為網域的群 組原則,最後是組織單位的群組原則
  3. 本機電腦原則<站台群組原則<網域群組原則<組織單位群組原則<下層組織單位群組原則
  4. 組織會繼承網域原則(也可以禁止繼承),若組織也有原則,則組織的電腦與使用者會得到網域原則+組織原則
  5. 若網域原則與組織原則有衝突時,以組織原則為準
  6. 優先權是以後面覆蓋前面
  7. 每個群組原則可分為「電腦設定』與「使用者設定』兩部份,分別套用到電腦與使用者,而且是以兩個獨立的套用程序,分別在不同的時間點執行。
  8. 開機/登入
    1. 『電腦開機』與『使用者登入』時,皆會套用群組原則:
      1. 電腦開機 
        1. 當電腦開機(或是執行重新啟動)時,網域控制站會根據該電腦帳戶所隸屬的站台、 網域或組織單位,決定應套用哪些群組原則的『電腦設定』部份。 
        2. 所以當我們看到螢幕出現登入的畫面時,表示已經套用了群組原則的「電腦設定』部分
      2. 使用者登入 
        1. 當使用者登入(按Ctrl + Alt+ Del鍵,輸入帳戶名稱與密碼)時,網域控制站會根據該使用者帳戶所隸屬的站台、 網域或組織單位,決定必須套用哪些群組原則的『使用者設定』部分。 
        2. 所以當我們看到螢幕出現各使用者自己的桌面時,表示已經套用了群組原則的『使用者設定」部分。
      3. ー般而言,在電腦順利啟動之後,使用者才能用該電腦登入網域。
    2. 因此是先套用電腦設定,後套用使用者設定。
    3. 不過,當電腦設定和使用者設定發生衝突時,若依照前述的觀念,應該是後套用的使用者設定 覆蓋掉先套用的電腦設定一一然而事實並非如此,而是電腦設定覆蓋掉使用者設定!
  9. 群組原則分原則及喜好設定,只有網域群組原則才有喜好設定,本機電腦原則則無
  10. 喜好設定非強制性,用戶端可以自行變更設定值,故適合用來作預設值;原則設定是強制性設定,用戶端無法變更
  11. 原則設定與喜好設定若有相同設定項目,以原則設定為優先

2022年3月28日 星期一

批次更新ou及user

1.批次加入OU(組織單位)

 for /f "tokens=1 delims=," %a in (c:\abc\ou1.csv) do dsadd ou "ou=%a,DC=sct1,DC=com,DC=tw"

ou1.csv如下













2.第二層OU,以此類推
for /f "tokens=1 delims=," %a in (c:\abc\ou2.csv) do dsadd ou "ou=%a,ou=ab事業部,DC=sct1,DC=com,DC=tw"

ou2.csv












3.批次加入使用者
for /f "tokens=1,2,3,4,5,6 delims=," %a in (c:\abc\user.csv) do dsadd user "cn=%a,ou=總務課,ou=ab事業部,DC=sct1,DC=com,DC=tw" -samid %f -upn %b -pwd %c -mustchpwd %e -display %d -disabled no

user.csv



以管理員身份運行powershell的Active Directory模塊

Import-Module ActiveDirectory


鍵入以下命令來檢查有哪些OU未進行意外刪除的保護:

Get-ADOrganizationalUnit -filter * -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | ft


在Active Directory的Windows PowerShell模塊命令提示符下,鍵入以下命令以保護OU:

Get-ADOrganizationalUnit -filter * -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

2022年2月19日 星期六

設定 windows 10自動登入

 將以下設定.reg檔

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device]

"DevicePasswordLessBuildVersion"=dword:00000000

再執行 netplwiz 就會發現該項目可以設定,下次開機即可以自動登入


1. 一樣同時按『WIN鍵+R鍵』→在「執行」視窗,這次則輸入「regedit」,按「確定」

2. 找尋子機碼 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

3. 按兩下「DefaultUserName」,輸入您的使用者名稱,然後按一下「確定」。原則上已存在,確認使用者名稱。

4. 按兩下「DefaultPassword」,輸入您的密碼,然後按一下「確定」,不存在則新增它。

5. 將「AutoAdminLogon」值設定為1(true)

6. 可以重開機試試看。

2022年2月16日 星期三

ubuntu apt-get update、upgrade 與 dist-upgrade 差別

 

  • update
    更新我們的套件清單 /etc/apt/sources.list,這樣在我們更新時才能比對最新的套件清單,決定是否更新
  • upgrade
    根據前述的更新清單 /etc/apt/sources.list,比對是否更新套件。若有相依性問題,則放棄更新。
  • dist-upgrade
    根據前述的更新清單 /etc/apt/sources.list,比對是否更新套件。若有相依性問題,會嘗試做安裝/移除,將相依性問題解決並更新。
    PS. 通常視為較危險的更新
  • 參考https://blog.camel2243.com/2016/02/29/ubuntu-apt-get-update%E3%80%81upgrade-%E8%88%87-dist-upgrade-%E5%B7%AE%E5%88%A5/

2022年1月23日 星期日

Synology vmware workstation 注意事項

 1.使用Link Aggregation 時,所有網路卡須由ethernetX.virtualDev = "e1000"改為ethernetX.virtualDev = "e1000e" 才可以。

2.目前有DS918+及DS3615xs,必須使用DS3615xs才可以使用Virtual Machine Manager (VMM),使用DS918+會跳出。

3.啟動Active Backup for Business 套件激活方法

到【控制面板】 - 【信息中心】 找到【品序列】并

DSM 7.0

    1.https://URL:PORT/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=登入用戶名&passwd=登入密碼&format= cookie

    2.https://URL:PORT/webapi/entry.cgi?api=SYNO.ActiveBackup.Activation&method=set&version=1&activated=true&serial_number="產品序號"

DSM6.2

        1.https://URL:5001/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=登入用戶名&passwd=登入密碼

    2.https://URL:5001/webapi/entry.cgi?api=SYNO.ActiveBackup.Activation&method=set&version=1&activated=true&serial_number="產品序號"