一、Docker 核心概念
Docker?是一個開源的容器化平臺,允許開發者將應用及其所有依賴(代碼、運行時、系統工具、庫等)打包成一個輕量級、可移植的“容器”,實現?“一次構建,隨處運行”。
1、容器(Container)
-
輕量級、可執行的軟件包,包含應用及其所有依賴(代碼、運行時、系統工具、庫等)。
-
基于鏡像運行,獨立于宿主機操作系統,共享宿主內核。
2、鏡像(Image)
-
只讀模板,用于創建容器。
-
由多層文件系統疊加而成(UnionFS),支持復用和增量更新。
3、倉庫(Registry)
-
存儲和分發鏡像的服務,如?Docker Hub(默認公共倉庫)、私有倉庫(Harbor)。
4、Docker 與 虛擬機 的比較
- Docker 容器很快,啟動和停止可以在秒級實現,這相比傳統的虛擬機方式(數分鐘)要快得多;
- Docker 容器對系統資源需求很少,一臺主機上可以同時運行數千個
- Docker 容器(在 IBM 服務器上已經實現了同時運行! OK 量級的容器實例);
- Docker 通過類似 Git 設計理念的操作來方便用戶獲取、分發和更新應用鏡像,存儲復用,增量更新;
- Docker 通過 Dockerfile 支持靈活的自動化創建和部署機制,以提高工作效率,并標準化流程
二、Docker 的安裝配置
1、linux 安裝(CentOS)
自己構建yum倉庫源
# step 1: 安裝必要的一些系統工具yum install -y yum-utils# Step 2: 添加阿里云鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3: 安裝Dockeryum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# Step 4: 開啟Docker服務
systemctl enable --now docker# Step 5:驗證安裝
docker version
2、配置國內鏡像加速器
[root@centos ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://docker.nju.edu.cn"]
}
[root@centos ~]# systemctl daemon-reload
[root@centos ~]# systemctl restart docker# 驗證
[root@centos ~]# docker pull busybox //拉取鏡像
Using default tag: latest
latest: Pulling from library/busybox
Digest: sha256:498a000f370d8c37927118ed80afe8adc38d1edcbfc071627d17b25c88efcab0
Status: Image is up to date for busybox:latest
docker.io/library/busybox:latest
[root@centos ~]# docker images //查看本地已有鏡像的基本信息
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 31311c5853a2 5 months ago 4.27MB
其中鏡像的ID信息十分重要, 它唯一標識了鏡像。
在使用鏡像ID的時候, 一般可以使用該ID的前若干個字符組成的可區分串來替代完整的ID。
三 、Docker 核心命令
鏡像管理:
1、docker ?images? ——查看本地鏡像
2、docker ?pull? ubuntu:latest ——拉取鏡像
從穩定性上考慮,不要在生產環境中忽略鏡像的標簽信息或使用默認的latest 標記的鏡像。
3、docker ?rmi ?<image_id>或TAG? ——刪除鏡像,加上 -f 便是強制刪除
注意:當有該鏡像創建的容器存在時, 鏡像文件默認是無法被刪除的。但是通常并不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像。 正確的做法是,先刪除依賴該鏡像的所有容器, 再來刪除鏡像。
4、docker ?tag ?ubuntu:latest ?myubuntu:latest ——為本地鏡像任意添加新的標簽
5、?docker? search? nginx? ——搜索官方倉庫中的鏡像
6、docker ?build ?-t ?myapp:v1 ?. ——構建鏡像
7、docker ?save ?myapp:v1 ?> ?myapp.tar ——導出鏡像
8、docker ?load ?< ?myapp.tar ——從文件導入鏡像
?
容器管理:
1、docker? run? web? /bin/echo? "hello , world !! "?——創建容器并輸出字符串
當利用 docker ?run 來創建并啟動容器時, Docker 在后臺運行的標準操作包括:
- 檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載;
- 利用鏡像創建一個容器,并啟動該容器;
- 分配 一個文件系統給容器,并在只讀的鏡像層外面掛載一層可讀寫層
- 從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去;
- 從網橋的地址池配置一個 IP 地址給容器;
- 執行用戶指定的應用程序;
- 執行完畢后容器被自動終止。
2、docker? run? -it? web? /bin/echo? "hello , world !! "? ——啟動一個bash終端,允許用戶進入交互
-t 選項讓Docker 分配一個 偽終端 并綁定到容器的標準輸入上,-i?則讓容器的標準輸入保持打開
3、docker ?run ?-d ?--name ?web ?nginx ——啟動容器(后端運行)
4、docker ?exec ?-it ?web ?/bin/bash —— 進入容器交互終端
5、docker ?ps ?-a ——查看所有容器(包括已停止)
6、docker ?stop/pause? web?——停止/暫停容器
7、docker ?start ?web?——啟動已停止的容器
8、docker ?rm ?web ——刪除容器? ?docker? rm? ?`docker? ps? -aq` ——刪除所有容器
9、docker ?logs ?web? ——查看容器日志,其他可通過--help 了解
10、docker? export? -o file.tar? name 或? docker? export? name? >? file.tar ——導出容器到 tar文件中。
11、docker? import? file.tar - name/ubuntu:18.04? ? ——導入容器
12、docker ?cp web:/etc/nginx/nginx.conf ?./? ?——從容器復制文件到宿主機