文章目錄
- 1. Docker中的容器
- 2. OCI和OCF
- 3. Docker原理圖
- 4.Docker鏡像與鏡像倉庫的關系
- 5. Docker物件
- 6. 安裝及使用Docker
- 6.1 Docker安裝
- 6.2 Docker加速
- 6.3 Docker常用的操作
- 7. docker event state
1. Docker中的容器
lxc --> libcontainer --> runC

2. OCI和OCF
OCI(Open Container-initiative):
- 由Linux基金會主導于2015年6月創立
- 旨在圍繞容器格式和運行時制定一個開放的工業化標準
- 包含兩個規范
運行時的規范(runtime-spec)
鏡像規范(image-spec)
OCF(Open Container Format):
runC 是一個 CLI (command-line interface)工具,用于根據 OCI 規范生成和運行容器
- 容器作為 runC 的子行程啟動,可以嵌入到各種其他系統中,而無需運行守護行程
- runC 建立在 libcontainer 之上,同樣的容器技術為數百萬個 Docker Engine 安裝提供支持
- runC直接與容器所依賴的cgroup/linux kernel等進行互動,負責為容器配置cgroup/namespace等啟動容器所需的環境,創建啟動容器的相關行程,
3. Docker原理圖

Docker pull向Docker daemon發送指令,告訴Docker daemon要拉取某一個鏡像,Docker daemon首先會檢查本機鏡像是否存在,如果存在且版本就是我們想要拉取的版本,它就不會做任何的操作,如果不存在下一步它會到Docker的倉庫中找我們要拉取的鏡像,如果找到了就會有Docker倉庫傳送到本機,
Docker run:首先把命令發送到Docker daemon,Docker daemon會先檢查鏡像在本機是否存在,如果不存在相當于執行了一個Docker pull的程序,下載回來之后會以一定方式把鏡像運行起來變成Docker容器,
4.Docker鏡像與鏡像倉庫的關系
我們可以發現Docker鏡像倉庫的名字是Registry而不是repository?因為在Docker中倉庫的名字是以應用的名稱命名的,

鏡像是靜態的,而容器是動態的,容器有其生命周期,鏡像與容器的關系類似于程式與行程的關系,鏡像類似于檔案系統中的程式檔案,而容器則類似于將一個程式運行起來的狀態,也就是行程,所以容器是可以洗掉的,容器被洗掉后其鏡像是不會被洗掉的,
5. Docker物件
當你使用 Docker 時,您正在創建和使用影像、容器、網路、卷、插件和其他物件,
- 鏡像
鏡像是一個只讀模板,其中包含創建 Docker 容器的說明
通常,一個鏡像基于另一個鏡像,并帶有一些額外的自定義
你可以創建自己的鏡像,也可以僅使用其他人創建并在倉庫中發布的鏡像 - 容器
容器是鏡像的可運行實體,
你可以使用 Docker API 或 CLI 創建、運行、停止、移動或洗掉容器,
你可以將容器連接到一個或多個網路,為其附加存盤,甚至可以根據其當前狀態創建新鏡像,
6. 安裝及使用Docker
6.1 Docker安裝
//配置yum倉庫,我們配置阿里云的源
[root@localhost ~]# vim /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
[root@localhost ~]# yum makecache
[root@localhost ~]# dnf -y install docker-ce
安裝程序略...
6.2 Docker加速
docker-ce的組態檔是/etc/docker/daemon.json,此檔案默認不存在,需要我們手動創建并進行配置,而docker的加速就是通過配置此檔案來實作的,
docker的加速有多種方式:
- docker cn
- 中國科技大學加速器
- 阿里云加速器(需要通過阿里云開發者平臺注冊帳號,免費使用個人私有的加速器)
我們使用阿里云加速器





//啟動docker就能生成/etc/docker目錄
[root@localhost ~]# systemctl start docker
[root@localhost ~]# ls /etc/docker/
key.json
[root@localhost ~]# cat > /etc/docker/daemon.json <<EOF
> {
> "registry-mirrors": ["https://1gnt5vnf.mirror.aliyuncs.com"]
> }
> EOF
//重啟docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
6.3 Docker常用的操作
| 命令 | 功能 |
|---|---|
| docker search | 在Docker Hub中搜索鏡像 |
| docker pull | 從倉庫中提取鏡像或存盤庫 |
| docker images | 列出鏡像 |
| docker create | 創建一個新的容器 |
| docker start | 啟動一個或多個已停止的容器 |
| docker run | 在新容器中運行命令 |
| docker attach | 附加到運行容器 |
| docker ps | 列出容器 |
| docker logs | 提取容器的日志 |
| docker restart | 重新啟動容器 |
| docker stop | 停止一個或多個運行中的容器 |
| docker kill | 殺死一個或多個正在運行的容器 |
| docker rm | 洗掉一個或更多的容器 |
| docker exec | 在正在運行的容器中運行命令 |
| docker info | 顯示系統范圍的資訊 |
| docker inspect | 回傳有關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-257.el8.x86_64
Operating System: CentOS Stream 8
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 780.3MiB
Name: minion2
ID: KILY:JJ2B:TIKH:ZWX5:SLZI:2Y62:PK4O:4TDG:U3ET:JD7Q:6DNH:IPSD
Docker Root Dir: /var/lib/docker #docker的家目錄
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://1gnt5vnf.mirror.aliyuncs.com/ #這里就是我們剛剛加的加速器
Live Restore Enabled: false
//查看版本資訊
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 20.10.7 #Docker版本
API version: 1.41 #API版本
Go version: go1.13.15 #Go語言版本
Git commit: f0df350 #Git提交
Built: Wed Jun 2 11:56:24 2021 #什么時候做的這個包
OS/Arch: linux/amd64 #平臺
Context: default #安全背景關系
Experimental: true #實驗版本
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:54:48 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.8
GitCommit: 7eba5930496d9bbe375fdf71603e610ad737d2b2
runc:
Version: 1.0.0
GitCommit: v1.0.0-0-g84113ee
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker hub地址
https://hub.docker.com/
示例:
//以拉tomcat為例
[root@localhost ~]# docker pull tomcat #直接這樣拉默認都是最新的
Using default tag: latest
latest: Pulling from library/tomcat
627b765e08d1: Pull complete
c040670e5e55: Pull complete
073a180f4992: Pull complete
bf76209566d0: Pull complete
f10db7ba7580: Pull complete
5b2f970878fa: Pull complete
ed434bfebf18: Pull complete
f6c437110aa9: Pull complete
a772951f83db: Pull complete
752225c3768e: Pull complete
Digest: sha256:6e40250d8fac4eca05c2067cb81f79427e4ddbaf4e78d5ecd21c35e8c5f2bfcf
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
//查看鏡像是否拉取成功
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 46cfbf1293b1 4 days ago 668MB
//創建一個容器
[root@localhost ~]# docker create tomcat
b3b0780aa2f83ea105dad83848005b8f2018346155511167324cc07c2b136513
//查看容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
//這樣是看不到的,因為容器沒有啟動
//我們可以加上-a查看
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3b0780aa2f8 tomcat "catalina.sh run" 51 seconds ago Created beautiful_khayyam
//啟動這個docker,通過這個ID來啟動
[root@localhost ~]# docker start b3b0780aa2f8
b3b0780aa2f8
//然后再查看
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3b0780aa2f8 tomcat "catalina.sh run" 2 minutes ago Up 6 seconds 8080/tcp beautiful_khayyam
//查看一些低級資訊
[root@localhost ~]# docker inspect b3b0780aa2f8
[
{
"Id": "b3b0780aa2f83ea105dad83848005b8f2018346155511167324cc07c2b136513",
"Created": "2021-07-27T15:19:50.39117496Z",
"Path": "catalina.sh",
"Args": [
"run"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 5004,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-07-27T15:21:58.39777026Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
此處省略N行...
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "ccd198f93c2c43c7c3530d12cf2c38ebb955caf37530b2205f01217cb8d069b7",
"EndpointID": "2bd299dcafaa115c32490ee97fc3db74e22c32c04e143aca305352c8c09b256a",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
//通過上面的ip是可以訪問的
[root@localhost ~]# curl 172.17.0.2:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="lin
//在正在運行的容器中運行命令
[root@localhost ~]# docker exec b3b0780aa2f8 pwd
/usr/local/tomcat
//直接通過it選項進入互動模式
[root@localhost ~]# docker exec -it f723b18dc53c /bin/bash
root@f723b18dc53c:/usr/local/tomcat# pwd
/usr/local/tomcat
//通過-d選項來運行
[root@localhost ~]# docker run -d tomcat
f723b18dc53c610ddff2513988f2643933212c5d5d95af64c45cbe5ee7461aec
//查看日志
[root@localhost ~]# docker logs b3b0780aa2f8
7. docker event state

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291145.html
標籤:其他
