关于windows使用docker的总结

近日,公司余总让我思考Linux部署.net core应用程序的方案,同时余总提出了使用docker方式部署的方式,很多年前曾接触过Docker,但是没有深入研究,而近日的需求让我不得不再次重拾Docker知识,于是就通过网上查阅相关资料进行学习。

我们公司的情况和很多互联网公司不一样,我们做的是政府项目,出于安全考虑客户那边是不允许连接互联网的,因此我们的部署必须要考虑局域网的部署。于是大概的思路就是:

  1. 下载离线版的CentOS系统,下载离线版Docker,在客户服务器安装CentOS系统和Docker。
  2. 在公司制作发布的镜像(Image),然后导出为tar文件(使用save命令)
  3. 到客户环境将导出的tar文件镜像通过load命令导入镜像

一、发布到本机Docker

上面是整体的思路,我这边使用的是windows方案,首先需要下载Docker Desktop for windows,下载地址:https://docs.docker.com/docker-for-windows/install/。然后双击安装包进行安装,如果安装不成功,会有提示信息的,该程序就是利用windows的hyper-v虚拟机在实现docker。安装成功后在dos窗体中输入docker --version验证是否安装成功。

 此时我们需要使用到部分docker命令如下:

docker images #查看所有的镜像
docker ps -a #查控所有的容器
docker rm -f 容器名/容器id #删除容器
docker rmi 镜像名/镜像id #删除镜像
docker pull nginx:last #拉取镜像
docker search nginx #查询镜像
docker history XXXXXXX #查看docker的历史楼层
docker exec -it 5d8ac43f358a /bin/bash #进入容器
docker run --name duanjt-netcore-mvc2 -d -p 7077:80 core-mvc #运行容器

此时我参考了文章:https://www.cnblogs.com/chengtian/p/11832955.html ,通过VS2019创建.net core项目,然后发布该项目为文件(千万不要有中文路径),最后在发布目录下创建DockerFile文件,DockerFile的内容如下:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY . /app
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

DockerFile的意思是:继承 mcr.microsoft.com/dotnet/aspnet:3.1容器,向外暴露80和443端口,工作目录是/app,也就是说进入容器的默认目录是/app,COPY表示将当前目录拷贝到容器的/app目录下,

ENTRYPOINT和RUN命令含义差不多,但是RUN可以被覆盖,而ENTRYPOINT不允许被覆盖,ENTRYPOINT表示容器启动后执行的命令。

然后在DockerFile目录下执行编译镜像的命令:docker build -t core-mvc .

 core-mvc表示镜像的名称,最后的点(.)表示DockerFile文件所在目录为当前目录。

此时我们查看镜像如下:

 此时我们就可以运行容器了,命令如下:docker run --name duanjt-mvc -d -p 7077:80 core-mvc

 我们可以看到,容器名称为duanjt-mvc的容器已经启动成功了,此时我们在浏览器输入:http://127.0.0.1:7077/WeatherForecast

 ok,至此,我们的.net core程序就已经完美发布到docker中了

二、导出镜像

上一步我们已经做好了镜像,然后需要导出来,导出参考了文章:https://www.cnblogs.com/zhuochong/p/10064350.html,执行如下命令:docker save -o duanjt-mvc.tar core-mvc:latest,执行命令后,在当前dos所在目录下会产生duanjt-mvc.tar这样的文件就是我们导出的镜像。

 

 三、导入镜像

上一步骤我们已经导出了镜像,就可以将镜像拷贝到客户单位服务器上面去,然后导入镜像,执行命令如下:docker load -i duanjt-mvc.tar 

 我们可以看到,镜像已经导入进来了,后面的操作就没有任何区别了。

原文地址:https://www.cnblogs.com/duanjt/p/14674594.html