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)]](https://img.uj5u.com/2021/07/30/251355300900112.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)]](https://img.uj5u.com/2021/07/30/251355300900113.png)
為什么鏡像倉庫名字是Registry而不是repository?在docker中倉庫的名字是以應用的名稱取名的,

鏡像是靜態的,而容器是動態的,容器有其生命周期,鏡像與容器的關系類似于程式與行程的關系,鏡像類似于檔案系統中的程式檔案,而容器則類似于將一個程式運行起來的狀態,也即行程,所以容器是可以洗掉的,容器被洗掉后其鏡像是不會被洗掉的,
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)]](https://img.uj5u.com/2021/07/30/251355300900114.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qElYWQI5-1627398306042)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727225958002.png)]](https://img.uj5u.com/2021/07/30/251355300900115.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-42FHs94Y-1627398306043)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727230101289.png)]](https://img.uj5u.com/2021/07/30/251355300900116.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4s11EP7i-1627398306044)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727230216871.png)]](https://img.uj5u.com/2021/07/30/251355300900117.png)
![[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dbYzrDux-1627398306045)(C:\Users\Teng\AppData\Roaming\Typora\typora-user-images\image-20210727225804094.png)]](https://img.uj5u.com/2021/07/30/251355300900118.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 search | Search the Docker Hub for images(在Docker Hub中搜索鏡像) |
| docker pull | Pull an image or a repository from a registry(從注冊表中提取鏡像或存盤庫) |
| docker images | List images(列出鏡像) |
| docker create | Create a new conntainer(創建一個新的容器) |
| docker start | Start one or more stopped containers(啟動一個或多個已停止的容器) |
| docker run | Run a command in a new container(在新容器中運行命令) |
| docker attach | Attach to a runninng container(進入到運行容器中,退出時容器停止運行) |
| docker ps | List containers(列出容器) |
| docker logs | Fetch the logs of a container(提取容器的日志) |
| docker restart | Restart a container(重新啟動容器) |
| docker stop | Stop one or more running containers(停止一個或多個運行中的容器) |
| docker kill | Kill one or more running containers(殺死一個或多個正在運行的容器) |
| docker rm | Remove onne or more containers(取出一個或更多的容器) |
| docker exec | Run a command in a running container(進入容器中) |
| docker info | Display system-wide information(顯示系統范圍的資訊) |
| docker inspect | Return 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基本配置和使用
