关于windows使用docker的总结
近日,公司余总让我思考Linux部署.net core应用程序的方案,同时余总提出了使用docker方式部署的方式,很多年前曾接触过Docker,但是没有深入研究,而近日的需求让我不得不再次重拾Docker知识,于是就通过网上查阅相关资料进行学习。
我们公司的情况和很多互联网公司不一样,我们做的是政府项目,出于安全考虑客户那边是不允许连接互联网的,因此我们的部署必须要考虑局域网的部署。于是大概的思路就是:
- 下载离线版的CentOS系统,下载离线版Docker,在客户服务器安装CentOS系统和Docker。
- 在公司制作发布的镜像(Image),然后导出为tar文件(使用save命令)
- 到客户环境将导出的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 #运行容器
docker logs XXXXXX #查看容器的日志,控制台输出的内容
此时我参考了文章: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
我们可以看到,镜像已经导入进来了,后面的操作就没有任何区别了。