鏡像 (Image)
- 本質上由分層的文件系統組成,可以基於基礎鏡像通過文件系統分層進行繼承
- 鏡像是靜態的概念,其每一層文件系統都是只讀的
容器 (Container)
- 容器由鏡像創建,容器被創建時本質上是在鏡像分層文件系統的頂部,添加一個可讀寫的新層即容器層,容器層之下的為鏡像層
- 一個鏡像可以創建多個容器,新創建的容器層相互獨立,共享鏡像層資源
- 容器與鏡像類似於對象和類的關系,鏡像是用於創建容器的模板,容器是由鏡像創建的實體
1.dockerfile指令
FROM FROM <image> #系統版本 FROM <image>:<tag> #系統版本+版本號
一般格式:FROM CentOS:7.2
在.netcore中一般是:FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
MAINTAINER #編輯作者的信息
RUN #基礎鏡像命令
RUN linux命令
一般使用&&連起來寫防止鏡像膨脹過大
ADD/COPY #從本地向制作的鏡像中賦值文件,ADD可以復制url,可以賦值tar並解壓。一般使用copy就行
ENTRYPOINT #容器啟動后執行的命令
EXPOSE #聲明的僅僅是端口,在使用docker run -p時,會自動隨機映射EXPOSE的端口
WORKDIR /app #工作目錄,必須是已經創建好的。docker build構建鏡像的過程中每一個run都會新建一層,只用通過此指令指定的目錄才會在每一層都存在
2.netcore單系統部署
2.1事例Dockerfile文件
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
EXPOSE 5000
COPY . .
ENTRYPOINT ["dotnet", "testDocker.dll", "--urls", "http://*:5000;http://*:5001"]
2.2創建鏡像
執行格式:docker build -t <要生成的鏡像的名稱> .
k8swebapi為鏡像的名稱
結尾的 . 指dockerfile路徑(.是代表上下文路徑,因為dockerfile就在當前目錄下)
docker build -t imgtestdocker .
2.3創建容器並啟動容器
使用docker run
-d代表是后台運行容器
--rm指定容器停止后自動刪除容器, 用docker stop contriner 停止后自動刪除該容器
--P(大寫) 宿主主機自動分配端口並關聯容器暴露的5000端口,外部使用宿主主機自動分配的端口訪問web api服務
--name 容器名稱
docker run -d --rm -P --name contTestDock imgtestdock

2.4.通過docker ps查看創建的容器,和宿主自動分配的端口49153。 容器內訪問api服務端口5000, 容器外訪問api服務端口49453
docker ps
PS:進入contTestDock容器,查看app目錄,再請求api服務,如下所示:
docker exec -it dockerid bash
date #查看時間
docker exec -it 6a13d5065941 /bin/bash

訪問結果
部署文件升級
1.將本地文件復制到容器中
docker cp 本地路徑 容器Id或name:容器目錄
2.將容器中的文件復制到本地文件
docker cp 容器Id或name:鏡像路徑 本地路徑
docker cp /root/dsyzpapiupdate/ykdocker/ contTestDock:/
docker restart contTestDock
3.系統的伸縮部署和擴容
4.軟件的docker部署方式,如mysql,gitlab。
5.時區問題
docker run -v /etc/localtime:/etc/localtime