參考資料
docker這個東西真的很好用,值得一學囱挑。
docker 安裝
1、docker的安裝非常簡單,只需要執(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
當然由于墻的問題,執(zhí)行這個腳本有可能會異常緩慢图张,具體的解決方法就是更換linux源即可。
2诈悍、當要以非root用戶可以直接運行docker時祸轮,需要執(zhí)行以下命令:
sudo usermod -aG docker 賬戶名
否則系統(tǒng)會提示以下報錯:
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服務即可
service docker restart
由于不可描述的原因侥钳,docker的源下載非常慢倔撞,這里使用DaoCloud的源,詳見 https://www.docker-cn.com/registry-mirror
鏡像運行命令
鏡像運行的命令比較復雜慕趴,這里把常用的幾個命令放這里痪蝇,當作案例。
1冕房、運行busybox
// -it 終端交互運行
docker run -it busybox
2躏啰、運行nginx
// -d 守護進程運行
// -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 和上面一樣屯耸,也是用于文件映射艳狐,但是有不同的就是如果鏡像里面的文件不存在,
// 則生成容器的時候回報錯锋谐。
// readonly 參數(shù)可以不傳详拙,如果傳了帝际,表示對應容器內(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(注意這里是大寫) 來隨機映射
docker run -d -P nginx:v2
3蹲诀、啟用一個ubuntu終端
// --rm 容器退出后自動刪除
// --restart=always 自動重啟
// --name 容器名稱 命名容器
docker run -it --rm --restart=always --name myubuntu ubuntu:latest
4、容器互聯(lián)
通過創(chuàng)建一個docker網(wǎng)絡(luò)弃揽,讓兩個容器運行在同一個網(wǎng)絡(luò)中脯爪。
1) 創(chuàng)建一個docker網(wǎng)絡(luò)
docker network create -d bridge my-net
2) 運行一個容器并連接到新建的 my-net 網(wǎng)絡(luò)
docker run -it --rm --name busybox1 --network my-net busybox sh
3) 打開新的終端则北,再運行一個容器并加入到 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 中是能請求到 busybox2 的。
// 同樣痕慢,在 busybox 中也能請求到 busybox1
服務命令
1尚揣、docker的啟動/重啟/關(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塔次、刪除鏡像
// 通過ID刪除
docker rmi (鏡像ID)
// 通過tag刪除
docker rmi (tag)
// 批量刪除
docker rmi $(docker images | grep "模糊匹配內(nèi)容" | awk '{print $3}')
4方篮、轉(zhuǎn)移鏡像
// 保存鏡像
docker save compose01_web(鏡像名) > t.tar(目標文件)
// 讀取鏡像
docker load --input ./t.tar(讀取的文件)
// 也可以一步到位,直接通過ssh發(fā)送到其他機器
docker save <鏡像名> | bzip2 | pv | ssh <用戶名>@<主機名> 'cat | docker load'
docker可以建立自有鏡像倉庫俺叭,但是一般來說我們還是直接轉(zhuǎn)移會方便一些恭取。
5、安裝私有倉庫
// 獲取倉庫的鏡像
sudo docker pull registry
// 啟動鏡像熄守,將鏡像的存放地址映射為非臨時目錄
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
// 啟動完成后蜈垮,如果我們直接push鏡像,會出現(xiàn)如下提示:
Error response from daemon: Get https://10.10.239.222:5000/v1/_ping: http: server gave HTTP response to HTTPS client
// 這是由于新版本的docker私有庫要求https傳輸鏡像裕照,所以要進行一些設(shè)置攒发,讓我們能夠正常上傳鏡像。
// 操作步驟如下:
// 打開配置文件 /etc/docker/daemon.json晋南,加入json格式的內(nèi)容
{
"其他配置": "其他配置", // 這里是演示惠猿,如果已經(jīng)有其他配置,共用一個json
"insecure-registries": ["10.10.239.222:5000"] // 不要求使用ssl的庫以及端口负间。
}
// 重啟docker即可
service docker restart
此外:不同版本的linux的設(shè)置方式可能有點不同偶妖,具體可以參考這個文檔 https://yeasy.gitbooks.io/docker_practice/content/repository/registry.html
如果需要配置有認證的registry,參考這個文檔:https://yeasy.gitbooks.io/docker_practice/content/repository/registry_auth.html
參考文檔:
6政溃、上傳鏡像
// 上傳鏡像
docker pull
7趾访、查詢鏡像 - 這個命令用于查詢私有的鏡像庫
// 查詢鏡像中存在的分類
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、查詢當前容器狀態(tài)
docker ps -a
這里可以不帶 -a 董虱,不帶的情況下只查詢當前在運行的容器扼鞋。
2、停止容器運行
docker stop (容器ID)
3愤诱、刪除容器
docker rm (容器ID)
// 批量刪除
docker rm $(docker ps -qa)
// 批量刪除
docker ps -qa | xargs -n 1 docker rm
4云头、進入一個已有容器
$ docker exec -it webserver bash
5、轉(zhuǎn)移容器
// 導出容器
docker export
// 導入容器
docker import
6淫半、清除所有未運行狀態(tài)的容器
docker container prune
7溃槐、設(shè)置容器的dns
// 進入docker的配置文件
cd /etc/docker/daemon.json
// 增加下面的內(nèi)容,然后重啟docker服務
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
// 后續(xù)的容器dns都會從讀取以上配置的dns
docker run -it --rm ubuntu cat etc/resolv.conf
// 輸出
nameserver 114.114.114.114
nameserver 8.8.8.8