Docker 基礎入門

来源:https://www.cnblogs.com/along21/archive/2019/01/03/10215701.html
-Advertisement-
Play Games

1、概念介紹 1.1 容器 1.1.1 介紹 容納其它物品的工具,可以部分或完全封閉,被用於容納、儲存、運輸物品。物體可以被放置在容器中,而容器則可以保護內容物。 1.1.2 要使用容器必須需要在內核級支持2中技術 namespaces 名稱空間 Control Group(cgroups) 控制組 ...


1、概念介紹

1.1 容器

1.1.1 介紹

  容納其它物品的工具,可以部分或完全封閉,被用於容納、儲存、運輸物品。物體可以被放置在容器中,而容器則可以保護內容物。

 

1.1.2 要使用容器必須需要在內核級支持2中技術

  • namespaces 名稱空間
  • Control Group(cgroups) 控制組

1)為什麼centos6 版本不能使用容器?

因為centos6 內核版本是2.6;容器需要一個user的名稱空間,直到內核3.8版本才有:

 namespace 系統調用參數  隔離內容  內核版本 
UTS  CLONE_NEWUTS  主機名和功能變數名稱  2.6.19
IPC   CLONE_NEWIPC 信號量、消息隊列和共用記憶體   2.6.19
PID   CLONE_NEWPID 進程編號   2.6.24
Network   CLONE_NEWNET 網路設備、網路棧、埠等   2.6.29
Mount   CLONE_NEWNS 掛載點(文件系統)   2.4.19
User   CLONE_NEWUSER 用戶和用戶組   3.8

 

2Control Group(cgroups)

  • blkio:塊設備IO
  • cpu:CPU
  • cpuacct:CPU資源使用報告
  • cpuset:多處理平臺上的CPU集合
  • devices:設備訪問
  • memory:記憶體用量及報告
  • perf_event:對cgroup中的任務進行統一性能測試
  • net_cls:cgroup中的任務創建的數據報文的類別標識符

 

1.2 docker

1.2.1 介紹

  •  Docker是一個開放源代碼軟體項目,讓應用程式佈署在軟體貨櫃下的工作可以自動化進行,藉此在Linux操作系統上,提供一個額外的軟體抽象層,以及操作系統層虛擬化自動管理機制
  •  Docker利用Linux核心中的資源分離機制,例如cgroups,以及Linux核心名字空間(namespaces,來創建獨立的容器(containers。這可以在單一Linux實體下運作,避免啟動一個虛擬機造成的額外負擔。Linux核心對名字空間的支持完全隔離了工作環境中應用程式的視野,包括進程樹、網路、用戶ID與掛載文件系統,而核心的cgroup提供資源隔離,包括CPU、存儲器、block I/O與網路。從0.9版本起,Dockers在使用抽象虛擬是經由libvirtLXCsystemd - nspawn提供界面的基礎上,開始包括libcontainer庫做為以自己的方式開始直接使用由Linux核心提供的虛擬化的設施,
  •  依據行業分析公司“451研究Dockers是有能力打包應用程式及其虛擬容器,可以在任何Linux伺服器上運行的依賴性工具,這有助於實現靈活性和便攜性,應用程式在任何地方都可以運行,無論是公有雲、私有雲、單機等。

 

1.2.2 docker 運行架構

 

2、安裝啟動docker

2.1 安裝環境

1)依賴的基礎環境

  •  64 CPU
  •  Linux kernel(內核) 3.10+
  •  Linux kernel cgroups and namespaces

 

2)查詢自己伺服器的環境

使用的伺服器版本

[root@along ~]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

內核版本

[root@along ~]# uname -r

3.10.0-514.el7.x86_64

③ ip地址

[root@along ~]# hostname -I

192.168.130.101 192.168.10.101

 

2.2 安裝docker

2.2.1 使用官方安裝腳本自動安裝

實際上就是下載一個安裝腳本,再執行安裝(不推薦,因為不能選擇版本安裝)

[root@centos7 ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

 

2.2.2 CentOS 7 (使用yum進行安裝,推薦)

1)添加docker-ce 源信息

[root@along ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

 

2)修改docker-ce

[root@along ~]# sed -i '[email protected]@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo

 

3)更新並安裝 Docker-CE

[root@centos7 ~]# yum makecache fast

[root@centos7 ~]# yum -y install docker-ce   安裝的是預設最新版本

 

4)安裝指定版本的docker

查看都有哪些版本

[root@centos7 ~]# yum list docker-ce.x86_64 --showduplicates | sort -r   

 

下載指定版本,我這裡下載的穩定版本

[root@centos7 ~]# yum -y install docker-ce-17.03.2.ce

 

安裝報錯(虛擬機中可能會遇到,如果沒有報錯請忽略)

Error: Package: docker-ce-18.03.1.ce-1.el7.centos.x86_64 (docker-ce-stable)

           Requires: container-selinux >= 2.9

報錯原因: docker-ce-selinux 版本過低

解決辦法:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/網站下載對應版本的docker-ce-selinux,安裝即可

[root@along ~]# yum -y install https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm

 

再次安裝docker 成功

[root@centos7 ~]# yum -y install docker-ce-17.03.2.ce

 

2.2.3 Ubuntu 14.04 16.04 (使用apt-get進行安裝)

1)安裝最新版本

# step 1: 安裝必要的一些系統工具

sudo apt-get update

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

# step 2: 安裝GPG證書

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 寫入軟體源信息

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

# Step 4: 更新並安裝 Docker-CE

sudo apt-get -y update

sudo apt-get -y install docker-ce

 

2)安裝指定版本的Docker-CE:

# Step 1: 查找Docker-CE的版本:

# apt-cache madison docker-ce

#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages

#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages

# Step 2: 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.1~ce-0~ubuntu-xenial)

# sudo apt-get -y install docker-ce=[VERSION]

 

2.3 啟動docker

2.3.1 配置docker鏡像加速

多種加速方式:

  •  docker cn
  •  阿裡雲加速器
  •  中國科技大學
  •  ... ...

1docker cn 加速

[root@along ~]# mkdir -p /etc/docker

[root@along ~]# sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

EOF

 

2)阿裡雲加速器

註冊阿裡雲賬號,專用加速器地址獲得路徑:

        https://cr.console.aliyun.com/#/accelerator

添加加速器到配置文件

[root@along ~]# sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]

}

EOF

③ 阿裡雲頁面有操作步驟

 

2.3.2 啟動docker服務

① 重載docker啟動配置

[root@along ~]# systemctl daemon-reload 

② 將docker設為開機自啟

[root@along ~]# systemctl start docker.service

③ 啟動docker服務

[root@along ~]# systemctl enable docker.service

④ 查看docker版本

[root@along ~]# docker version

Client:
 Version:      17.03.2-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.2-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   f5ec1e2
 Built:        Tue Jun 27 02:21:36 2017
 OS/Arch:      linux/amd64
 Experimental: false

 

3docker 基礎命令操作

3.1 鏡像操作

3.1.1 搜索官方倉庫鏡像

[root@along ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                                  Official build of Nginx.                        10659     [OK]       
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker c...   1497                 [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable ...   671                  [OK]

搜索結果解釋:

參數

說明

NAME

鏡像名稱

DESCRIPTION

鏡像說明

STARS

點贊數量

OFFICIAL

是否是官方的

AUTOMATED

是否是自動構建的

 

3.1.2 拉取鏡像

1)根據鏡像名稱(tag指定版本)拉取鏡像

[root@along ~]# docker pull nginx:1.14-alpine
1.14-alpine: Pulling from library/nginx
cd784148e348: Pull complete 
12b08f7ef616: Pull complete 
65071a4e699c: Pull complete 
9936647427be: Pull complete 
Digest: sha256:e3f77f7f4a6bb5e7820e013fa60b96602b34f5704e796cfd94b561ae73adcf96
Status: Downloaded newer image for nginx:1.14-alpine
[root@along ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
b4a6e23922dd: Pull complete 
Digest: sha256:8ccbac733d19c0dd4d70b4f0c1e12245b5fa3ad24758a11035ee505c629c0796
Status: Downloaded newer image for busybox:latest

註:alpine 版本:構建容器小鏡像的髮型版本

 

2)查看當前主機鏡像列表

[root@along ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              758ec7f3a1ee        7 days ago          1.15 MB
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

 

3.1.3 導出鏡像

[root@along ~]# docker image save busybox > docker-busybox.tar.gz
[root@along ~]# ls docker-busybox.tar.gz 
docker-busybox.tar.gz
[root@along ~]# docker image save -o /mnt/busybox_nginx.tar.gz busybox:latest nginx:1.14-alpine 
[root@along ~]# ls /mnt/busybox_nginx.tar.gz 
/mnt/busybox_nginx.tar.gz

註:

  • -o:指定導出鏡像的位置;
  • 可以同時導出多個鏡像;為一個文件;
  • 指定.tar.gz 可以導出並壓縮。

 

3.1.4 刪除鏡像

[root@along ~]# docker image rm busybox
Untagged: busybox:latest
Untagged: busybox@sha256:8ccbac733d19c0dd4d70b4f0c1e12245b5fa3ad24758a11035ee505c629c0796
Deleted: sha256:758ec7f3a1ee85f8f08399b55641bfb13e8c1109287ddc5e22b68c3d653152ee
Deleted: sha256:23bc2b70b2014dec0ac22f27bb93e9babd08cdd6f1115d0c955b9ff22b382f5a
[root@along ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

 

3.1.5 導入鏡像

[root@along ~]# docker image load -i docker-busybox.tar.gz 
23bc2b70b201: Loading layer  1.37 MB/1.37 MB
Loaded image: busybox:latest
[root@along ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              758ec7f3a1ee        7 days ago          1.15 MB
nginx               1.14-alpine         c5b6f731fbc0        13 days ago         17.7 MB

 

3.1.6 查看鏡像的詳細信息

[root@docker01 ~]# docker image inspect centos

 

3.2 容器操作

3.2.1 啟動容器

方法1(不推薦)

  先創建一個容器:docker create 鏡像名

  再啟動容器:docker start 容器名

方法2:docker run 鏡像名

1)格式

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

2options 常用命令選項

  •  -t :打開一個終端,像使用交換機一樣使用容器
  •  -i:互動式訪問
  •  --name:容器名字
  •  --network:指定網路
  •  --rm:容器一停,自動刪除
  •  -d:剝離與當前終端的關係;否則會一直占據著終端
  •  -p:埠映射,將容器內服務的埠映射在宿主機的指定埠

 

3)示例:運行一個容器

[root@along ~]# docker run --name web1 -d -p 8888:80 nginx:1.14-alpine
ced78e522fd747635e9af01bc20882094e3b55ce50b9ae248962e8e8eeb89774
[root@along ~]# docker run --name b1 -it busybox /bin/sh  在運行容器時,互動式進入容器
/ # ls /
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # exit  退出

 

4)查詢容器運行狀態命令

[root@along ~]# docker ps / docker container ls  兩個命令是一樣的效果

  -a:查詢所有的容器

註:容器內的第一個進程必須一直處於運行的狀態,否則這個容器,就會處於退出狀態!

[root@along ~]# docker ps   只顯示運行的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ced78e522fd7        nginx:1.14-alpine   "nginx -g 'daemon ..."   5 minutes ago       Up 5 minutes        0.0.0.0:8888->80/tcp     web1
[root@along ~]# docker ps -a   查詢所有容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                  NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g 'daemon ..."   3 minutes ago       Up 3 minutes               0.0.0.0:8888->80/tcp   web1
9621f704b756        busybox             "/bin/sh"                3 minutes ago       Exited (0) 3 minutes ago                          b1

 

3.2.2 停止運行的容器

docker stop  關閉運行的容器

docker kill   殺死運行的容器

  -s:指定信號,和kill 用法一樣;-9 強制停止容器

[root@along ~]# docker kill web1
web1
[root@along ~]# docker ps   只顯示運行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@along ~]# docker ps -a   查詢所有容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g 'daemon ..."   5 minutes ago       Exited (137) 1 second ago                       web1
9621f704b756        busybox             "/bin/sh"                5 minutes ago       Exited (0) 5 minutes ago                        b1

 

3.2.3 激活關閉的容器

docker start

1)格式

Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]

 

2Options:

  • -a:附加到當前終端
  • -i:互動式

 

3)示例

[root@along ~]# docker start web1
web1
[root@along ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ced78e522fd7        nginx:1.14-alpine   "nginx -g 'daemon ..."   9 minutes ago       Up 8 seconds        0.0.0.0:8888->80/tcp    web1

 

3.2.4 查看容器的詳細信息

[root@along ~]# docker inspect web1
[root@along ~]# docker inspect web1 |grep "IPAddress"   比如我查詢到容器的ip
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
[root@along ~]# curl 172.17.0.2   通過容器的IP,在宿主機上訪問服務
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
[root@along ~]# curl 127.0.0.1:8888  映射到宿主機的埠是8888
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>

 

3.2.5 刪除容器

[root@along ~]# docker kill web1  先關閉容器,再刪除容器
b1
[root@along ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@along ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
bcbf3d772a65        nginx:1.14-alpine   "nginx -g 'daemon ..."   6 minutes ago       Exited (137) 2 seconds ago                       web1
9621f704b756        busybox             "/bin/sh"                6 minutes ago       Exited (0) 6 minutes ago                         b1
[root@along ~]# docker rm web1
web1
[root@along ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
9621f704b756        busybox             "/bin/sh"                6 minutes ago       Exited (0) 6 minutes ago                         b1
[root@along ~]# docker rm -f `docker ps -a -q` 刪除所有容器,-f 強制刪除
9621f704b756
[root@along ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

3.2.6 對運行的容器執行指定命令exec

[root@along ~]# docker exec / docker container exec   

1)格式

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

 

2options 選項

  •  -d:在後臺運行命令
  •  -e:設置環境變數
  •  -i:互動式
  •  -t:打開一個終端
  •  -u:用戶名或UID

 

3)示例

[root@along ~]# docker run --name web1 -d nginx:1.14-alpine
81f336e878c0fb3187596f2acd12705d94f532978a8ad37c9f8ae33cc39bfb61
① 互動式進入容器
[root@along ~]# docker exec -it web1 /bin/sh   
/ # ls /
bin    etc    lib    mnt    root   sbin   sys    usr
dev    home   media  proc   run    srv    tmp    var
/ # exit
② 查詢ip
[root@along ~]# docker exec web1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
43: eth0@if44: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link 
       valid_lft forever preferred_lft forever

 

3.2.7 查詢容器內部日誌

[root@along ~]# curl 172.17.0.2
[root@along ~]# docker logs web1
172.17.0.1 - - [03/Jan/2019:09:00:42 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

 

3.2.8 一圖總結對容器的操作命令

 


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

-Advertisement-
Play Games
更多相關文章
  • 為什麼異常處理選擇中間件? 傳統的ASP.NET可以採用異常過濾器的方式處理異常,在ASP.NET CORE中,是以多個中間件連接而成的管道形式處理請求的,不過常用的五大過濾器得以保留,同樣可以採用異常過濾器處理異常,但是異常過濾器不能處理MVC中間件以外的異常,為了全局統一考慮,採用中間件處理異常 ...
  • private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { //偶數行奇數列||奇數行偶數列 if ( e.RowHandle != grid ...
  • 一. 概述 ASP.NET Core 是一個跨平臺的高性能開源框架,可以用來:建置 Web 應用程式和服務、IoT應用和移動後端、在 Windows macOS 和 Linux 上使用喜愛的開發工具、部署到雲或本地、NET Core 或 .NET Framework 上運行。 ASP.NET Cor ...
  • 1. .NET Core與Windows環境 Asp.Net Core 2.2.0 Windows 10 2. 先決條件 下載並安裝.Net Core Hosting Bundle. 3. 部署過程 Visual Studio 發佈程式 新建IIS站點 調整應用程式池,.NET CLR版本選擇“無托 ...
  • 寫在前面 整個項目都托管在了 Github 上: 查找更為方便的版本見: 這一節內容可能會用到的庫文件有 PriorityQueue,同樣在 Github 上可以找到。 善用 Ctrl + F 查找題目。 習題&題解 2.4.1 題目 用序列 P R I O R I T Y Q U E U E (字 ...
  • 日常開發中有些項目工程需要按照Administrator 身份進行啟動,我們的操作是在vs2017 上右鍵,administrator 身份啟動。 如下圖: 但是這樣每次都要右鍵,移動滑鼠進行點擊。 有時候習慣性直接點擊,發現錯了後又關閉,再使用administrator打開。 怎麼能直接點擊就使用 ...
  • Bandwidthd Bandwidthd是一款免費的流量監控軟體,它可以用圖標的方式展現出網路流量行為,並且可區分出ftp、tcp等各種協議的流量。 1、安裝一些依賴軟體 [root@localhost bandwidthd-2.0.1]# yum install -y libpng libpng ...
  • 如何在Windows環境下製作Linux的啟動器呢?下麵介紹一個簡單快捷的工具:深度啟動盤製作工具deepin boot maker。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...