01、docker基礎指令

慢乌龟不出事發表於2024-07-03

docker的安轉可以採用yum和二進位制方式安裝,在此不再贅述

docker映象和容器

系統的安裝盤就叫映象,常見的Ghost技術做的GHO系統映象和Docker映象非常像。

Docker映象是分層的

Docker映象拉取下來,可以直接執行,執行後的東西就叫做容器,一個映象可以啟動很多容器。

容器就是映象啟動後的狀態,在Linux系統中就是一個程序,但容器是可以進入的,就像進入了一個虛擬機器裡

1)配置加速器

編寫 /etc/docker/daemon.json

cat > /etc/docker/daemon.json <<EOF
{
 "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
EOF

重啟docker服務

systemctl restart docker

檢查是否生效

docker info |grep -A 3 'Registry Mirrors'

2)拉取映象

docker pull busybox
## 這個busybox就是系統映象名字,是從hub.docker.com拉取映象

3)檢視當前系統映象

docker image ls
## 或者
docker images

4)搜尋映象

docker search ubuntu
## 如果需要查詢映象版本,訪問官網 https://hub.docker.com 
## 搜尋對應的映象名字,然後點tag進入檢視

拉取指定版本的映象

docker pull nginx:1.23.2

5)給映象打標籤

docker tag busybox:latest aminglinux:1.2.3

6)啟動容器

docker run -it busybox
## 把映象啟動為容器,-i表示讓容器的標準輸入開啟
## -t 表示分配一個偽終端
## -d 表示後臺啟動
## 要把 -i -t -d 放到映象名字前面

7)檢視容器

docker ps -a 
## 如果不加 -a ,則不顯示已經停止的容器

8)停止容器

docker stop 容器Id
## 容器Id,透過 docker ps 來獲取

10)刪除容器

docker rm 容器Id
## 如果容器未停止,會報錯,則需要加 -f

10)刪除映象

docker rmi aminglinux:1.2.3
## 這裡因為aminglinux:1.2.3 為 busybox 的一個tag,所以此操作只會刪除此tag
## 並不會真正刪除映象
## 如果該映象沒有tag,則直接刪除映象

也可以直接指定映象Id進行刪除

docker rmi 映象id

11)拉取映象+啟動容器

docker run -itd redis

12)啟動容器時,給容器自定義名字

docker run --name web01 -itd ubuntu

13)容器執行後直接退出並刪除

docker run --rm -it ubuntu bash -c "sleep 30"

14)進入容器操作

docker exec -it web01 bash

進去後,相當於進入了一個虛擬機器,可以安裝其他軟體,比如nginx

apt update
apt install -y nginx

15)將容器重新打包成新映象

docker commit -m "install nginx" -a "aming" web01 nginx_ubuntu:1.0
## 這裡的web01可以改為容器Id

在此檢視映象列表,發現多了一個nginx_ubuntu:1.0

16)將映象儲存為一個檔案

docker save nginx -o nginx.img

17)將匯出的映象檔案匯入

docker load -i nginx.img
## 或者
docker load --input nginx.img

18)將容器匯出為一個檔案

docker export web01 > web01.tar

19)將匯出的檔案匯入為新的映象

docker import - ubuntu_test < web01.tar

20)docker save 和 docker export 的差異

docker save 儲存的是映象,docker export 儲存的是容器
docker save 會保留映象所有的歷史紀錄,docker export不會,即沒有commit歷史
docker load 用來載入映象包,docker import 用來載入容器包,但兩者都會恢復為映象
docker load 不能對載入的映象重新命名,而docker import 可以為映象指定新名詞

Docker的資料持久化

1.本地目錄對映到容器裡

mkdir -p /data/
docker run -tid -v /data/:/data ubuntu bash
# -v 用來指定掛載目錄
# :前面的/data/為宿主機的本地目錄
# :後面的/data/為容器裡的目錄,會在容器中自動建立

在宿主機本地目錄中建立一個檔案

echo "hello" > /data/1.txt

再進入容器中檢視

docker exec -it 容器Id或者容器名 bash -c "cat /data/1.txt"

2.資料卷

建立資料卷

docker volume create testvol 
## testvol 為資料卷的名字

列出資料卷

docker volume ls

檢視資料卷資訊

docker volume inspect testvol

使用資料卷

docker run -itd --name aming01 -v testvol:/data/ ubuntu
## 與之前的直接對映本地目錄不同,:左邊為資料卷的名字

多容器共享一個資料卷

docker run -itd --name aming02 -v testvol:data/ ubuntu

3.將宿主機的檔案傳輸進容器裡

docker cp /etc/fstab aming01:/tmp/test.txt
docker exec -it aming01 cat /tmp/test.txt

docker網路

Docker服務啟動時會生成一個docker0網路卡,這個網路卡是實現容器網路通訊的根本
預設容器使用的網路型別為橋接(bridge)模式,這個橋接和VMware中的橋接不一樣

更類似於VMware中的NAT模式

每啟動一個容器,都會產生一個虛擬網路卡 vethxxx

檢視docker容器網路相關規則

iptables -nvL -t nat 
## 可以看到docker相關規則,容器可以聯網,就是靠這些規則實現的

1.host模式

docker run -itd --net=host --name aming03 ubuntu

可以進入容器內,檢視hostname 檢視IP地址

這種模式容器和宿主機共享主機名、IP

2.container模式

改模式下,啟動容器時,需要指定目標容器Id或者name,意思是將要啟動的容器使用和目標容器一樣的網路,即IP一樣

docker run -itd --net=container:/aming01 --name aming04 ubuntu

可以進入容器檢視aming01和aming04的網路情況

3.none模式

即不需要配置網路

docker run -itd --net=none --name=aming05 ubuntu_test bash

檢視

docker exec -it aming05 bash -c "ip add"

4.birdge模式

也就是預設模式,可以--net=bridge 也可以不指定--net,預設就是bridge

5.埠對映

docker run -itd -v /data/:/var/www/html/ -p 8088:80 --name aming06 ubuntu_test

-p 宿主機監聽埠:容器監聽埠

相關文章