dotnet WebApiLinuxDemo.dll --urls=http://*:5006
注意:dockerfile文件一定要放到根目录下
安装环境:
虚拟机cent os 7;
docker;
net 5.0 api项目
部署步骤:
- net core API项目搭建
创建项目时勾选docker支持选项或后续添加;
此时生成的dockerfile文件内容(注:直接将代码放到docker里部署下面的自动生成的dockerfile文件内容是没问题的;若发布后部署下面内容需要改动,否则有问题)
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["TestAPI/TestAPI.csproj", "TestAPI/"]
RUN dotnet restore "TestAPI/TestAPI.csproj"
COPY . .
WORKDIR "/src/TestAPI"
RUN dotnet build "TestAPI.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "TestAPI.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestAPI.dll"]
发布后部署时dockerfile改为
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
COPY . .
EXPOSE 80
ENTRYPOINT ["dotnet", "TestAPI.dll"]
- Linux系统安装docker环境
安装之前现卸载系统上原有的Docker
yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
安装需要的安装包yum-utils
[root@instance-h9cwbr8m ~]# yum install -y yum-utils
Loaded plugins: langpacks, versionlock
Excluding 1 update due to versionlock (use "yum versionlock status" to show it)
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
Nothing to do
[root@instance-h9cwbr8m ~]#
设置镜像仓库地址
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo ##此地址为官方的仓库地址,在国内建议不要用
阿里云的镜像仓库地址
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker相关的引擎
先更新yum软件包索引
yum makecache fase
docker社区、ee企业版 ce为社区版 官方推荐使用ce版,默认安装最新的docker
版本,也可以指定版本安装
yum install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
使用docker version 查看dockers是否启动
docker version
使用hello-world镜像测试docker
docker run hello-world
以下为执行结果
docker run运行思维导图
查看本机存在那些docker镜像
docker images
可以看到刚才在执行docker run hello-world的时候,已经将hello-world镜像拉去到本地镜像中了
了解 卸载docker
yum remove docker-ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker
/var/lib/docker 为docker默认的工作路径!
- Linux下安装net5.0 SDK及Runtime
安装5.0SDK
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0 -y
安装5.0Runtime
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
验证
dotnet --info
- 步入正轨开始将API项目部署到dockek
准备工作:
发布后的文件放置Linux系统文件夹内,如图(现在只关注发布后的文件,当然也可以直接部署源代码文件)
这里需要注意一些坑:
构建镜像
在构造之前,先测试下当前dll是否有效
如果提示dotnet命令不可使用,请参考请参考官网配置.net core sdk 安装 查看版本,测试是否安装成功。
访问正常,关闭网站,开始构建镜像:
进入当前程序目录
cd a/b 代表进入a文件夹里的b文件夹
输入构建命令
docker build -t test-demo .
build 命令参数:
-t --指定镜像名称 (只能小写)
. --表示build上下文为当前目录,默认情况docker会使用上下文的根目录找到Dockerfile文件
创建并启动容器
[root@localhost publish]# docker run --name myfirstApi -d -p 5000:80 test-demo
run命令参数:
-d --表示在后台以守护态(daemonized)形式运行容器
-p --外部端口与内部容器端口映射。
--name 指定容器的名称。当然可以不指定,默认会为我们创建
最后一个参数 test-demo 就是我们刚创建的镜像名称
检查docker容器列表
[root@localhost publish]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4064ae15311e test-demo "dotnet TestAPI.dll" 3 seconds ago Up 3 seconds 0.0.0.0:5000->80/tcp myfirstApi
测试
拓展:
利用刚才相同的发布文件,继续生成一个不同端口号的服务
命令重复以上步骤:
进入发布文件的目录
cd publish
生成镜像(注意 . 不能丢)
docker build -t publish-demo .
启动容器
docker run --name mysecondApi -d -p 5005:80 publish-demo
结果
遇到的坑:
docker 安装报Error: moby-containerd conflicts with containerd.io-1.4.4-3.1.el7.x86_64
curl https://packages.microsoft.com/config/rhel/7/prod.repo > ./microsoft-prod.repo
sudo cp ./microsoft-prod.repo /etc/yum.repos.d/
yum update -y
可以解决。