Docker常用命令以及使用案例

參考資料

docker這個(gè)東西真的很好用,值得一學(xué)。

docker 安裝

1、docker的安裝非常簡(jiǎn)單,只需要執(zhí)行官方提供的腳本就可以了。


// 官方腳本安裝

wget -qO- https://get.docker.com/ | sh

// 阿里云腳本安裝

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

// daocloud腳本安裝

curl -sSL https://get.daocloud.io/docker | sh

當(dāng)然由于墻的問(wèn)題,執(zhí)行這個(gè)腳本有可能會(huì)異常緩慢,具體的解決方法就是更換linux源即可。

2、當(dāng)要以非root用戶可以直接運(yùn)行docker時(shí),需要執(zhí)行以下命令:


sudo usermod -aG docker 賬戶名

否則系統(tǒng)會(huì)提示以下報(bào)錯(cuò):


docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?

3、配置docker的鏡像源


// 修改配置文件 /etc/docker/daemon.json

vim /etc/docker/daemon.json

// 加入下面的內(nèi)容:

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

// 然后重啟docker服務(wù)即可
service docker restart

由于不可描述的原因,docker的源下載非常慢,這里使用DaoCloud的源,詳見 https://www.docker-cn.com/registry-mirror

鏡像運(yùn)行命令

鏡像運(yùn)行的命令比較復(fù)雜,這里把常用的幾個(gè)命令放這里,當(dāng)作案例。

1、運(yùn)行busybox


// -it 終端交互運(yùn)行

docker run -it busybox

2、運(yùn)行nginx


// -d 守護(hù)進(jìn)程運(yùn)行

// -p 端口映射

// -v 文件路徑映射

// -- mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,readonly

docker run -d -p 80:80 -v /var/www/html:/usr/share/nginx/html nginx:v2

// 另一種方式

// -- mount 和上面一樣,也是用于文件映射,但是有不同的就是如果鏡像里面的文件不存在,

// 則生成容器的時(shí)候回報(bào)錯(cuò)。

// readonly 參數(shù)可以不傳,如果傳了,表示對(duì)應(yīng)容器內(nèi)的文件只讀。

docker run -d -p 80:80 \

    --mount type=bind,source=/var/www/html,target=/usr/share/nginx/html,readonly \

    nginx:v2



// 如果不想指定web容器的端口,則可以使用 -P(注意這里是大寫) 來(lái)隨機(jī)映射

docker run -d -P nginx:v2

3、啟用一個(gè)ubuntu終端


// --rm 容器退出后自動(dòng)刪除

// --restart=always 自動(dòng)重啟

// --name 容器名稱 命名容器

docker run -it --rm --restart=always --name myubuntu ubuntu:latest

4、容器互聯(lián)

通過(guò)創(chuàng)建一個(gè)docker網(wǎng)絡(luò),讓兩個(gè)容器運(yùn)行在同一個(gè)網(wǎng)絡(luò)中。


1) 創(chuàng)建一個(gè)docker網(wǎng)絡(luò)

docker network create -d bridge my-net

2) 運(yùn)行一個(gè)容器并連接到新建的 my-net 網(wǎng)絡(luò)

docker run -it --rm --name busybox1 --network my-net busybox sh

3) 打開新的終端,再運(yùn)行一個(gè)容器并加入到 my-net 網(wǎng)絡(luò)

docker run -it --rm --name busybox2 --network my-net busybox sh

4) 在 busybox1 容器輸入以下命令

/ # ping busybox2

PING busybox2 (172.19.0.3): 56 data bytes

64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.072 ms

64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.118 ms

// 可以看到在 busybox1 中是能請(qǐng)求到 busybox2 的。

// 同樣,在 busybox 中也能請(qǐng)求到 busybox1

服務(wù)命令

1、docker的啟動(dòng)/重啟/關(guān)閉


service docker start/restart/stop

2、安裝Docker管理工具


docker run -d -p 9001:9000 -v "/var/run/docker.sock:/var/run/docker.sock" portainer/portainer

portainer 是一款易用的docker圖形管理工具,地址如下:https://github.com/portainer/portainer

鏡像命令

1、查詢docker鏡像


docker images

2、獲取鏡像


docker pull (鏡像下載地址/鏡像名稱)

3、刪除鏡像


// 通過(guò)ID刪除

docker rmi (鏡像ID)

// 通過(guò)tag刪除

docker rmi (tag)

// 批量刪除

docker rmi $(docker images | grep "模糊匹配內(nèi)容" | awk '{print $3}')

4、轉(zhuǎn)移鏡像


// 保存鏡像

docker save compose01_web(鏡像名) > t.tar(目標(biāo)文件)

// 讀取鏡像

docker load --input ./t.tar(讀取的文件)

// 也可以一步到位,直接通過(guò)ssh發(fā)送到其他機(jī)器

docker save <鏡像名> | bzip2 | pv | ssh <用戶名>@<主機(jī)名> 'cat | docker load'

docker可以建立自有鏡像倉(cāng)庫(kù),但是一般來(lái)說(shuō)我們還是直接轉(zhuǎn)移會(huì)方便一些。

5、安裝私有倉(cāng)庫(kù)


// 獲取倉(cāng)庫(kù)的鏡像

sudo docker pull registry

// 啟動(dòng)鏡像,將鏡像的存放地址映射為非臨時(shí)目錄

sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

// 啟動(dòng)完成后,如果我們直接push鏡像,會(huì)出現(xiàn)如下提示:

Error response from daemon: Get https://10.10.239.222:5000/v1/_ping: http: server gave HTTP response to HTTPS client

// 這是由于新版本的docker私有庫(kù)要求https傳輸鏡像,所以要進(jìn)行一些設(shè)置,讓我們能夠正常上傳鏡像。

// 操作步驟如下:

// 打開配置文件 /etc/docker/daemon.json,加入json格式的內(nèi)容

{

  "其他配置": "其他配置", // 這里是演示,如果已經(jīng)有其他配置,共用一個(gè)json

  "insecure-registries": ["10.10.239.222:5000"] // 不要求使用ssl的庫(kù)以及端口。

}

// 重啟docker即可

service docker restart

此外:不同版本的linux的設(shè)置方式可能有點(diǎn)不同,具體可以參考這個(gè)文檔 https://yeasy.gitbooks.io/docker_practice/content/repository/registry.html

如果需要配置有認(rèn)證的registry,參考這個(gè)文檔:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html

參考文檔:

6、上傳鏡像


// 上傳鏡像

docker pull

7、查詢鏡像 - 這個(gè)命令用于查詢私有的鏡像庫(kù)


// 查詢鏡像中存在的分類

curl -X GET http://172.16.9.30:5000/v2/_catalog

// 返回

{"repositories":["busybox"]}

// 查詢鏡像的tag

curl -X GET http://172.16.9.30:5000/v2/busybox/tags/list

// 返回

{"name":"busybox","tags":["latest"]}

具體的API查詢地址:https://docs.docker.com/registry/spec/api/

容器命令

1、查詢當(dāng)前容器狀態(tài)


docker ps -a

這里可以不帶 -a ,不帶的情況下只查詢當(dāng)前在運(yùn)行的容器。

2、停止容器運(yùn)行


docker stop (容器ID)

3、刪除容器


docker rm (容器ID)

// 批量刪除

docker rm $(docker ps -qa)

// 批量刪除

docker ps -qa | xargs -n 1 docker rm

4、進(jìn)入一個(gè)已有容器


$ docker exec -it webserver bash

5、轉(zhuǎn)移容器


// 導(dǎo)出容器

docker export

// 導(dǎo)入容器

docker import

6、清除所有未運(yùn)行狀態(tài)的容器


docker container prune

7、設(shè)置容器的dns


// 進(jìn)入docker的配置文件

cd /etc/docker/daemon.json

// 增加下面的內(nèi)容,然后重啟docker服務(wù)

{

  "dns" : [

    "114.114.114.114",

    "8.8.8.8"

  ]

}

// 后續(xù)的容器dns都會(huì)從讀取以上配置的dns

docker run -it --rm ubuntu cat etc/resolv.conf

// 輸出

nameserver 114.114.114.114

nameserver 8.8.8.8

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時(shí)代的程序分發(fā)方式 要說(shuō)最近一年云計(jì)算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,845評(píng)論 15 147
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國(guó)...
    Blazzer閱讀 3,239評(píng)論 0 13
  • 0. 前言 docker是什么?docker是用GO語(yǔ)言開發(fā)的應(yīng)用容器引擎,基于容器化,沙箱機(jī)制的應(yīng)用部署技術(shù)。可...
    sessionboy閱讀 4,006評(píng)論 2 49
  • 夜茫茫,風(fēng)微涼,哪堪寒意襲? 嚖嚖蕭聲起,高樓靜聽,觸動(dòng)心上弦。 望長(zhǎng)空,幽遠(yuǎn)幽遠(yuǎn),晦暗難尋路。 時(shí)聞蟋蟀歌,時(shí)看...
    肝兒寶寶閱讀 248評(píng)論 0 1
  • 更高級(jí)的信息反饋,可以根據(jù)用戶的實(shí)際情況,提供更詳細(xì)的回復(fù),尤其是重要消息。比如ox下,用pages打開doc文件...
    freshtime閱讀 144評(píng)論 0 0

友情鏈接更多精彩內(nèi)容