在正式寫這篇博客前,我先要吐槽下CSDN,昨天這篇文章已經寫完了,並寫已經在CSDN正常發佈了,但是卻找不到文章了,所以得重新再寫一次,還好我有備份,我可真是個小機靈鬼,233333
啓動docker
service docker start
查看docker信息
docker info
查看docker中所有的容器
docker ps -a
恢復正在運行的容器
docker attach 容器ID
啓動並以bash並進入容器
docker attach -ai 容器ID
查看所有的鏡像
docker images
查看鏡像/容器詳情
docker inspect 容器ID/鏡像ID
從鏡像倉庫中拉取或者更新指定鏡像
docker pull 鏡像名:鏡像標籤
刪除容器
docker rm 容器ID
刪除鏡像
docker rmi 鏡像ID
創建一個新的容器並運行
docker run 鏡像名稱
舉例
docker run -p 10066:80 --name nginx-web -it 鏡像ID /bin/bash
作用:以外部的10066端口映射內部的80端口,並啓動ubuntu鏡像 命名爲nginx-web
當以bash方式進入容器後,使用Ctrl + p + q 可以退出容器但不停止容器
查找某個鏡像
docker search 鏡像名稱
運行某個容器
docker start 容器ID
停止正在運行的容器
docker stop 容器ID
提交容器
docker commit -a 'author' -m 'commit image' 容器名稱 鏡像名稱
重命名容器名
docker rename 老容器名稱 新容器名稱
重命名鏡像
docker tag 老鏡像名稱 新鏡像名
兩個容器互聯
docker run -it --name 容器名稱 --link=待連接的容器名稱:待連接的容器別名 鏡像名稱
示例
docker run -it --name cct3 --link=cct1:webtest base-net
解釋: 建立一個基於base-net 鏡像,名稱爲cct3的容器,並且建立與cct1容器的連接,cct1在cct3的別名爲webtest
其實就是docker修改了cct3的hosts文件,所以在cct3中,可以直接使用ping webtest就可以直接ping通,
而不用使用IP這種方式可以防止cct1的IP改變後,cct3無法訪問的問題
建立數據卷(目錄)
docker run -it --name volume-demo -v /home/user/datavolume:/data ubuntu /bin/bash
詳解:宿主目錄爲/home/user/datavolume ,volume-demo容器的映射路徑爲/data
當volume-demo容器的 /data 目錄中有文件更新時,/home/user/datavolume也會同步更新
建立數據卷(容器)
docker run -it --name 新容器名稱 -volumes-from 數據卷容器名 鏡像名 /bin/bash
備份數據卷
docker run --volumes-from dvt3 -v /home/backup:/backup --name dvt10 ubuntu tar cvf /backup/dvt3.tar /datavolume1
詳解: 新建立一個基於ubuntu鏡像且名爲dvt10的容器,掛在在dvt3數據捲上,且執行tar cvf /backup/dvt3.tar /datavolume1命 令,執行完後,宿主機的會生成一個 /home/backup/dvt3.tar的備份文件
還原數據卷
docker run --volumes-from dvt3 -v ~/backup:/backup --name dvt10 ubuntu tar xvf /backup/dvt3.tar
詳解: 新建立一個基於ubuntu鏡像且名爲dvt10的容器,掛在在dvt3數據捲上,且執行tar xvf /backup/dvt3.tar命令,執行完後, 將在dvt3容器對應的目錄中生成dvt3.tar的文件內容
生成鏡像文件
docker save -o 待生成的tar文件名 源鏡像名
加載鏡像文件
docker load -i 鏡像文件
生成容器文件
docker export -o 待生成的tar包名稱 容器名稱
加載容器文件
docker import 待加載的tar包容器文件名 鏡像名稱
使用Dockerfile生成鏡像
docker build -t 新鏡像名稱 .
生成一個鏡像名爲image-name的鏡像
千萬注意: 命令最後的 " ." 代表的不是當前目錄下Dockerfile路徑,這裏指的是上下文路徑