张季安 發表於 2019-11-7 16:54:00

centos 7 + Net Core 3.0 + Docker 配置说明(不含https)

<h3 id="1新建core30项目">1、新建Core3.0项目</h3>
<p>1.1 使用visual studio 2019 创建一个名为core3.web.httpapi 的"ASP.NET Core Web应用程序"<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107112118869-1418887439.png" alt="" loading="lazy"><br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107112317412-1638281082.png" alt="" loading="lazy"><br>
1.2 运行项目,确保可以正常访问<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107112523123-825249005.png" alt="" loading="lazy"><br>
1.3 launchSettings.json里的部分配置(默认值,未修改,这里只是展示下)</p>
<pre><code>{
    "core3.web.httpapi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
}
}

</code></pre>
<h3 id="2配置dockerfile">2、配置Dockerfile</h3>
<p>2.1 项目根目录下创建一个Dockerfile的文件,下图配置里的8001端口是docker运行端口,上面截图的5000是launchSettings.json配置的端口(开发环境运行端口),并不是一个意思,当然也可以配置成一样的</p>
<pre><code>FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
WORKDIR /app
EXPOSE 8001
COPY . .
ENV ASPNETCORE_URLS http://+:8001
ENTRYPOINT ["dotnet", "core3.web.httpapi.dll"]
</code></pre>
<p>2.2 配置说明:<br>
FROM:设置镜像源,暂时没有找到更小的源,后续有的话再补充<br>
WORKDIR:配置工作目录<br>
COPY . .   :复制发布后的bll文件到app目录下<br>
EXPOSE 8001 :这里的意思是开放容器内的8001端口,并不是代码用这个端口<br>
ENV:配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)<br>
ENV ASPNETCORE_URLS :同上,这里是配置程序运行端口 <font color="red">如果程序不使用默认的80端口这里一定要设置(程序运行端口)</font><br>
ENTRYPOINT:启动入口</p>
<p>2.3 Dockerfile上右键点击属性,设置问"如果较新则复制" ,目的是发布的时候把Dockerfile复制到发布后的目录,方便执行docker指令<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107112942970-288895614.png" alt="" loading="lazy"><br>
2.4 完整的项目结构图<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107122435813-1159145880.png" alt="" loading="lazy"></p>
<h3 id="3centos服务器端配置">3、Centos服务器端配置</h3>
<p>此实例是在centos下编译+发布,所以要求centos服务器是上至少要安装docker、netcore 3.0 sdk(非runtime),一般情况会在服务器上装好Git,这样本地开发,直接在服务器上用shell脚本pull代码、编译、构建、运行docker镜像(一步到位执行完毕),下面主要说明centos上编译netcore和运行docker的过程。<br>
3.1、安装Git   参考:https://www.cnblogs.com/nickchou/p/10931495.html<br>
3.2、安装docker 参考: https://www.cnblogs.com/nickchou/p/8658541.html<br>
3.3、安装net core 3.0 sdk ,并查看dotnet版本</p>
<pre><code>sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.0
dotnet --version
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107150917018-1164161854.png" alt="" loading="lazy"></p>
<h3 id="4编译netcore代码">4、编译netcore代码</h3>
<p>假设代码已经在centos上了,不管是通过ftp上传的还是git pull<br>
4.1 cd命令切换到启动项目的文件夹,假设路径是在root下,可根据实际情况修改路径</p>
<pre><code>cd /root/testdocker/core3.web.httpapi
</code></pre>
<p>4.2 编译当前项目代码发布到./publish目录下</p>
<pre><code>dotnet publish -o ./publish -c Release
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107151054571-1763085899.png" alt="" loading="lazy"><br>
发布后的文件目录如下,Dockerfile已经在根目录下了<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107151244031-1725930105.png" alt="" loading="lazy"></p>
<h3 id="5构建docker镜像">5、构建docker镜像</h3>
<p>5.1 cd切换到发布后的目录下</p>
<pre><code>cd /root/testdocker/core3.web.httpapi/publish
</code></pre>
<p>5.2 构建镜像</p>
<pre><code>docker build -t httpapi:1.0 .
</code></pre>
<p>说明:":1.0" 是版本号(也可以不写,这样就没有版本号),注意上面指令后面有一个"." 不能漏,代表当目前目录的意思</p>
<p><font color="red">如果出现错误:<br>
Error parsing reference: "mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base" is not a valid repository/tag: invalid reference format</font><br>
问题原因:Dockerfile里FROM最后一段写了 AS base ,这个是docker的新特性multi-stage build,需要Docker17.0.5 以上的版本才能用,VS自动生成出来的Dockerfile里也有这一段。<br>
<font color="green">解决办法:<br>
1、升级Docker版本,方法有点麻烦,且一般买的服务器(阿里云、华为云)默认Docker版本都是1.13.1左右<br>
2、不用multi-stage build的话,直接去掉AS base即可,我们的案例中并不需要</font><br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107163055936-1214916108.png" alt="" loading="lazy"><br>
5.3 查看docker镜像</p>
<pre><code>docker images
</code></pre>
<p>可以看到生成了2个镜像,一个是我们Dockerfile里写的FROM镜像,一个是我们自己生成的<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107163248178-307057453.png" alt="" loading="lazy"></p>
<h3 id="6运行docker镜像">6、运行docker镜像</h3>
<pre><code>docker run -d -p 8001:8001 --name myhttpapi httpapi:1.0
</code></pre>
<p>6.1 指令说明 :<br>
-d意思是后台运行<br>
-p第一个8001是外网端口,第二个8001是docker端口。如果配置80:8001就是外网的80端口映射到docker的8001端口<br>
-name指定一个别名,这里写的是myhttpapi<br>
httpapi:1.0意思是从httpapi这个镜像的1.0版本运行<br>
注意事项:如果你的服务器是阿里、腾讯、华为云等,配置的端口一定要在安全组配置里打开,比如下面的8001端口,不然访问不了<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107164523447-739840134.png" alt="" loading="lazy"><br>
6.2 网页返回:<br>
<img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107164444111-298841217.png" alt="" loading="lazy"></p>
<p><font color="red">源代码下载:https://files.cnblogs.com/files/nickchou/testdocker.zip</font></p>
<h3 id="7docker-指令扩展">7、Docker 指令扩展</h3>
<p>7.1 刚我们步骤6.1发布的docker想看看容器里面的文件,指令如下(指令中的myhttpapi也可以换成容器ID )</p>
<pre><code>docker exec -it myhttpapi bash
</code></pre>
<p>查看文件列表</p>
<pre><code>ls
</code></pre>
<p><img src="https://img2018.cnblogs.com/blog/308699/201911/308699-20191107170937021-748854752.png" alt="" loading="lazy"><br>
<font color="red">退出容器的快捷键 ctrl+p+q ,别忘了执行哦(意思是退出但不关闭容器)</font><br>
7.2 停止运行的容器</p>
<pre><code>docker stop myhttpapi
</code></pre>
<p>7.3 删除容器ID</p>
<pre><code>docker rm 容器ID
</code></pre>
<p>7.4 删除镜像,如果镜像有被使用的话最好先删除了。</p>
<pre><code>docker rmi容器ID
</code></pre>
<p>7.5 清理悬空容器,一般可以配合7.2~7.4的指令用,清理停止的、无效的容器</p>
<pre><code>docker system prune
</code></pre>
<p>7.6 查看镜像</p>
<pre><code>docker images
</code></pre>
<p>7.7 查看运行的镜像,加-a 意思是停止的容器也列出来,不加-a只列正在运行的</p>
<pre><code>docker ps -a
</code></pre>
<p>基本上常用的就这些了,其他的请自行查资料!!</p><br><br>
来源:https://www.cnblogs.com/nickchou/p/11810938.html
頁: [1]
查看完整版本: centos 7 + Net Core 3.0 + Docker 配置说明(不含https)