1. 环境准备
服务器:X64、Cent OS 7.2
编译器:Visual Studio 2022
2. 项目搭建


新建Dockerfile
文件,没有后缀名。
bash
# 构建阶段
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /app
# 将所有文件复制到工作目录
COPY . ./
# 构建应用程序
RUN dotnet publish -c Release -r linux-x64 -o out --self-contained true /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
# 运行阶段
FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/out ./
# 指定应用程序入口点
ENTRYPOINT ["./WebAPI-Demo"]
3. Docker环境安装
要在 CentOS
上安装 Docker
,可以按照以下步骤进行:
arduino
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装必要的依赖包:确保系统安装了所需的软件包,以便安装 Docker:
kotlin
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
添加 Docker 软件包源:将 Docker 软件包源添加到系统中。执行以下命令:
ruby
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
启动 Docker 服务:安装完成后,启动 Docker 服务。执行以下命令:
ruby
$ sudo systemctl start docker
设置 Docker 开机自启:如果需要 Docker 在系统启动时自动启动,可以执行以下命令:
shell
$ sudo systemctl enable docker
验证安装:运行以下命令来验证 Docker 是否已成功安装:
css
$ sudo docker --version
运行以下命令以验证 Docker 服务是否正在运行:
lua
$ sudo systemctl status docker
4. 运行容器
perl
$ docker build -t my-dotnet-app .
docker build
: 这是用于构建 Docker 镜像的命令。-t my-dotnet-app
: 这是一个选项,用于为构建的镜像指定一个标签(tag)
,即镜像的名称。在这个命令中,my-dotnet-app
是镜像的名称。.
: 这是构建上下文路径,指定了Dockerfile
的位置。在这里,.
表示当前目录,即Dockerfile
所在的目录。Docker
将会在这个目录下查找Dockerfile
并基于它构建镜像。
ruby
$ docker run -d --rm -p <host_port>:<container_port> my-dotnet-app
docker run
: 这是用于运行 Docker 容器的命令。-d
: 这是一个选项,表示以后台(detached)模式运行容器。这意味着容器会在后台运行,并且不会占用当前终端。--rm
: 这是一个选项,表示容器在停止后立即删除。这样做可以确保在容器停止后及时清理容器实例,以释放系统资源。-p <host_port>:<container_port>
: 这是一个选项,用于将容器内部的端口映射到宿主机上的端口。<host_port>
是宿主机上的端口,<container_port>
是容器内部监听的端口。通过这个选项,可以让外部系统通过宿主机上的端口访问容器中运行的应用程序。my-dotnet-app
: 这是要运行的 Docker 镜像的名称。在这个命令中,my-dotnet-app
是要运行的镜像名称。
5. 防火墙和云服务器安全组
开放端口:
使用以下命令开放单个端口:
css
$ sudo firewall-cmd --zone=public --add-port=<端口号>/tcp --permanent
将 <端口号>
替换为你想要开放的实际端口号。这个命令将永久性地(即重启后依然有效)将指定的 TCP 端口添加到公共区域的防火墙规则中。
如果你需要开放 UDP
端口,可以将 tcp
替换为 udp
。
关闭端口:
使用以下命令关闭已经开放的端口:
css
$ sudo firewall-cmd --zone=public --remove-port=<端口号>/tcp --permanent
同样,将 <端口号>
替换为你要关闭的实际端口号。这个命令将永久性地从公共区域的防火墙规则中移除指定的 TCP 端口。
如果你需要关闭 UDP
端口,同样可以将 tcp
替换为 udp
。
重新加载防火墙规则:
使用以下命令重新加载防火墙规则,使更改生效:
css
$ sudo firewall-cmd --reload
这个命令将重新加载防火墙规则,应用任何最新更改。
查看已开放端口:
使用以下命令查看当前已经开放的端口列表:
css
$ sudo firewall-cmd --zone=public --list-ports
这个命令将列出当前公共区域中已经开放的端口列表。
如果是使用云服务器的话还需要开放云服务器的安全组才能进行访问。
6. 网站访问
bash
访问地址:http://ip:port/weatherforecast