Docker是啥
????????Docker是一個開源的容器化平臺,可以幫助開發者將應用程序和其依賴的環境打包成一個可移植、可部署的容器。
????????Docker的主要目標是通過容器化技術,實現應用程序的快速部署、可移植性和可擴展性,從而簡化應用程序的開發、測試和部署過程。
Docker與傳統虛擬機的區別
????????虛擬機是一個主機模擬出多個主機(多個虛擬機),需要先擁有獨立的系統。傳統虛擬機,利用hypervisor,模擬出獨立的硬件和系統,在此之上創建應用。(與主機而言,是同等地位)
????????docker 是在主機系統中建立多個應用及配套環境,把應用及配套環境獨立打包成一個單位,是進程級的隔離。(于主機而言是個運行的進程)
Docker相對虛擬機的優勢:
- 輕量級: 容器與宿主機共享操作系統內核,因此容器本身非常輕量級,啟動和停止速度快,資源占用少。
- 可移植性: 容器可以在任何支持相應容器運行時的系統上運行,無需關注底層操作系統的差異,提供了高度的可移植性。
- 快速部署: 容器化應用程序可以通過簡單的操作進行打包、分發和部署,減少了部署過程的復雜性和時間成本。
- 彈性擴展: 可以根據應用程序的需求快速創建、啟動和停止容器實例,實現應用程序的彈性擴展和負載均衡。
- 環境隔離: 每個容器都具有獨立的運行環境,容器之間相互隔離,不會相互干擾,提供了更好的安全性和穩定性。
Docker與Maven 類比
Docker Registry:可分為 公有Docker Registry 和 私有Docker Registry。 最常?的Docker Registry莫過于官方的 Docker Hub, 這也是默認的Docker Registry.?
Docker架構
Docker Registry:可分為 公有Docker Registry 和 私有Docker Registry。 最常?的Docker Registry莫過于官方的 Docker Hub, 這也是默認的Docker Registry.?
Images( Docker鏡像):Docker鏡像是一個只讀模板,它包含創建 Docker容器的說明。
Container(容器):容器是鏡像的可運行實例。鏡像和容器的關系有點類似于面向對象中,類和對象的關系。
Client(客戶端):Docker客戶端是 Docker的用戶界面,它可以接受用戶命令和配置標識。
Docker命令
Docker安裝
????????Docker 是一個開源的商業產品,有兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)
- 安裝:
????????yum install -y docker-ce-3:24.0.2-1.el7.x86_64 # 這是指定版本安裝
- 啟動并加入開機啟動:
????????systemctl start docker && systemctl enable docker
- 驗證是否安裝成功/docker版本查看
????????docker version
鏡像相關命令
- 搜索鏡像
????????docker search java :?在Docker Hub中搜索含有 java這個關鍵詞的鏡像倉庫
- 下載鏡像
????????docker pull java:8 //?下載最新版本的 Java鏡像,如果要下載指定版本則在java后面加冒號指定版本
- 列出下載鏡像
????????docker images
- 刪除鏡像
????????docker rmi java? ?//?強制刪除加 -f
容器相關命令
1、新建并啟動容器
docker run -d -p 91:80 nginx
docker run命令即可新建并啟動一個容器,該命令是最常用的命令,它有很多選項,下面將列舉一些常用的選項。
docker run命令創建容器時,會先檢查本地是否存在指定鏡像。如果本地不存在該名稱的鏡像, Docker就會自動從 Docker Hub下載鏡像并啟動一個 Docker容器。
-d選項:表示后臺運行
-P選項:隨機端口映射
-p選項:指定端口映射,有以下四種格式。
-- ip:hostPort:containerPort
-- ip::containerPort
-- hostPort:containerPort
-- containerPort
--net選項:指定網絡模式,該選項有以下可選參數:
--net=bridge:默認選項,表示連接到默認的網橋。
--net=host:容器使用宿主機的網絡。--net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網絡配置。
--net=none:不配置該容器的網絡,用戶可自定義網絡配置。
2、列出運行中的容器
docker ps
3、停止容器
docker stop f0b1c8ab3633 -- 容器id
4、強制停止容器
docker kill f0b1c8ab3633
5、啟動已經停止的容器
docker start f0b1c8ab3633??
6、查看容器所有信息
docker inspect f0b1c8ab3633
7、查看容器日志
docker container logs f0b1c8ab3633
8、查看容器里的進程
docker top f0b1c8ab3633
9、容器與宿主機相互復制文件
docker cp 容器id:要拷貝的文件在容器里面的路徑 宿主機的相應路徑
如:docker cp 7aa5dc458f9d:/etc/nginx/nginx.conf /mydata/nginx
docker cp 要拷貝的宿主機文件路徑 容器id:要拷貝到容器里面對應的路徑
10、進入正在運行的容器
docker exec -it f0b1c8ab3633 /bin/bash (有的容器需要把 /bin/bash 換成 sh)
//?如果docker run命令運行容器的時候,沒有使用-it參數,就要用這個命令進入容器。一旦進入了容器,就可以在容器的 Shell 執行命令了
11、刪除容器
docker rm f0b1c8ab3633 //?該命令只能刪除已停止的容器,如需刪除正在運行的容器,可使用-f參數
Dockerfile構建Docker鏡像
Dockerfile是一個文本文件,其中包含了若干條指令,指令描述了構建鏡像的細節。
在Dockerfile所在路徑執行以下命令構建鏡像:docker build -t nginx:tuling .
其中,-t指定鏡像名字,命令最后的點(.)表示Dockerfile文件所在路徑
使用Dockerfile構建微服務鏡像
以項目tulingmall-member為例,將該微服務的可運行jar包構建成docker鏡像
1、將jar包上傳linux服務器/root/tulingmall/tulingmall-member目錄,在jar包所在目錄創建名為Dockerfile的文件。
2、在Dockerfile中添加以下內容
# 基于哪個鏡像
From java:8
# 復制文件到容器
ADD tulingmall-member-0.0.5.jar? /tulingmall-member-0.0.5.jar
# 聲明需要暴露的端口
EXPOSE 8877
# 配置容器啟動后執行的命令
ENTRYPOINT java ${JAVA_OPTS} -jar /tulingmall-member-0.0.5.jar
3、使用docker build命令構建鏡像
docker build -t tulingmall-member:0.0.5 .
4、啟動鏡像,加-d可在后臺啟動
docker run -d -p 8877:8877 tulingmall-member:0.0.5
加上JVM參數啟動:
# --cap-add=SYS_PTRACE? 這個參數是讓docker能支持在容器里能執行jdk自帶類似jinfo,jmap這些命令,如果不需要在容器里執行這些命令可以不加
docker run -d -p 8877:8877 \
-e SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848 \
-e JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m' \
--cap-add=SYS_PTRACE \
tulingmall-member:0.0.5
5、訪問會員服務接口
服務部署完成,即可以訪問了。
將微服務鏡像發布到阿里云遠程鏡像倉庫
將微服務鏡像發布到私有鏡像倉庫
1.?搭建私有docker鏡像倉庫
2.上傳鏡像到私有倉庫