# 鏡像當成是一個沒有啟動的操作系統
# redis鏡像,mysql鏡像,nginx鏡像,django鏡像,python鏡像,指的是:linux+xx軟件----》鏡像跑起來就是--》容器:操作系統上運行着redis服務
# 查找鏡像:
# 命令行:
docker search helloworld
docker search centos
#官方搜索:https://hub.docker.com/
# 如下圖
# 獲取鏡像:
docker pull centos # 拉取最新的:相當於docker pull centos:latest
docker pull centos:centos7 # 拉取一個centos7
docker pull centos:centos6.7
docker pull centos:centos10 # 這個 沒有,就報錯
# 查看本地鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 3 months ago 237MB
centos centos7 5e35e350aded 5 months ago 203MB
# 刪除本地鏡像
docker rmi 470671670cac # 通過id號刪除
docker rmi centos:centos7 # 通過名字刪除
# docker rmi `docker images -q`
docker images -q相當於獲取所有的id號
docker rim 470671670cac 5e35e350aded
命令行查找鏡像
官方搜索
詳細信息
docker ps # 查看正在運行的容器#########
docker ps –a # 查看所有容器(暫停的,停止,正在運行的。。。)##########
docker ps –l # 查看最后一次運行的容器
docker ps -f status=exited # 查看停止的容器
# 重點:通過鏡像創建並運行容器(兩步並做一步)
創建容器命令:docker run
-i:表示運行容器
-t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
--name :為創建的容器命名。容器名字不能重
-v:表示目錄映射關系(前者是宿主機目錄,后者是容器的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
-d:在run后面加上-d參數,則會創建一個守護式容器在后台運行(這樣創建容器后不會自動登錄容器,只是操作宿主機,如果只加-i -t兩個參數,創建后就會自動進去容器)。
-p:表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p做多個端口映射
# -v:數據卷,做目錄映射
# -p 網絡,做端口映射
#舉例:在宿主機內部跑django的容器如何鏈接跑mysql的容器
#1.容器也是有ip地址的,django可以直接鏈接
#2.將mysql的端口映射到宿主機中,比如還是映射3306,django通過訪問宿主機來訪問,但是注意修改端口號,否則宿主機和容器只能起一個,同一個端口只能被一個軟件監聽
# 演示
#基於哪個鏡像跑容器:centos:centos7 如果寫成centos表示跑最新的
#如果沒有這個鏡像呢?去遠程拉,拉下來再跑
# 容器要運行,需要有一個前台進程,可以通過守護進程的方式運行容器(解釋:下面這個容器的運行,是有一個bash終端掛在這,表示容器有一個進程在存活,bash關閉,容器也就關閉了,因此容器要運行,需要有一個前台進程)
docker run -it --name=mycentos7 centos:centos7 /bin/bash
# it表示運行並進入容器,-i -t縮寫
#--name:起一個名字
#centos:centos7:表示基於centos的centos7版本,若不加centos7表示基於最新版
# bin/bash:表示bin路徑下的base文件,他是一個軟件,是進入啟動容器的bash終端,可以有多個終端,用來執行命令的,可以通過執行exit逐層退出bash,最后一層bash退出就會退出docker
'''
[root@localhost ~]# docker run -it --name=mycentos7 centos:centos7 /bin/bash
[root@29b72b8c9766 /]# docker -v // 這就進入容器了,這是一個純凈的centos7的容器
bash: docker: command not found
[root@29b72b8c9766 /]# exit // 退出
exit
'''
# 以守護進程形式跑(會有一個/bin/bash前台進程命令在執行,只是並沒有進入到容器內部)
docker run -di --name=mycentos2_2 centos:centos7
# 進入到容器內部操作容器
1 exec(用的最多):在docker中執行命令
docker exec -it mycentos2_2 /bin/bash
exit 退出(此時退出還有一個前台進程在存活)
docker exec mycentos2_2 ls (表示進入並執行ls命令)
2 attach (當沒有)
3 ssh連接(容器要啟動ssh服務22端口沒有服務在監聽)
# 容器的啟動與停止
docker stop 容器id/名字
docker start 容器id/名字
docker restart 容器id/名字
# 文件拷貝
# 從宿主機copy到容器內部
docker cp 要拷貝的文件或者目錄 容器名稱:容器目錄
docker cp untitled3.tar mycentos2_2:/home
# 從容器內部copy出來 (./表示當前目錄下)
docker cp mycentos2_2:/home/untitled3.tar ./
# 數據卷(目錄映射)
# 1.比如容器的軟件是mysql,有一個root/data目錄,里面放着數據信息,同步映射到宿主機的一個home/data目錄,這樣不論在容器中還是宿主機中增刪改查data的信息都會影響到另一個,但是如過整個容器突然沒了,宿主機還在,可以重新建一個容器重新掛上root/data,就可以恢復宿主機的信息到容器中,類似於文件共享。這就是數據卷
# 2.比如容器中跑的django,也可以做映射到外部宿主機上,這樣在宿主機中裝git,拉去最新的代碼,只要重啟一下容器,django就能跑最新的代碼了,可以實現快速更新
docker run