最近在学习 Docker , 顺便把学习日记记录一下.
先说一下环境配置, 我是在 Windows10 用自带 Hyper-v 创建了 Linux 虚拟机, 系统是 Centos8.
在 Centos8 设置镜像仓库并安装 Docker:
设置仓库:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
稳定仓库:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装 docker(因为 docker 最新版本没有可用的 containerd.io, 我安装的 docker 版本是 18.09.1):
sudo yum install docker-ce-18.09.1 docker-ce-cli containerd.io
启动 docker:
sudo systemctl start docker
运行 docker(判断是否成功):
sudo docker run hello-world
配置好环境后, 开始创建程序
新建. net core 3.1 web 应用程序 CoreWebTest1 , 选择 Linux 支持
根目录下有个 Dockerfile
- FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
- WORKDIR /App
- EXPOSE 80
- EXPOSE 443
- FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
- WORKDIR /src
- COPY ["CoreWebTest01/CoreWebTest01.csproj", "CoreWebTest01/"]
- RUN dotnet restore "CoreWebTest01/CoreWebTest01.csproj"
- COPY . .
- WORKDIR "/src/CoreWebTest01"
- RUN dotnet build "CoreWebTest01.csproj" -c Release -o /App/build
- FROM build AS publish
- RUN dotnet publish "CoreWebTest01.csproj" -c Release -o /App/publish
- FROM base AS final
- WORKDIR /App
- COPY --from=publish /App/publish .
- ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]
把整个程序打包 CoreWebTest1.zip
使用 xshell 6 连接 Linux , 找到 docker 目录
cd /var/lib/docker
创建项目目录 mkdir CoreWebTest01 , 进入该目录 cd CoreWebTest01
把程序文件传输到 Linux
输入 rz , 选择 CoreWebTest01.zip
传输完解压文件 unzip CoreWebTest01.zip
解压完查看当前目录, 输入 ls , 看到已经. net 项目文件已经解压到当前目录
把 CoreWebTest01 文件夹下的 Dockerfile 移动到当前目录
mv CoreWebTest01/Dockerfile .
进入 CoreWebTest01 目录, 先执行 Dockerfile 文件中这两句
- cd CoreWebTest01
- dotnet build "CoreWebTest01.csproj" -c Release -o /App/build
- dotnet publish "CoreWebTest01.csproj" -c Release -o /App/publish
执行完再回到上级目录 cd ..
开始构建 docker 镜像
docker build -t webtest01 .
构建完 输入 docker images , 可以看到有 webtest01 的镜像
然后发布镜像
docker run -d -P webtest01 (-d 表示后台运行容器, -P 表示随机映射端口)
输入 docker ps -a , 可以看到当前有哪些运行的镜像
其中还有对应的端口号 (如果发布完看不到对应端口, 可能是防火墙的原因, 先关闭防火墙)
在浏览器输入对应 ip:port , 就可以访问网站了
成功通过 Docker 发布. net core 程序后我在想, Dockerfile 文件那么多行, 能否简化一下呢, 答案是可以的
修改 Dockerfile 如下
- FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
- WORKDIR /webtest2
COPY . .
- EXPOSE 8080
- ENTRYPOINT ["dotnet", "CoreWebTest01.dll"]
Dockerfile 指定暴露端口是 8080, 稍后发布镜像时也同步映射 8080 端口到 docker
注, 如果觉得 mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim 下载太慢, 可以换成 mcr.azk8s.cn/dotnet/core/aspnet:3.1-buster-slim
设置 Dockerfile 属性为始终复制
发布. net core 程序, 发布时选择依赖框架, 可移植
发布完, 打包发布文件, 同样方式传到 Linux
进入发布文件根目录
- docker build -t webtest2 .
- docker run -d -p 8080:80 webtest2
这里小写 - p 8080:80 表示把 8080 外部端口映射到 Docker 80 端口
最后浏览器输入 ip:8080 , 可以正常访问网站
以上, 是通过 Docker 发布. net core 程序到 CentOS 的方法
来源: http://www.bubuko.com/infodetail-3483833.html