docker必會基礎

什麼是docker
docker是完整的一套容器管理系統
提供了一組命令,讓用戶更加方便的使用容器技術,而不用過多關心底層內核技術
docker的優點
相比傳統的虛擬化技術,容器更加簡潔 它是一個開源項目,可以在軟件容器內自動化部署應用
docker缺點
容器的隔離性沒有虛擬化強
共用linux內核,安全有缺陷
docker安裝前準備
需要64位操作系統,必須7以上的版本,而且要卸載防火牆。
配置yum源,docker的軟件包位於光盤RHEL7-extras.iso CentOS-7.5-1804.iso
mount -t iso9660 -o ro,loop CentOS-7.5-1804.iso /var/ftp/centos-1804
mount -t iso9660 -o ro,loop RHEL7-extras.iso /var/ftp/extras
yum remove firewalld-* //卸載防火牆
yum -y install docker
systemctl start docker //啓動docker
systemctl enable docker
在docker中容器是基於鏡像啓動的
鏡像是啓動容器的核心
https://hub.docker.com

相關命令:
docker images //查看已有的鏡像
docker search busybox //要求虛擬機可以上網,下載鏡像。 帶ok字樣的是官方的
docker pull docker.io/busybox //下載鏡像
docker push docker.io/busybox //上傳鏡像
docker images //再次查看
文件名REPOSITORY 標籤TAG 編號ID IMAGE ID CREATED SIZE
docker.io/busybox latest 83aa35aa1c79 7 days ago 1.22 MB

	docker help pull	

鏡像的備份與恢復:
鏡像如果不寫 標籤默認就是latest
鏡像名稱(文件名) + 標籤 == 唯一!
docker save docker.io/busybox:latest -o busybox.tar -o 輸出爲文件 文件名任意 //鏡像打包
scp busybox.tar [email protected]:/root
docker load -i busybox.tar -i爲input爲導入 可以docker load --help查看 //鏡像導入

容器的鏡像採用分層設計最大255層,下面的層都是隻讀的
docker history docker.io/busybox:latest //查看鏡像歷史 瞭解鏡像製作過程
docker inspect docker.io/busybix:latest //查看鏡像底層信息
docker tag //創建鏈接,複製
docker rmi //刪除本地鏡像
鏡像裏面可以是服務和系統,服務和系統是一種應用

容器命令:
docker run -參數 鏡像名稱:標籤 啓動命令
交互參數 -i
終端參數 -t
後臺參數 -d
六個命名空間
隔離主機名
隔離文件系統 在容器裏創建文件,源主機看不見
隔離用戶
隔離網絡 ip地址不同但是可以ping通
隔離進程 進程的pid是跟真機不同
信號相量

docker run -it 鏡像名稱:標籤 /bin/bash 啓動命令 當不加啓動命令是有默認的啓動命令!
每一次 run 都會啓動一個新的容器
可以用docker inspect docker.io/centos:latest 查看cmd 默認啓動命令
容器類型:系統和服務

docker ps 查看正在運行的容器 加 -a 是查看所有容器
docker ps -aq 查詢所有運行容器的id
docker stop //關閉容器
docker run -itd docker.io/nginx:latest //加-d選項在後臺運行
docker inspect 容器id //查詢
docker start 容器id //開啓容器
docker stop 容器id
docker inspect -a //查看容器獲得容器id
docker restart //重啓容器
docker top 容器id //查看容器中的進程
docker rm 容器id //刪除容器,刪除啓動中的容器時要加-f選項
docker rm $(docker ps -q) //刪除括號命令中的執行結果
docker exec -it 容器id /bin/bash //進入容器。

echo $$ //顯示當前的pid號
docker attch 容器id //以上帝身份進入容器(一般排錯用,儘量不用)
如果pid是1 exit容器回被關閉!

自定義鏡像:
在原有的基礎上修復和增加,自定義後原有的東西不變
docker run -it docker.io/centos 啓動一個鏡像
yum -y install net-tools iproute psmisc vim-enhanced bash-completion //安裝一些軟件包
docker commit 容器id 鏡像名稱:標籤 //自定義鏡像
dockerfile
FROM:基礎鏡像
ADD:複製文件到鏡像 宿主機的文件放到容器裏去
RUN:在容器內執行命令
演示 :
真機執行: mkdir docker //任意創建個目錄
touch Dockerfile //必須爲這個名字,大小寫不能變
vim Dockerfile
FROM docker.io/centos:latest //基於centos:latest 鏡像做
RUN rm -rf /etc/yum.repos.d/*.repo //RUN表示在容器內執行命令
ADD local.repo /etc/yum.repo.d/local.repo //將真機的local.repo文件拷貝到容器裏
//local.repo 必須在跟Dockerfile文件的相同目錄中
RUN yum -y install net-tools bash-completion iproute vim psmisc
:wq
真機執行: docker build -t 新的鏡像名稱:標籤 當前Dockerfile文件所在的目錄
例: cd docker
docker build -t docker.io/test:latest . //最後面有個.點

配置服務的Dockerfile
CMD :容器啓動時執行的命令
ENV:設置變量
EXPOSE:開放的端口
WORLDIR :定義容器默認工作目錄,作用相當於cd
CMD的語法格式
/bin/ls -l -a
CMD [ “/bin/ls”, “-l”,"-a"]

製作關於服務的鏡像:
rpm -ql httpd | grep service
查看啓動httpd的文件,查看用的變量和啓動命令。
FROM docker.io/myos:latest
RUN yum -y install httpd
ENV LANG=C
EXPOSE 80
CMD ["/usr/sbin/httpd", “-DFOREGROUND”]
真機: docker build -t 新鏡像名稱:標籤 .
docker run -itd 鏡像id
docker run -itd myos:httpd 啓動容器
docker exec -it f3 /bin/bash //進入容器
一個鏡像可以啓動多個不相干的容器,可以先起一個容器測試,再用dockerfile編寫
再用dockfile跑的時候就是創建一個新的鏡像

1.自定義私有倉庫
yum -y install docker-distribution.x86_64 //安裝軟件包
ss -ntulp | grep 5000 //端口號5000
systemctl start docker-distribution.service //啓動服務
systemctl enable docker-distribution.service
ss -ntulp | grep 5000

訪問: curl http://192.168.1.100:5000/v2/_catalog //訪問私有倉庫
{“repositories”:[]}
2.告訴所有機器docker的私有地址(修改配置文件)
客戶端配置
停止所有容器!!!!:
修改配置文件 /etc/sysconfig/docker
INSECURE_REGISTRY=’–insecure-registry 192.168.1.100:5000’ //允許非加密方式訪問倉庫
ADD_REGISTRY=’–add-registry 192.168.1.100:5000’ //docker倉庫地址

重啓docker服務
	systemctl restart docker
curl http://192.168.1.100:5000/v2/_catalog	//訪問測試

3.上傳鏡像到私有倉庫(必須打標籤)
打標籤: docker tag 鏡像 192.168.1.100:5000/myos:latest
上傳鏡像:docker push 192.168.1.100:5000/myos:latest
docker tag myos:httptest 192.168.1.100:5000/myos:httptest //打標籤
docker push 192.168.1.100:5000/myos:httptest //上傳鏡像
curl http://192.168.1.100:5000/v2/_catalog
curl http://192.168.1.100:5000/v2/myos/tags/list //查看標籤
4. 使用鏡像啓動容器
docker02利用倉庫中的鏡像啓動容器
docker run -it 192.168.1.100:5000/myos:latest //下載鏡像生成容器
/var/lib/registry/ //存放鏡像的目錄,要刪除鏡像進入目錄裏

主機卷
docker run -it -v 宿主機目錄或文件:容器內目錄或文件 myos:latest

搭建nfs讓多個容器共享文件
1.100]# yum -y install nfs-utils
vim /etc/exports
/mnt *(rw)
:wq
echo 111111111 > /mnt/test.html
systemctl start nfs
showmount -e localhost

1.21]# yum -y install nfs-utils
mount -t nfs 192.168.1.100:/mnt /opt
docker run -d -v /opt:/usr/share/nginx/html docker.io/nginx:latest
docker inspect 容器id //查看容器信息可以獲得ip地址
curl 172.17.1.2:/test.html

1.22]# yum -y install nfs-utils
mount -t nfs 192.168.1.100:/mnt /opt
docker run -d -p80:80 -v /opt:/var/www/html docker.io/nginx:latest //直接將80映射到宿主機
創建自定義網橋:
docker0 docker相當於虛擬交換機,與本機的eth0網卡都是相通的
docker network create --subnet 10.10.10.0/24 docker1 //創建docker1網絡
docker run -it myos:latest 不指定網絡默認鏈接docker0
ip a s 查看ip地址
進去之後按ctrl+p+q 不關閉退出
docker run it --network=docker1 myos:latest 容器使用docker1網絡
最後實現的效果,鏈接在docker0上的容器可以互相通信
鏈接在docker1上的容器可以互相通信
docker0 和docker01 裏的容器不可以互相通信!
客戶端訪問容器內的資源
-p選項 宿主機端口:容器端口
docker run -itd -p80:80 docker.io/myos:httpd
真機訪問測試: ie瀏覽器192.168.1.21

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章