如何理解docker?
? 通過鏡像模版來快速部署和生成相同型別的VM,docker的image也是一個道理,通過不同型別的模版,比如redis鏡像、nginx鏡像來快速創建出容器,好比復制克隆,只要資源夠,想生成多少就多少,生成出新的容器你可以使用,然后到時候你又可以打包成鏡像,有了鏡像這個功能,為生產提供了很好的打包、迭代、傳遞方式,容器是由鏡像實體化而來,這和我們學習的面向物件的概念十分相似,我們可以把鏡像看作類,把容器看作類實體化后的物件,
流程:創建容器—》進入容器—》更新系統容器的軟體源—》下載資源(python,django等)—》commit創建上傳鏡像—》打包壓縮新的鏡像資源—》上傳到線上服務器—》實作共享
先修知識:
service firewalld stop # 立馬關閉防火墻
systemctl disable firewalld #設定firewalld開機不啟動
setenforce 0 #臨時關閉selinux
iptables -L #重新去添加docker自定義鏈在iptables里
iptables -L -t nat -n
systemctl start mysql #啟動mysql服務
service mysql status #查看MySQL的詳細資訊
systemctl enable mysql #設定mysql開機啟動
service mariadb stop #關閉mariadb服務
ss -anplut|grep mysql #查看詳細資訊
systemctl start nginx #啟動nginx
yum install lrzsz -y #網頁上傳圖片時要用到
find / -type s -name "mysql.sock" # 檔案sock只能實作同一臺機器上的不同的行程之間通信
mysql -uroot -p -h 192.168.0.8 #連別人機器上的MySQL
#網路socket ip:port可以實作不同機器上的不同的行程之間通信
-p 做埠映射的時候,其實背后就是在iptables里添加DNAT和SNAT策略
docker中鏡像(image)的相關操作:
service docker start #開啟docker服務[stop|retart]
docker images [docker image is] #查看所有鏡像
docker search 鏡像名 #查找鏡像版本
docker pull 鏡像名[可指定版本] #拉取鏡像
docker rmi [docker image rm] 鏡像名 #洗掉鏡像
docker tag 舊名字 新名字 #鏡像重命名
#docker tag djange_11:latest[版本號] django:latest
#此時會增加一個django的鏡像,把原本洗掉就可以了
docker images history 鏡像名 #查看某鏡像的歷史操作
docker image inspect 鏡像名 #查看鏡像的詳細資訊
docker save -o 壓縮包名 鏡像名 #打包壓縮某鏡像
#docker save -o ubuntu.tar ubuntu
#將ubuntu打包壓縮成ubuntu.tar
docker load -i 壓縮包名 #匯入鏡像
docker export -o sc-ubuntu2.tar ubuntu-liu-4(新)
#匯出鏡像
靜態:存放的鏡像: docker save ---》docker load
動態:運行在容器里的鏡像:docker export --》docker import
#docker load -i ubuntu.tar
#匯入ubuntu.tar這個鏡像
docker的容器操作:
service docker start #開始運行容器
service docker stop #停止運行容器 (關閉docker,里面的容器都會停止運行)
docker container ls #查看正在運行的容器【docker ps -a】
docker rm [-f 強制洗掉] #洗掉容器
docker ps -a -q #獲取所有容器的id
#docker rm -f $a [$(docker ps -a-q)]
docker logs myuuu #查看日志,為什么沒有啟動
docker container inspect 容器名 #查看容器詳情
docker container stats 容器名 #查看狀態資訊內容(CPU,記憶體等)
docker run -dit --name 容器名 鏡像資源 /bin/bash #創建并運行容器
#docker run -it --name myu ubuntu /bin/bash #創建ubuntu鏡像的容器(myu)
#[-d 守護行程模式(后臺運行)]、[-it 互動模式]
#[-name 指定容器名,不加系統隨機分配][/bin/bash 指定解釋器(可運行ls等)]
docker exec -it 容器名 /bin/bash #互動式進入上面那個守護行程的容器
exit 或ctrl+d #退出容器 [若是守護行程模式,退出容器仍運行]
docker commit -m '改動資訊' -a "作者資訊" 容器名 新的鏡像名 #將容器打包成新的鏡像資源
#-m -a是選項,可省略
#容器的幾種狀態:up\create\stop
進階:
docker create --name sc-1 -v /web:/usr/share/nginx/html:ro -p 8081:90 daocloud.io/nginx #創建一個靜態容器
docker run --name sc-nginx-1 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloudi.o/nginx #創建并啟動一個容器
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-e 宿主機往容器里傳遞環境變數 environment
MYSQL_ROOT_PASSWORD 是變數名
my-secret-pw 變數的值
mysql -h 192.168.0.17 -uroot -psc123456
訪問容器(可以是其他的機器)
-h 指定連接服務器的ip地址
專案部署:
流程圖

容器的創建與運行

容器的下載與運行
#我要把我的專案部署在哪個系統上? Ubuntu
#拉取Ubuntu的鏡像資源拉取下來
docker image pull ubunt
#運行一個Ubuntu的容器 使用的是Ubuntu鏡像資源
docker run -it --name myu ubuntu /bin/bash
#更新系統容器的軟體源
apt update
#安裝我們想要的資源【在系統容器中配置專案依賴環境】
apt install python3-pip #python3的安裝工具
#安裝django [基于python上]
pip3 install django==1.11.11
#查看我們安裝的所有模塊
pip3 list
#將專案檔案上傳到系統容器中
#將我們部署好的容器壓縮成鏡像資源
docker commit mydjango mydjango #[容器名] [鏡像資源名(可以起新的名字)]
#進行線上部署,將我們做好的鏡像資源打包壓縮
docker save -o mydjango.tar mydjango
#將壓縮好的檔案上傳到遠程服務器上
#將資源傳遞到192.168.0.17這臺服務器上
scp sc-ubuntu.tar root@192.168.0.17:/root
#運行服務進行解壓匯入
docker load -i mydjango.tar
#啟動
docker run -dit --name django --network=host /bin/bash
#[--network 指定網路]
#進入容器后臺
docker exec -it django /bin/bash
#容器和線上服務器共享網卡資訊
#服務在容器中運行的,那我們就可以通過網站訪問容器的內容
補充:容器上不了網—》要開啟路由功能:
echo 1 >/proc/sys/net/ipv4/ip_forward #臨時開啟
vim /etc/sysctl.conf ---》輸入:net.ipv4.ip_forward = 1 #永久開啟
service docker restart 重啟docker ,會到iptables里去添加相關規則
資料卷:將宿主機的某個目錄,映射到容器中,作為資料儲存,我們就可以對宿主機的資料進行儲存
docker run --help [-v 共享一個資料卷]
docker volume ls #查看所有卷
docker volume inspect 容器名字 #查看某卷的詳細資訊【路徑】
/var/lib/docker/volumes #存放所有資料卷的檔案
例:這個例子中zjh就是一個資料卷
#先創建一個目錄
mkdir zjh #把這個作為映射目錄
docker run -it -v ~/zjh:/home ubuntu /bin/bash #將~下的zjh映射到/home
#此時創建完畢,在另一個終端對zjh進行操作,容器這邊也會相應改變,反之~
docker run -it --name myuu -v ~/zjh:/home ubuntu /bin/bash #映射到另外一個容器
例:基于資料卷容器
#先創建一個模板容器,并在容器中的根目錄下創建檔案
docker create --name zhu -v /data ubuntu #這個模板容器說在Ubuntu條件下創建的
#使用這個容器
docker run -it --volumes-from zhu --name myaaa.1 ubuntu /bin/bash
docker run -it --volumes-from zhu --name myaaa.2 ubuntu /bin/bash
docker run -d --name fan-nginx-1 --mount source=sc,target=/usr/share/nginx/html -p 7790:80 nginx:latest
docker run -itd --name [容器名字] -v [宿主機目錄]:[容器目錄] [鏡像名稱] [命令(可選)]
docker create -v [容器資料卷目錄] --name [容器名字] [鏡像名稱] [命令(可選)]
練習:
? 1.創建一個卷: sanchuang,在sanchuang卷里創建一個index.html首頁檔案,內容welcome to sanchuang
? 2.創建2個容器名字自己定義:rose-1 rose-2,啟動nginx,使用sanchuang這個卷
#創建卷,并且往卷里新建檔案index.html
docker volume ls #查看資料卷和資料卷容器
docker volume rm 資料卷 #洗掉資料卷
docker volume create sanchuang #創建sanchuang卷
docker volume inspect sanchuang #查看卷的詳細資訊
#"Labels": {},
#"Mountpoint": "/var/lib/docker/volumes/sanchuang/_data",
#"Name": "sanchuang",
cd /var/lib/docker/volumes/sanchuang/_data/ #進入資料卷
vim index.html --》welcome to sanchuang #創建一個index.html首頁檔案
docker run -d --name rose-nginx-1 -p 6688:80 --mount source=sanchuang,target=/usr/share/nginx/html nginx #啟動第一個容器使用卷
docker run -d --name rose-nginx-2 -p 6689:80 --mount source=sanchuang,target=/usr/share/nginx/html nginx #啟用第二個容器使用卷
docker ps #查看行程
docker倉庫
Docker的倉庫有三大類:
? 公有倉庫:Docker hub、Docker cloud、等
? 私有倉庫:registry、harbor等
? 本地倉庫:在當前主機存盤鏡像的地方
和倉庫相關的命令:
? docker login [倉庫名稱]
? docker pull [鏡像名稱]
? docker push [鏡像名稱]
? docker search [鏡像名稱]
部署基于192…這個局域網的私有倉庫:
#將網路改為橋接模式
#下載私有倉庫registry這個鏡像資源
docker pull registry
#切換到root目錄下(su root)
#進入/ect/docker/打開daemon.json這個檔案
vim deamon.json--->insecure-registries:["私有網址:192.168.132.153:20"]
#重啟docker服務
service docker restart
docker run -d myuuu #運行私有倉庫myuuu
docker tag ubuntu 192.168.132.153:20/ubuntu
docker push 192.168.132.153:20/ubuntu #上傳資源
docker pull 192.168.132.153:20/ubuntu #拉取資源
埠映射:要有映射埠才能上網,網址才能打開
橋接模式:同一個局域網可以相互通信
docker run -dit -P --name myn111 nginx [-P 隨機分配IP地址和埠]
docker run -dit -p 8000:80 --name mybbb nginx [-p 指定8000埠映射到80]
#此時網址要指定埠:8000
docker run -dit -p 192.168.153.132:8000:80 nginx #按照指定IP進行映射
docker run -dit -p --name myn222 192.168.153.132:80:80 nginx #此時不用特意指定埠號了
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/293923.html
標籤:其他
上一篇:Nginx——負載均衡
下一篇:2021-08-14
