Docker

Docker是可以將任何應(yīng)用包裝在Linux Contain中運行的工具,基于Docker的沙箱環(huán)境可以實現(xiàn)輕型隔離,多個容器之間不會相互影響,Docker可以實現(xiàn)自動化打包和部署任何應(yīng)用,方便的創(chuàng)建一個輕量級私有Pass云,也困意用于搭建開發(fā)測試環(huán)境以及部署可擴(kuò)展的Web應(yīng)用。

docker結(jié)構(gòu)

dockerFile:docker鏡像通過該配置文件進(jìn)行配置

倉庫:用來存儲docker鏡像,已經(jīng)弄好的鏡像文件

鏡像:一個可以運行的程序

容器:一個已經(jīng)跑起來的實例

tar文件:一個鏡像可以保存為tar文件

截圖.png

Docker和VM

VM是一個運行在宿主之上的完整的操作系統(tǒng),VM運行自身操作系統(tǒng)會占用較多的CPU,內(nèi)存和硬盤資源。

Docker只包含應(yīng)用程序以及依賴庫,基于libContainer運行在宿主機上,并處于一個隔離的環(huán)境,使得Docker更加輕量高效,啟動容器只需幾秒之內(nèi)完成,由于Docker輕量資源占用少,使得Docker可以輕易的應(yīng)用到構(gòu)建標(biāo)準(zhǔn)化的應(yīng)用中,但是Docker目前還不夠完善,比如隔離效果不如VM,共享主機操作系統(tǒng)的基礎(chǔ)庫,網(wǎng)絡(luò)配置簡單,主要以橋接的方式為主,查看日志也不方便

橋接:SOI模型中數(shù)據(jù)鏈路層的數(shù)據(jù)交換

Docker網(wǎng)絡(luò)

Docker的網(wǎng)絡(luò)功能相對簡單,沒有過多復(fù)雜的配置,Docker默認(rèn)使用birdge橋接方式與容器通信,啟動Docker后,宿主機上會產(chǎn)生Docker0這樣一個虛擬網(wǎng)絡(luò)接口, docker0不是一個普通的網(wǎng)絡(luò)接口, 它是一個虛擬的以太網(wǎng)橋,可以為綁定到docker0上面的網(wǎng)絡(luò)接口自動轉(zhuǎn)發(fā)數(shù)據(jù)包,這樣可以使容器與宿主機之間相互通信。每次Docker創(chuàng)建一個容器,會產(chǎn)生一對虛擬接口,在宿主機上執(zhí)行ifconfig,會發(fā)現(xiàn)多了一個類似veth***這樣的網(wǎng)絡(luò)接口,它會綁定到docker0上,由于所有容器都綁定到docker0上,容器之間也就可以通信。

在宿主機上執(zhí)行ifconfig,會看到docker0這個網(wǎng)絡(luò)接口, 啟動一個container,再次執(zhí)行ifconfig, 會有一個類似veth**的interface,每個container的缺省路由是宿主機上docker0的ip,在container中執(zhí)行netstat -r**可以看到如下圖所示內(nèi)容:

clipboard.png

dokcer設(shè)置

systemctl enable docker.service //設(shè)置開機啟動

systemctl disable docker.service //關(guān)閉開機啟動 

systemctl start docker   //啟動docker 

systemctl daemon-reload  //重新加載deamon.json配置文件 

systemctl restart docker //重新啟動

dokcer systemctl status docker  //查看docker運行狀態(tài)

啟動docker

service docker start  //docker啟動 

service docker stop   //docker停止 

service docker restart //docker重啟

問題:docker start 啟動不了 Failed to start Docker Application Container Engine

一般是 docker的 daemon.json 文件的問題改完后systemctl daemon-reload 在啟動

docker命令補全

 yum -y install bash-completion 
 source /usr/share/bash-completion /bash_completion

Docker使用

docker版本查看

   docker version

查看當(dāng)前系統(tǒng)信息

    docker info 

查看docker宿主機上的鏡像 鏡像保存在var/lib/docker目錄下

docker image

查找鏡像

 docker search +名稱
A78E125B346.jpeg

NAME: 鏡像倉庫源的名稱

DESCRIPTION: 鏡像的描述

OFFICIAL: 是否 docker 官方發(fā)布

stars: 類似 Github 里面的 star,表示點贊、喜歡的意思。

AUTOMATED: 自動構(gòu)建

從docker hub上下載某個鏡像

docker pull  名字:版本

這樣就會把鏡像下載到本地倉庫

docker導(dǎo)入鏡像

docker load -i + 鏡像的tar包

docker查看鏡像

docker images  //查找某些 

docker images | grep +鏡像名

啟動一個容器

//啟動一個容器
docker run -i -t  名稱 /bin/bash

//退出后立即刪除該容器
docker run -i -t --rm ubuntu /bin/bash

//--name執(zhí)行容器名稱,否則會隨機分配一個名稱
docker run -t -i --name test_container 名稱 /bin/bash

//端口映射
 dokcer run -d -p 本地端口:容器端口 +容器名 
 docker run -d -P + 容器名  隨機端口映射
docker run -i -t +容器 +交互命令
-i: 交互式操作。
-t: 終端
-d :讓容器在后臺運行
-p:指定端口
-P:將容器內(nèi)部使用的網(wǎng)絡(luò)端口隨機映射到我們使用的主機上
docker run -d -P +容器  +

#例子
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-v 為掛載目錄和被掛載目錄
--restart 失敗后重啟 
docker run --name mysql5.7.25 --restart=always -v /data/nfs/privtorrent/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=blockchain -d mysql:5.7.25

查看容器(可以看端口映射情況

  docker ps    //只能看見啟動的容器  
  
  docker ps -a //查看所有容器(啟動和關(guān)閉的容器都能看見)

啟動或者停止某個Container

docker start/stop + 容器id

docker進(jìn)入容器(exit退出)

 (不建議使用)
docker attach + 容器id 

docker -it exec + 容器id +/bin/bash (或 sh 或bash)三選一·

將當(dāng)前容器作為一個新的容器進(jìn)行提交

 docker commit -m ="   " 容器id

停止正在運行的容器

docker stop docker stop $(docker ps -aq) //停止正在運行的所有容器

重新啟動容器(不會改變?nèi)萜鱥d)

docker restart  +容器id

刪除已經(jīng)停止的容器

dokcer rm  + 容器id(前幾位即可) 
//刪除停止運行的所有容器 -q 顯示容器id 

docker rm $(docker ps -aq) 

//強制刪除容器 
docker rm -f + 容器id(前幾位即可)

刪除鏡像

docker rmi  + 鏡像id 

//強制刪除容器 
docker rmi -f + 鏡像id  

//強制刪除鏡像
docker rmi -f $(docker images|grep +指定哪些鏡像)

查看運行容器的日志

docker logs + 容器名 

//實時輸出

docker logs -f+ 容器名

導(dǎo)出鏡像

docker save + 容器id > 名稱.tar

導(dǎo)出容器

docker exoprt + 運行容器id  > 名稱.tar

導(dǎo)入容器快照

cat docker/容器名.tar | docker import -  +容器名:標(biāo)簽

docker import + 目錄或者url

查看容器運行端口

docker port + 容器名/容器Id

改變?nèi)萜髅Q及標(biāo)簽

docker tag  容器名:tag/容器id 容器名:tag

新建網(wǎng)絡(luò)

docker network create -d bridge + 名稱

docker network ls 查看網(wǎng)絡(luò)情況

-d:參數(shù)指定 Docker 網(wǎng)絡(luò)類型,有 bridge、overlay

登錄自己的倉庫

 //登錄
 docker login 
 
 //登出
 docker logout

構(gòu)建自己私有倉庫

https://www.cnblogs.com/edisonchou/p/docker_registry_repository_setup_introduction.html

#下載Registry鏡像并啟動
docker pull registry

(這個就相當(dāng)于啟動一個倉庫,別人訪問需要在daemon文件中配置即可拉取你的鏡像
docker run -d -v /edc/images/registry:/var/lib/registry -p 5000:5000 --restart=always --name xdp-registry registry

#在客戶端查看鏡像倉庫中的所有鏡像
curl http://your-server-ip:5000/v2/_catalog

/etc/docker/daemon.json加上下面這一句,這里的"your-server-ip"請換為你的服務(wù)器的外網(wǎng)IP地址:

{ 
    "insecure-registries" : [ "your-server-ip:5000" ] 
}

為要上傳的鏡像打Tag

docker push your-registry-server-ip:5000/your-image-name:tagname

下載鏡像就很簡單了,使用pull命令即可:

docker pull your-server-ip:5000/your-image-name:tagname

如果想要知道要下載的鏡像都有哪些tag(或版本),可以通過下面這個api來獲?。?/p>

curl http://your-server-ip:5000/v2/your-image-name/tags/list

docker通過DockerFile創(chuàng)建容器

docker build -f + 文件  -t + 打包的鏡像名 .(表示當(dāng)前目錄)

docker 啟動鏡像

docker run -itd-p(端口映射) 主機端口:鏡像內(nèi)部端口 鏡像名

docker 查看容器掛載目錄

docker inspect +容器id  獲取容器/鏡像的元數(shù)據(jù) 

docker inspect +容器ID|grep Mounts -A 20

docker復(fù)制文件

docker cp  容器Id:/etc/mysql/my.cnf(容器目錄) .(當(dāng)前目錄)

docker下的文件夾信息(var/lib/docker)

---containers : 存放容器信息
---images :存放鏡像的中間件信息大小以及依賴信息 
---volumes :docker的掛載信息 
---overlay2     
--         
--diff 存放docker容器內(nèi)的文件信息

下面是存放在容器內(nèi)部的信息

clipboard.png

docker掛載問題

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused “process_linux.go:430: container init caused “write /proc/self/attr/keycreate: permission denied””: unknown.

修改文件/etc/selinux/config 將SELINUX屬性改為disabled 重啟即可

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

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

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