安裝docker
直接安裝docker,參考此文:https://yeasy.gitbook.io/docker_practice/install/ubuntu
離線安裝的
在docker官網(wǎng)選擇一下三個(gè)文件,手動(dòng)安裝https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/
版本號(hào)大家可以自己按照自己系統(tǒng)來(lái)
加載docker鏡像
sudo docker load < test.dockerimage
查看本機(jī)的鏡像
使用?docker images
?或者?docker image list?
命令查看本機(jī)所有的鏡像。
初次從鏡像啟動(dòng)容器
啟動(dòng)有很多種方式,run exec 等,這里使用了run,并且用了端口映射,希望別的設(shè)備進(jìn)行訪問。
sudo docker run -it -d -p 3033:22 f81f02c7ce16[鏡像] /bin/bash
Docker-端口映射可使用-p、-P來(lái)實(shí)現(xiàn):
-p指定要映射的端口,一個(gè)指定端口上只可以綁定一個(gè)容器
-P將容器內(nèi)部開放的網(wǎng)絡(luò)端口隨機(jī)映射到宿主機(jī)的一個(gè)端口上
例如:將容器指定端口隨機(jī)映射到宿主機(jī)一個(gè)端口上,docker run -P 80 -it ubuntu /bin/bash
將容器指定端口指定映射到宿主機(jī)的一個(gè)端口上,docker run -p 8000:80 -it ubuntu /bin/bash
具體參考可以看這篇:https://www.jianshu.com/p/b92d4b845ed6
-d 參數(shù)默認(rèn)不會(huì)進(jìn)入容器,想要進(jìn)入容器需要使用指令 docker exec。
具體內(nèi)容可以參考這篇文章:https://yeasy.gitbook.io/docker_practice/container/daemon
查看本機(jī)的容器
使用?sudo docker ps -a
?命令查看本機(jī)所有的容器
啟動(dòng)和關(guān)掉已經(jīng)存在的容器
啟動(dòng)容器?sudo docker start c1b6333e7ee2[容器]?
關(guān)閉容器sudo docker stop c1b6333e7ee2[容器]
不殺掉容器的情況下退出
attach進(jìn)入容器之后,我們會(huì)有時(shí)候需要退出,這時(shí)候使用ctrl + d退出,容器也要死掉,這時(shí)候有兩種方式可以退出不讓容器死掉:
不使用ctrl + d 使用組合命令,ctrl + p + q
還有一種方式ctrl + d退出不殺掉容器
2.啟動(dòng)時(shí)候使用 exec,例如:先使用sudo docker start c1b6333e7ee2[容器]?
, 再使用?sudo docker exec -it c1b6333e7ee2[容器] /bin/bash?
進(jìn)入一個(gè)已經(jīng)啟動(dòng)容器,這時(shí)候我們使用ctrl + d退出,容器是不會(huì)被殺掉的。
按照目前的容器創(chuàng)建自己的image
sudo docker commit -m="update" -a="羽林君" 289e963a60ad[容器] test:v2 新建一鏡像
本地鏡像的導(dǎo)出、導(dǎo)入(export、import、save、load)
使用?export
?和?import
這兩個(gè)命令是通過容器來(lái)導(dǎo)入、導(dǎo)出鏡像.
(1) export 導(dǎo)出鏡像 ,使用 docker export 命令根據(jù)容器 ID 將容器的文件系統(tǒng)歸檔信息輸出到文件。
sudo docker export cd06d0c64c04 > test.tar
sudo docker export -o test.tar test
上面命令執(zhí)行后,可以看到文件已經(jīng)保存到當(dāng)前的 docker 終端目錄下。
(2) 導(dǎo)入鏡像 使用 docker import 命令則可將這個(gè)鏡像文件導(dǎo)入進(jìn)來(lái)。
sudo docker import new_test < test.tar
sudo docker import test.tar test
從上面的命令可以看出,docker import將container導(dǎo)入后會(huì)成為一個(gè)image,而不是恢復(fù)為一個(gè)container。
此外,也可以通過指定 URL 或者某個(gè)目錄來(lái)導(dǎo)入,例如
sudo docker import http://example.com/exampleimage.tgz example/imagerepo
執(zhí)行 docker images 命令可以看到鏡像確實(shí)已經(jīng)導(dǎo)入進(jìn)來(lái)了。
使用?save
?和?load
這兩個(gè)命令是通過鏡像來(lái)保存、加載鏡像文件的。
(1) 保存鏡像 下面使用 docker save 命令根據(jù) ID 將鏡像保存成一個(gè)文件。
sudo docker save d7693aba42dd > test.tar
我們還可以同時(shí)將多個(gè) image 打包成一個(gè)文件
sudo docker save [images] [images] > [name.tar]
sudo docker save -o [name.tar] [images] [images] ......
(2) 載入鏡像 使用 docker load 命令則可將這個(gè)鏡像文件載入進(jìn)來(lái)。
sudo docker load < test.tar
最后再說(shuō)一下 使用?export
?、import
?和 使用?save
?和?load
?的差異:
1,文件大小不同
export 導(dǎo)出的鏡像文件體積小于 save 保存的鏡像
2,是否可以對(duì)鏡像重命名
docker import 可以為鏡像指定新名稱
docker load 不能對(duì)載入的鏡像重命名
3,是否可以同時(shí)將多個(gè)鏡像打包到一個(gè)文件中
docker export 不支持
docker save 支持
4,是否包含鏡像歷史
export 導(dǎo)出(import 導(dǎo)入)是根據(jù)容器拿到的鏡像,再導(dǎo)入時(shí)會(huì)丟失鏡像所有的歷史記錄和元數(shù)據(jù)信息(即僅保存容器當(dāng)時(shí)的快照狀態(tài)),所以無(wú)法進(jìn)行回滾操作。
而 save 保存(load 加載)的鏡像,沒有丟失鏡像的歷史,可以回滾到之前的層(layer)。
5,應(yīng)用場(chǎng)景不同
docker export 的應(yīng)用場(chǎng)景:主要用來(lái)制作基礎(chǔ)鏡像,比如我們從一個(gè) ubuntu 鏡像啟動(dòng)一個(gè)容器,然后安裝一些軟件和進(jìn)行一些設(shè)置后,使用 docker export 保存為一個(gè)基礎(chǔ)鏡像。然后,把這個(gè)鏡像分發(fā)給其他人使用,比如作為基礎(chǔ)的開發(fā)環(huán)境。
docker save 的應(yīng)用場(chǎng)景:如果我們的應(yīng)用是使用 docker-compose.yml 編排的多個(gè)鏡像組合,但我們要部署的客戶服務(wù)器并不能連外網(wǎng)。這時(shí)就可以使用 docker save 將用到的鏡像打個(gè)包,然后拷貝到客戶服務(wù)器上使用 docker load 載入。
結(jié)語(yǔ)
這就是我自己的一些docker使用分享。如果大家有更好的想法和需求,也歡迎大家加我好友交流分享哈。
作者:良知猶存,白天努力工作,晚上原創(chuàng)公號(hào)號(hào)主。公眾號(hào)內(nèi)容除了技術(shù)還有些人生感悟,一個(gè)認(rèn)真輸出內(nèi)容的職場(chǎng)老司機(jī),也是一個(gè)技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。