1. docker基礎知識
1.1 什么是docker
docker就是一項容器虛擬化的技術.
容器虛擬化技術:簡單而言,就是把開發環境和代碼一起打包做成一個容器,放在其他電腦上就可以直接運行。類似於虛擬機,把環境配好,就可以直接運行了,但是容器虛擬化和虛擬機還是有很大區別。
1.2 docker能做什么
一次構建,隨處運行。
更快捷的應用交付和部署;更便捷的升級和擴縮容;更加簡單的系統運維;更高效的計算機資源利用。
它解決了虛擬機存在的資源占用多,冗余步驟多和啟動慢的特點,剔除掉虛擬機中模擬的硬件以及不必要的的東西都剔除了。保留了必要的內核和用戶自己根據需要安裝的容器,所以更加輕便。
1.3 docker三要素
鏡像(image):docker鏡像,image,就是一個只讀的模板,鏡像可以用來創建docker容器,一個鏡像可以創建多個容器。
容器(container): docker利用容器獨立運行的一個或者一組應用。容器就是鏡像創建的具體實例,可以把容器看成是一個簡易版的linux系統
倉庫:就是存放鏡像的地方
1.4 安裝docker
docker要求cent os 系統的內核要高於3.10.
本次安裝選擇在cent os7上進行安裝。
# 查看linux版本
uname -r
3.10.0-1160.el7.x86_64
卸載舊版本(如果之前安裝過舊版本)
yum remove docker docker-common docker-selinux docker-engine
添加yum依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
設置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看所有倉庫中所有docker版本,並選擇特定版本安裝
yum list docker-ce --showduplicates | sort -r
安裝docker
yum install docker-ce
啟動並加入開機自啟
# 啟動
systemctl start docker
# 允許開機自啟
systemctl enable docker
驗證是否安裝成功
docker version
Client: Docker Engine - Community
Version: 20.10.10
API version: 1.41
Go version: go1.16.9
Git commit: b485636
Built: Mon Oct 25 07:44:50 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.10
API version: 1.41 (minimum version 1.12)
Go version: go1.16.9
Git commit: e2f740d
Built: Mon Oct 25 07:43:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.11
GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
⚠️ 國外鏡像一般很難訪問,建議配置阿里雲鏡像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.5 阿里雲鏡像加速配置
阿里雲鏡像加速地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
進入后里面有配置加速器信息
vi /etc/docker/daemon.json
驗證配置阿里雲鏡像加速器成功
docker info后顯示Registry Mirrors中顯示有阿里雲

2. docker 鏡像命令
2.1 查看本地鏡像
[root@javatools ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
| options | 含義 |
|---|---|
| -a | 列出本地所有的鏡像,包含中間鏡像 |
| -q | 只顯示鏡像id |
| --digests | 顯示鏡像的摘要信息 |
| --no-trunc | 顯示完整的鏡像信息 |
2.2 查找鏡像
[root@javatools ~]# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Dockeriz… 1575 [OK]
| 參數 | 說明 | 舉例 |
|---|---|---|
| --no-trunc | 顯示出完整的鏡像描述 | docker search hello-world --no-trunc |
| --filter | 過濾 | docker search --filter=stars=30 --no-trunc hello-world |
2.3 拉取鏡像
# 如果不輸入:tag, 其實默認是:latest
docker pull image_name: tag

2.4 刪除某個鏡像
docker rmi 某個鏡像名字ID
⚠️ -f 強制刪除
| 命令 | 說明 |
|---|---|
| docker rmi -f 鏡像id | 刪除一個 |
| docker rmi -f 鏡像1:TAG 鏡像2:TAG2 | 刪除多個 |
| docker rmi -f $(docker images -qa) | 刪除全部 |
3. docker 容器命令
有鏡像才能創建容器。本次下載一個cent os 鏡像。 docker pull cent os
3.1 新建並啟動容器
docker run [options] image [command][args]
| 參數說明 | 含義 |
|---|---|
| -name | 容器新名字,為容器指定一個名字 |
| -d | 以后台運行容器,並返回容器id |
| -i | 以交互式模式運行容器,通常與-t同時使用 |
| -t | 為容器重新分配一個偽輸入終端,通常與-i 同時使用 |
| -P | 隨機端口映射 |
| -p | 指定端口映射 |
比如: docker run -it centos:latest /bin/bash 后面的 /bin/bash 寫不寫, 都是一樣的。啟動成功后,終端左邊會顯示容器的ID
docker run --name="centos7" -it centos 啟動一個容器名為centos7
3.2 列出所有正在運行的容器
docker ps [OPTIONS]
| 參數說明 | 含義 |
|---|---|
| -a | 列出當前所有正在運行的容器+歷史運行過的 |
| -l | 顯示最近創建的容器 |
| -n | 顯示最近n個創建的容器 |
| -q | 靜默模式,只顯示容器編號 |
| --no-trunc | 不截斷輸出 |
docker ps -a

3.3 退出容器
- exit: 容器停止退出
- ctrl+p+q: 容器不停止退出
3.4 啟動容器
docker start 容器id或容器名
3.5 重啟容器
docker restart 容器id或容器名
3.6 停止容器
docker stop 容器id或容器名
3.7 強制停止容器
docker kill 容器id或容器名
3.8 刪除已停止的容器
docker rm 容器id
一次性刪除所有容器
docker rm -f $(docker ps -a -q)
3.9 啟動守護式容器
docker run -d 容器名
docker容器后台運行,就必須要有一個前台進程,容器運行的命令如果不是那些一直掛起的命令(top、tail), 就會自動退出。這是由於docker的機制問題。
3.10 查看容器日志
docker logs -f -t --tail 容器id
| 參數 | 說明 |
|---|---|
| -t | 加入時間戳 |
| -f | 跟隨最新的日志打印 |
| --tail | --tail 數字 顯示最后多少條 |
3.11 查看容器內部運行的進程
docker top 容器id
3.12 查看容器內部細節
docker inspect 容器id
3.13 進入正在運行的容器並以命令行交互
- docker exec -it 容器ID bashShell
- docker attach 容器ID
區別
attach 直接進入容器啟動命令的終端,不會啟動新的進程
exec 是在容器中打開新的終端,並且可以啟動新的進程
3.14 文件拷貝
docker cp 容器ID:容器內路徑 目的主機路徑
4. docker卸載
# 停止服務
systemctl stop docker
# 移除docker
yum -y remove docker-ce
# 刪除相關依賴包
rm -rf /var/lib/docker
5. 安裝過程排錯
- 報錯1錯誤:軟件包:docker-ce-rootless-extras-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:slirp4netns >= 0.4
錯誤:軟件包:docker-ce-rootless-extras-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:fuse-overlayfs >= 0.7
錯誤:軟件包:3:docker-ce-20.10.12-3.el7.x86_64 (docker-ce-stable)需要:container-selinux >= 2:2.74
錯誤:軟件包:containerd.io-1.4.13-3.1.el7.x86_64 (docker-ce-stable)需要:container-selinux >= 2:2.74,您可以嘗試添加 --skip-broken 選項來解決該問題。

根據報錯提示信息,可以看出是container-selinux版本低或沒有安裝的原因,導致系統不兼容,所以需要升級重新安裝。
# 從阿里源拉取依賴
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
# 安裝最新的contain-selinu
yum install container-selinux -y
再次執行docker安裝命令yum install docker-ce -y,安裝成功。

