主頁 >  其他 > docker的基礎用法

docker的基礎用法

2021-07-30 09:09:48 其他

docker基礎用法

什么是 Docker

Docker 是一個開源專案,誕生于 2013 年初,最初是 dotCloud 公司內部的一個業余專案,它基于 Google 公司推出的
Go 語言實作,專案后來加入了 Linux 基金會,遵從了 Apache 2.0
協議,專案代碼在GitHub 上進行維護,

Docker 自開源后受到廣泛的關注和討論,以至于 dotCloud 公司后來都改名為 Docker Inc,Redhat 已經在其
RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用,

Docker 專案的目標是實作輕量級的作業系統虛擬化解決方案,Docker 的基礎是 Linux 容器(LXC)等技術,

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更為簡便,用戶操作 Docker
的容器就像操作一個快速輕量級的虛擬機一樣簡單,

docker中的容器:

  • lxc --> libcontainer --> runC

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CdPyDZhv-1627398306033)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727221741064.png)]

為什么要使用 Docker?

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢,

首先,Docker 容器的啟動可以在秒級實作,這相比傳統的虛擬機方式要快得多,其次,Docker
對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器,

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小,傳統虛擬機方式運行 10 個不同的應用就要起
10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可,

具體說來,Docker 在如下幾個方面具有較大的優勢,

更高效的利用系統資源

由于容器不需要進行硬體虛擬以及運行完整作業系統等額外開銷,Docker對系統資源的利用率更高,無論是應用執行速度,記憶體消耗以及檔案存盤速度,都要比傳統虛擬機技術更高效,因此,相比虛擬機技術,一個相同配置的主機,往往可以運行更多數量的應用,

更快速的啟動時間

傳統的虛擬機技術啟動應用服務往往需要數分鐘,而Docker容器應用,由于直接運行與宿主內核,無序啟動完整的作業系統,因此可以做到妙級,甚至毫秒級的啟動時間,大大的節約了開發,測驗,部署的時間,

一致的運行環境

開發程序中一個常見的問題是環境一致性問題,由于開發環境,測驗環境,生產環境不一致,導致有些bug并未在開發程序中被發現,而Docker的鏡像提供了除內核外完整的運行時環境,確保了應用運行環境一致性,從而不會再出現(這段代碼在我機器上運行沒問題啊)zz這類問題,

持續交付和部署

對于開發和運維人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行,

使用Docker可以通過定制應用鏡像來實作持續集成,持續交付,部署,開發人員可以通過Dockerfile來進行鏡像構建,并結合持續集成系統進行集成測驗,而運維人員則可以在生產環境中快速部署該鏡像,甚至結合持續部署系統進行自動部署

更輕松的遷移

由于Docker確保了執行環境的一致性,使得應用的遷移更加容易,Docker可以在很多平臺上運行,無論是物理機,虛擬機,公有云,私有云,甚至是比較本,其運行結果是一致的,因此用戶可以很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環境的變化導致應用無法正常運行的情況,

更輕松的維護和擴展

Docker使用的分層存數以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得非常簡單,此外,Docker團隊同各個開源專案團隊一起維護了一大批高質量的官方鏡像,既可以直接在生產環境使用,又可以作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本,

更快速的交付和部署

對開發和運維(devop)人員來說,最希望的就是一次創建或配置,可以在任意地方正常運行,

開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼,Docker
可以快速創建容器,快速迭代應用程式,并讓整個程序全程可見,使團隊中的其他成員更容易理解應用程式是如何創建和作業的,Docker
容器很輕很快!容器的啟動時間是秒級的,大量地節約開發、測驗、部署的時間,

更高效的虛擬化

Docker 容器的運行不需要額外的 hypervisor 支持,它是內核級的虛擬化,因此可以實作更高的性能和效率,

更輕松的遷移和擴展

Docker
容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等,這種兼容性可以讓用戶把一個應用程式從一個平臺直接遷移到另外一個,

更簡單的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新作業,所有的修改都以增量的方式被分發和更新,從而實作自動化并且高效的管理,

對比傳統虛擬機總結

特性容器虛擬機
啟動秒級分鐘級
硬碟使用一般為 MB一般為 GB
性能接近原生弱于
系統支持量單機支持上千個容器一般幾十個

OCI(Open Container Initiative) & OCF (Open Container Format)

Linux基金會于2015年6月成立OCI(Open Container
Initiative)組織,旨在圍繞容器格式和運行時制定一個開放的工業化標準,

開放容器格式標準(OCF, Open Container Format)

容器格式標準

制定容器格式標準的宗旨概括來說就是不受上層結構的系結,如特定的客戶端、編排堆疊等,同時也不受特定的供應商或專案的系結,即不限于某種特定作業系統、硬體、CPU架構、公有云等,

容器標準化宗旨

  • 操作標準化:容器的標準化操作包括使用標準容器感覺創建、啟動、停止容器,使用標準檔案系統工具復制和創建容器快照,使用標準化網路工具進行下載和上傳,
  • 內容無關:內容無關指不管針對的具體容器內容是什么,容器標準操作執行后都能產生同樣的效果,如容器可以用同樣的方式上傳、啟動,不管是php應用還是mysql資料庫服務,
  • 基礎設施無關:無論是個人的筆記本電腦還是AWS S3,亦或是Openstack,或者其他基礎設施,都應該對支持容器的各項操作,
  • 為自動化量身定制:制定容器統一標準,是的操作內容無關化、平臺無關化的根本目的之一,就是為了可以使容器操作全平臺自動化,
  • 工業級交付:制定容器標準一大目標,就是使軟體分發可以達到工業級交付成為現實,

容器標準包(bundle)和配置

一個標準的容器包, 具體包含下面三個部分:

  • config.json : 基本組態檔, 包括與宿主機獨立和應用相關的特定資訊, 如安全權限,環境變數和引數等. 具體如下
    • 容器格式版本
    • rootfs 路徑及是否只讀
    • 各類檔案掛載點及相應容器內掛載目錄(此處資訊必須與 runtime.json 配置中保持一致.
    • 初始化行程配置資訊, 包括是否系結終端, 運行可執行檔案的作業目錄,環境變數配置,可執行檔案及執行引數,uid,gid 以及 額外需要加入的 gid,hostname,底層作業系統及 CPU 架構資訊.
  • runtime.json : 運行時組態檔, 包含運行時與主機相關的資訊, 如記憶體限制,本地設備訪問權限,掛載點等. 除了上述配置資訊以外, 運行時組態檔還提供了 “鉤子(hook)” 的特性, 這樣可以在容器運行前和體制后各執行一些自定義腳本.
    hooks 的配置包含執行腳本路徑,引數,環境變數等.
  • rootfs : 根檔案系統目錄, 包含了容器執行所需的必要環境依賴. 如 /bin,/var,/dev,/usr 等目錄及相應檔案. rootfs 目錄必須與包含配置資訊的 config.json 檔案同時存在容器目錄最頂層.

容器運行時和生命周期

容器標準格式也要求 容器把自身運行時的狀態持久化到磁盤中, 這樣便于其他工具對此資訊的使用和演繹. 該運行時狀態已 JSON 格式編碼存盤.
推薦吧運行時狀態的 json 檔案保存在臨時檔案系統中, 以便于系統重啟后自動移除.

基于 Linux 內核的作業系統, 該資訊應該統一存盤于 /run/opencontainer/containers 目錄下,
該目錄結構下已容器 ID
命名的檔案夾(/run/opencontainer/containers//state.json)中存放容器的狀態資訊并實時更新.

state.json 檔案中包含的具體資訊如下:

1. 版本資訊 : 存放 OCI 標準的具體版本號.
2. 容器ID : 通常是一個哈希值, 也可以是一個易讀的字串. 在 state.json 檔案中加入容器ID是為了便于之前提到的運行時 hooks 只需載入 state.json 就可以定位到容器, 然后檢測 state.json ,發現檔案不見了就認為容器關閉, 然后執行回應預定義的腳本操作.
3. PID : 容器中運行的首個行程在宿主機上的行程號.
4. 容器檔案目錄 : 存放容器 rootfs 及回應配置的目錄. 外部程式只需讀取 state.json 即可定位到宿主機上的容器檔案目錄.

標準的容器生命周期有以下三個基本程序:

1. 容器創建 : 創建包括檔案系統、namespaces、cgroups、用戶權限在內的各項內容,
2. 容器行程啟動 : 運行容器行程,行程的可執行檔案定義在的config.json中,args項,
3. 容器暫停 : 容器實際上作為行程可以被外部程式關停(kill),然后容器標準規范應該包含對容器暫停信號的捕獲,并做相應資源回收的處理,避免孤兒行程的出現,

基于 OCF 標準的具體實作.

容器運行時opencontainers/runc : docker 貢獻的 runc專案,是后來者的參照標準,
虛擬機運行時hyperhq/runv : 基于Hypervisor技術的開放容器規范實作,
測驗huawei-openlab/oct : 基于開放容器規范的測驗框架,

docker架構

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-P3nYqvQm-1627398306035)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727222059234.png)]

為什么鏡像倉庫名字是Registry而不是repository?在docker中倉庫的名字是以應用的名稱取名的,

img

鏡像是靜態的,而容器是動態的,容器有其生命周期,鏡像與容器的關系類似于程式與行程的關系,鏡像類似于檔案系統中的程式檔案,而容器則類似于將一個程式運行起來的狀態,也即行程,所以容器是可以洗掉的,容器被洗掉后其鏡像是不會被洗掉的,

docker作業原理

Docker在Linux系統鏡像上創建容器,就像其他半虛擬化工具如Virtuozzo等,所有的實體基本上運行在主機系統的內核之上,但鎖定在自己的運行時間環境中,與主機環境是隔離的,

當你啟動或創建一個Docker容器時,只有容器內的激活行程運行時才能開始活動,如果開啟一個daemonized行程,容器會立刻結束運行,因為該行程在前端不是激活狀態,如果你在前端開啟一個行程,容器能正常運行,直到該行程結束,這和其他的半虛擬化工具不同,其他的半虛擬化工具基本上在相同的主機上建立“正常的”虛擬服務器實體,即使前臺行程未激活,這些實體也能正常運行,

Docker可以安裝在大多數Linux發行版以及Mac OS X和Windows系統上,但后兩者只能使用仿真虛擬機作為主機,

在大多數情況下,在主機上安裝Docker運行時間是一個非常簡單的程序,只需要多數Linux發行版上正常的安裝包管理命令,在Docker網站上,你會發現大多數Linux發行版和云服務,以及Mac和Windows系統的非常完整的安裝說明,

docker安裝

[root@localhost ~]# vim /etc/yum.repos.d/docker-ce.repo
[root@localhost ~]# cat /etc/yum.repos.d/docker-ce.repo 
[docker-ce]
name=docker-ce
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/8/x86_64/stable/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
enabled=1
[root@localhost ~]# yum clean all
21 files removed
[root@localhost ~]# yum list all |grep docker
docker-ce                                        33 kB/s |  14 kB     00:00    
containerd.io.x86_64                                   1.4.8-3.1.el8                                     docker-ce 
docker-ce.x86_64                                       3:20.10.7-3.el8                                   docker-ce 
docker-ce-cli.x86_64                                   1:20.10.7-3.el8                                   docker-ce 
docker-ce-rootless-extras.x86_64                       20.10.7-3.el8                                     docker-ce 
docker-scan-plugin.x86_64                              0.8.0-3.el8                                       docker-ce 
pcp-pmda-docker.x86_64                                 5.3.1-3.el8                                       appstream 
podman-docker.noarch                                   3.1.0-0.13.module_el8.5.0+733+9bb5dffa            appstream 
[root@localhost ~]# yum -y install docker-ce
#安裝程序省略
[root@localhost ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@localhost ~]# ls /etc/docker/
key.json

docker加速

docker-ce的組態檔是/etc/docker/daemon.json,此檔案默認不存在,需要我們手動創建并進行配置,而docker的加速就是通過配置此檔案來實作的,

docker的加速有多種方式:

- docker cn
- 中國科技大學加速器
- 阿里云加速器(需要通過阿里云開發者平臺注冊帳號,免費使用個人私有的加速器)

這里使用

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0x9IxL81-1627398306041)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727225908469.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qElYWQI5-1627398306042)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727225958002.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-42FHs94Y-1627398306043)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727230101289.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4s11EP7i-1627398306044)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727230216871.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dbYzrDux-1627398306045)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727225804094.png)]

[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["加速器地址"]
}
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-294.el8.x86_64
 Operating System: CentOS Stream 8
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.623GiB
 Name: localhost.localdomain
 ID: UYTA:DAJB:XNJE:PRIC:KYIT:PER6:MM43:BLNV:FFCE:MBAT:JKAS:6BNX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  加速器地址
 Live Restore Enabled: false

docker常用操作

命令功能
docker searchSearch the Docker Hub for images(在Docker Hub中搜索鏡像)
docker pullPull an image or a repository from a registry(從注冊表中提取鏡像或存盤庫)
docker imagesList images(列出鏡像)
docker createCreate a new conntainer(創建一個新的容器)
docker startStart one or more stopped containers(啟動一個或多個已停止的容器)
docker runRun a command in a new container(在新容器中運行命令)
docker attachAttach to a runninng container(進入到運行容器中,退出時容器停止運行)
docker psList containers(列出容器)
docker logsFetch the logs of a container(提取容器的日志)
docker restartRestart a container(重新啟動容器)
docker stopStop one or more running containers(停止一個或多個運行中的容器)
docker killKill one or more running containers(殺死一個或多個正在運行的容器)
docker rmRemove onne or more containers(取出一個或更多的容器)
docker execRun a command in a running container(進入容器中)
docker infoDisplay system-wide information(顯示系統范圍的資訊)
docker inspectReturn low-level information on Docker objects(回傳有關Docker物件的低級資訊)

搜索鏡像

[root@localhost ~]# docker search busybox 
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
busybox                   Busybox base image.                             2300      [OK]       
progrium/busybox                                                          70                   [OK]
radial/busyboxplus        Full-chain, Internet enabled, busybox made f…   41                   [OK]
yauritux/busybox-curl     Busybox with CURL                               16                   
arm32v7/busybox           Busybox base image.                             9                    
armhf/busybox             Busybox base image.                             6                    
odise/busybox-python                                                      4                    [OK]
odise/busybox-curl                                                        4                    [OK]
arm64v8/busybox           Busybox base image.                             3                    
aarch64/busybox           Busybox base image.                             2                    
prom/busybox              Prometheus Busybox Docker base images           2                    [OK]
i386/busybox              Busybox base image.                             2                    
s390x/busybox             Busybox base image.                             2                    
joeshaw/busybox-nonroot   Busybox container with non-root user nobody     2                    
arm32v6/busybox           Busybox base image.                             2                    
p7ppc64/busybox           Busybox base image for ppc64.                   2                    
mips64le/busybox          Busybox base image.                             1                    
lqshow/busybox-curl       Busybox image adds a curl binary to /usr/bin    1                    [OK]
spotify/busybox           Spotify fork of https://hub.docker.com/_/bus…   1                    
ppc64le/busybox           Busybox base image.                             1                    
vukomir/busybox           busybox and curl                                1                    
arm32v5/busybox           Busybox base image.                             0                    
amd64/busybox             Busybox base image.                             0                    
concourse/busyboxplus                                                     0                    
sou856099/busybox                                                         0

拉取鏡像

從Docker倉庫下載鏡像到本地,鏡像名稱格式為 名稱:版本號,如果版本號不指定則是最新的版本,

[root@localhost ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
33847f680f63: Pull complete 
d74938eee980: Pull complete 
963cfdce5a0c: Pull complete 
8d5a3cca778c: Pull complete 
e06a573b193b: Pull complete 
Digest: sha256:61e49dd08a51d6fc421ed257bd8eb461cf2d48269d9ab2b4ff5d4c69826c3c9c
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

查看鏡像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
httpd        latest    73b8cfec1155   5 days ago   138MB
[root@localhost ~]# docker images -q  //顯示鏡像ID
73b8cfec1155

創建容器

[root@localhost ~]# docker create httpd
7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
httpd        latest    73b8cfec1155   5 days ago   138MB

查看所有容器

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS    PORTS     NAMES
7820393d101e   httpd     "httpd-foreground"   59 seconds ago   Created             kind_shamir
5b0e2cdeafc1   httpd     "httpd-foreground"   3 minutes ago    Created             frosty_mirzakhani

啟動容器

[root@localhost ~]# docker start 7820393d101e
7820393d101e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS          PORTS     NAMES
7820393d101e   httpd     "httpd-foreground"   4 minutes ago   Up 51 seconds   80/tcp    kind_shamir

回傳有關Docker物件的低級資訊

[root@localhost ~]#  docker inspect 7820393d101e
[
    {
        "Id": "7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e",
        "Created": "2021-07-27T13:25:28.494044423Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 13266,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-07-27T13:29:30.039623988Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:73b8cfec11558fe86f565b4357f6d6c8560f4c49a5f15ae970a24da86c9adc93",
        "ResolvConfPath": "/var/lib/docker/containers/7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e/hostname",
        "HostsPath": "/var/lib/docker/containers/7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e/hosts",
        "LogPath": "/var/lib/docker/containers/7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e/7820393d101ead0ad5c8b84092fdc4c8981407ab19c2085c4b8b1c871670f21e-json.log",
        "Name": "/kind_shamir",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/c4ba6b2cd5b981546c6b0262b5d908efe0c84a41f29d7b9ec44de84b9609b59f-init/diff:/var/lib/docker/overlay2/cdd4959dd4fc9b8acb361193b64950146354298475a93d08606adb61aed10358/diff:/var/lib/docker/overlay2/990045c66fb5109528cdaa27a9381d5343804719b4af148091eb65e88c396ac7/diff:/var/lib/docker/overlay2/9700d2db53c49910be0d1e395ea4850b831089f2f654094d109046335fec6fdc/diff:/var/lib/docker/overlay2/24f99afae8efc3bc79364dd3343bc249f95a9e2361e29ff4106211d7d58ccf30/diff:/var/lib/docker/overlay2/cd9ff497a2072f68ad65544637b1bec127043f8f79d8793aaa7b89ef6033015a/diff",
                "MergedDir": "/var/lib/docker/overlay2/c4ba6b2cd5b981546c6b0262b5d908efe0c84a41f29d7b9ec44de84b9609b59f/merged",
                "UpperDir": "/var/lib/docker/overlay2/c4ba6b2cd5b981546c6b0262b5d908efe0c84a41f29d7b9ec44de84b9609b59f/diff",
                "WorkDir": "/var/lib/docker/overlay2/c4ba6b2cd5b981546c6b0262b5d908efe0c84a41f29d7b9ec44de84b9609b59f/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "7820393d101e",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": true,
            "AttachStderr": true,
            "ExposedPorts": {
                "80/tcp": {}
            },
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "HTTPD_PREFIX=/usr/local/apache2",
                "HTTPD_VERSION=2.4.48",
                "HTTPD_SHA256=1bc826e7b2e88108c7e4bf43c026636f77a41d849cfb667aa7b5c0b86dbf966c",
                "HTTPD_PATCHES="
            ],
            "Cmd": [
                "httpd-foreground"
            ],
            "Image": "httpd",
            "Volumes": null,
            "WorkingDir": "/usr/local/apache2",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {},
            "StopSignal": "SIGWINCH"
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "c0234566cf7c18fd49a3351a5baa0000f898fa67d6e824cc591c3f240b353443",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "80/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/c0234566cf7c",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "47d128b13a97cd609d669ee6cb4506196c914997d2808cd2f8a34bd3b28050bf",
            "Gateway": "173.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "173.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "c88a3f1f0b5c871a291489ac2c1334ec3f6ee1ef5d94a022128667d40f387836",
                    "EndpointID": "47d128b13a97cd609d669ee6cb4506196c914997d2808cd2f8a34bd3b28050bf",
                    "Gateway": "173.17.0.1",
                    "IPAddress": "173.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]
[root@localhost ~]# curl 173.17.0.2
<html><body><h1>It works!</h1></body></html>

停止、啟動、重啟容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
7820393d101e   httpd     "httpd-foreground"   15 minutes ago   Up 11 minutes   80/tcp    kind_shamir
[root@localhost ~]# docker stop 7820393d101e
7820393d101e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker start 7820393d101e
7820393d101e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS        PORTS     NAMES
7820393d101e   httpd     "httpd-foreground"   16 minutes ago   Up 1 second   80/tcp    kind_shamir
[root@localhost ~]# docker restart 7820393d101e
7820393d101e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS        PORTS     NAMES
7820393d101e   httpd     "httpd-foreground"   16 minutes ago   Up 1 second   80/tcp    kind_shamir

洗掉鏡像

[root@localhost ~]# docker images -q
73b8cfec1155
[root@localhost ~]# docker rmi 73b8cfec1155
Untagged: httpd:latest
Untagged: httpd@sha256:61e49dd08a51d6fc421ed257bd8eb461cf2d48269d9ab2b4ff5d4c69826c3c9c
Deleted: sha256:73b8cfec11558fe86f565b4357f6d6c8560f4c49a5f15ae970a24da86c9adc93
Deleted: sha256:8dfdbde7a5f7b804884b5e1140b66cc78155416621e63369044f370278171f2a
Deleted: sha256:c4d64464b597b3d82b3a3bdb91979a70a8db3c707d484e54420573b33300f58c
Deleted: sha256:75b62cbb47406663192fa84a9fc496c5b3dec3b2f489a01a073587af9218ca7d
Deleted: sha256:1a75986150c7f76dac53856bced40beed6b7642e1686f11286325765f0c3b00c
Deleted: sha256:814bff7343242acfd20a2c841e041dd57c50f0cf844d4abd2329f78b992197f4
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

洗掉容器

如果容器是運行狀態則洗掉失敗,需要停止容器或使用-f選項才能洗掉

[root@localhost ~]# docker rm -f 7820393d101e
7820393d101e
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

啟動容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker run -d httpd
47da84658a2c46b104aea49e2904619e99123abdb01258ca9965c48f12357ebe
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
47da84658a2c   httpd     "httpd-foreground"   3 seconds ago   Up 2 seconds   80/tcp    quizzical_johnson

進入容器

引數:
-i 保持容器運行,通常與 -t 同時使用,加入it這兩個引數后,容器創建后自動進入容器中,退出容器后,容器自動關閉,
-t 為容器重新分配一個偽輸入終端,通常與 -i 同時使用,
-d 以守護(后臺)模式運行容器,創建一個容器在后臺運行,需要使用docker exec 進入容器,退出后,容器不會關閉,
-it 創建的容器一般稱為互動式容器,-id 創建的容器一般稱為守護式容器
–name 為創建的容器命名,
[root@localhost ~]# docker exec -it 47da84658a2c /bin/bash
root@47da84658a2c:/usr/local/apache2#  
//退出容器,容器不會關閉
root@47da84658a2c:/usr/local/apache2# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS     NAMES
47da84658a2c   httpd     "httpd-foreground"   3 minutes ago   Up 3 minutes   80/tcp    quizzical_johnson

獲取容器日志

[root@localhost ~]# docker logs 47da84658a2c
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 173.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 173.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Jul 27 23:47:36.517430 2021] [mpm_event:notice] [pid 1:tid 140148978943104] AH00489: Apache/2.4.48 (Unix) configured -- resuming normal operations
[Tue Jul 27 23:47:36.517646 2021] [core:notice] [pid 1:tid 140148978943104] AH00094: Command line: 'httpd -D FOREGROUND'

查看容器資訊

[root@localhost ~]# docker inspect 47da84658a2c
[
    {
        "Id": "47da84658a2c46b104aea49e2904619e99123abdb01258ca9965c48f12357ebe",
        "Created": "2021-07-27T23:47:36.042761643Z",
        "Path": "httpd-foreground",
        "Args": [],
        "State": {
......

//顯示系統范圍的資訊

[root@localhost ~]# docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 4
  Running: 1
  Paused: 0
  Stopped: 3
 Images: 1
 Server Version: 20.10.7
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc version: v1.0.0-0-g84113ee
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 4.18.0-294.el8.x86_64
 Operating System: CentOS Stream 8
 OSType: linux
 Architecture: x86_64
 CPUs: 2
 Total Memory: 3.623GiB
 Name: localhost.localdomain
 ID: UYTA:DAJB:XNJE:PRIC:KYIT:PER6:MM43:BLNV:FFCE:MBAT:JKAS:6BNX
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://pu2s3wy2.mirror.aliyuncs.com/
 Live Restore Enabled: false

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

標籤:其他

上一篇:容器化工具--------Docker的資料管理和鏡像的創建

下一篇:gitlab基本配置和使用

標籤雲
其他(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