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 宿主機監聽埠:容器監聽埠