Docker部署(Linux)
1. 安装Docker
1.1 首先确保你的Linux系统上已经安装了Docker。如果还没有安装,可以使用以下命令来安装:
1.1.1对于Ubuntu系统:
# 卸载旧版本(如有) sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖工具 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker仓库 echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io # 验证安装 sudo docker --version # 启动Docker服务 sudo systemctl start docker sudo systemctl enable docker
1.1.2对于CentOS系统:
# 卸载旧版本(如有) sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖工具 sudo yum install -y yum-utils # 添加Docker仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 更新 yum 包索引 sudo yum makecache fast # 安装Docker引擎 sudo yum install docker-ce docker-ce-cli containerd.io
如果安装Docker引擎失败可以更换使用阿里云或其他国内镜像源
# 首先备份现有的 repo 文件: sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 然后下载阿里云的 repo 文件: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 最后,清理缓存并重新生成 yum 缓存: sudo yum clean all sudo yum makecache # 或者,为了加快这个过程,可以使用 fast 参数: sudo yum makecache fast # 尝试再次安装 Docker: sudo yum install docker-ce docker-ce-cli containerd.io
如果依旧有部分包安装失败,可以考虑下载到本地按照顺序进行安装,你可以直接访问 Docker CE Stable - x86_64 页面找到你需要的 .rpm 文件。
实际操作建议:
-
优先安装基础依赖:首先确保安装了
containerd.io,因为它是 Docker 引擎的基础依赖之一。 -
安装 Docker CLI:接着安装
docker-ce-cli,这提供了 Docker 命令行工具。 -
安装 Docker 引擎:然后安装
docker-ce,即 Docker 引擎本身。 -
最后安装插件:最后安装任何插件,比如
docker-buildx-plugin。
例如,你可以这样依次安装:
sudo yum install ./containerd.io-*.rpm sudo yum install ./docker-ce-cli-*.rpm sudo yum install ./docker-ce-*.rpm sudo yum install ./docker-buildx-plugin-*.rpm
最后:
# 验证安装 sudo docker --version # 启动Docker服务 sudo systemctl start docker # 验证 Docker 服务状态 sudo systemctl status docker # 设置开机自启 sudo systemctl enable docker
注意事项
-
内核版本:
-
CentOS 7需要内核版本3.10或更高。
-
Ubuntu需要内核版本4.4或更高。
-
使用
uname -r检查内核版本。
-
-
SELinux(CentOS):
-
如果启用了SELinux,可能需要额外配置:
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
-
-
防火墙(CentOS):
-
如果启用了防火墙,需开放Docker相关端口:
sudo firewall-cmd --permanent --add-port=2375/tcp sudo firewall-cmd --reload
-
1.2 在Linux系统中,可以通过多种方法来判断当前系统是Ubuntu还是CentOS。以下是两种常用的方法:
方法一:查看/etc/os-release文件
这个文件包含了操作系统的各种信息。
打开终端并输入以下命令:
cat /etc/os-release
你会看到类似如下的输出:
-
对于Ubuntu系统,会显示类似于下面的信息:
NAME="Ubuntu" VERSION="20.04.1 LTS (Focal Fossa)" ID=ubuntu ID_LIKE=debian ...
-
对于CentOS系统,则会显示类似于下面的信息:
NAME="CentOS Linux" VERSION="8 (Core)" ID="centos" ID_LIKE="rhel fedora" ...
方法二:使用lsb_release命令
该命令可以显示Linux标准基础(Linux Standard Base)和发行版的相关信息。
在终端输入以下命令:
lsb_release -a
这将输出关于您正在使用的Linux发行版的详细信息。例如,在Ubuntu上,你可能会看到如下输出:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal
而在CentOS上,输出可能看起来像这样:
LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 8.2.2004 (Core) Release: 8.2.2004 Codename: Core
这两种方法都可以帮助你快速识别当前使用的Linux发行版是Ubuntu还是CentOS。
2. 准备Dockerfile
每个API服务都需要一个Dockerfile来定义其构建过程。假设每个服务的目录结构如下:
/your-project/ ├── ApiGateway/ │ ├── publish-files/ # 直接放在这里或直接放在ApiGateway目录下 │ └── Dockerfile ├── AuthCenter/ │ ├── publish-files/ # 或者直接放在AuthCenter目录下 │ └── Dockerfile ├── TransferPlatform.Api/ │ ├── publish-files/ # 或者直接放在TransferPlatform.Api目录下 │ └── Dockerfile └── User.Api/ ├── publish-files/ # 或者直接放在User.Api目录下 └── Dockerfile └── docker-compose.yml
如果不需要多服务统一管理,则不需要docker-compose.yml。
每个Dockerfile可能看起来像这样(示例):
# 使用官方.NET Core SDK镜像来构建应用 FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build-env WORKDIR /app # 复制.csproj文件并恢复依赖项 COPY *.csproj ./ RUN dotnet restore # 复制其余文件并发布应用 COPY . ./ RUN dotnet publish -c Release -o out # 构建运行时镜像 FROM mcr.microsoft.com/dotnet/aspnet:3.1 WORKDIR /app COPY --from=build-env /app/out . # 暴露应用运行所需的端口(请根据实际情况替换80为你的应用端口) EXPOSE 80 # 运行应用 ENTRYPOINT ["dotnet", "YourAppName.dll"]
如果API文件是发布后的文件,不需要在Docker中再进行编译步骤,可简化为:
# 使用官方 ASP.NET 运行时镜像作为基础镜像 FROM mcr.microsoft.com/dotnet/aspnet:3.1 # 设置工作目录 WORKDIR /app # 将当前目录下的所有文件复制到容器内的 /app 目录中 COPY . . # 暴露应用监听的端口 EXPOSE 80 # 配置容器启动时执行的命令 ENTRYPOINT ["dotnet", "YourAppName.dll"]
请根据实际的服务名替换YourAppName.dll。
3. 构建和运行容器(启动单个服务)
在每个服务的目录下执行以下命令来构建和运行容器:
# 构建Docker镜像 docker build -t yourimagename . # 运行容器 docker run -d -p yourport:80 yourimagename
例如,对于ApiGateway服务:
cd ApiGateway docker build -t apigateway . docker run -d -p 5000:80 apigateway
4. 使用Docker Compose进行统一管理(启动多服务)
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件 (docker-compose.yml),你可以配置应用程序的服务、网络和卷等,然后使用一条命令来启动所有服务。
下面是如何使用 Docker Compose 来统一管理多个 API 服务(如 ApiGateway、AuthCenter、TransferPlatform.Api、User.Api)的步骤:
步骤 1: 安装 Docker Compose
首先确保你的系统上已经安装了 Docker Compose。如果尚未安装,可以通过以下命令在 Linux 上安装 Docker Compose:
# 获取 Docker Compose 的最新版本号 LATEST_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "K.*d') # 下载 Docker Compose 的最新版本 sudo curl -L "https://github.com/docker/compose/releases/download/$LATEST_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 给予执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装是否成功 docker-compose --version
注意:如果出现 -bash: docker-compose: command not found 错误提示,表明系统无法找到 docker-compose 命令。这通常是因为 docker-compose 没有正确安装或其所在目录没有添加到系统的 PATH 环境变量中。
(1). 检查 Docker Compose 是否已正确安装
首先确认 /usr/local/bin/docker-compose 文件是否存在以及是否具有可执行权限:
ls -l /usr/local/bin/docker-compose
你应该能看到类似下面的输出(具体版本号可能不同):
-rwxr-xr-x 1 root root 65973280 Feb 6 15:48 /usr/local/bin/docker-compose
如果文件不存在,请按照正确的步骤重新下载并安装 Docker Compose。
(2). 重新执行安装命令
如果你发现文件不存在或者权限不对,可以按照上述方式重新执行安装命令:
(3). 确认环境变量配置
确保 /usr/local/bin 已经包含在你的 PATH 环境变量中。可以通过以下命令查看当前的 PATH 设置:
echo $PATH
你应该能在输出中看到 /usr/local/bin。如果没有,你需要将它添加到你的 PATH 中。可以在 ~/.bashrc 或 ~/.bash_profile(取决于你的 shell 配置文件)中添加如下行:
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc
然后运行 source ~/.bashrc 或 source ~/.bash_profile 使更改生效。
(4). 再次验证 Docker Compose 安装
完成上述步骤后,再次尝试运行:
docker-compose --version
现在应该能够看到 Docker Compose 的版本信息,例如:
docker-compose version 2.20.2, build unknown
步骤 2: 创建 docker-compose.yml 文件
在你的项目根目录下创建一个名为 docker-compose.yml 的文件,并根据你的需求编写配置。这里有一个示例配置,适用于你提到的四个服务:
version: '3' services: apigateway: image: apigateway build: context: ./ApiGateway ports: - "5000:80" authcenter: image: authcenter build: context: ./AuthCenter ports: - "5001:80" transferplatformapi: image: transferplatformapi build: context: ./TransferPlatform.Api ports: - "5002:80" userapi: image: userapi build: context: ./User.Api ports: - "5003:80"
在这个文件中:
-
image指定了服务的镜像名称。 -
build.context指定了 Dockerfile 所在的目录。 -
ports列出了需要映射到主机的端口,格式为"主机端口:容器端口"。
步骤 3: 构建并运行服务
在包含 docker-compose.yml 文件的目录下执行以下命令来构建并启动所有服务:
docker-compose up -d
-d 参数表示以分离模式(后台运行)启动服务。
如果你想在启动之前先构建或重新构建镜像,可以使用:
docker-compose up --build -d
步骤 4: 管理服务
一旦服务启动后,你可以使用以下命令进行管理:
-
查看正在运行的服务状态:
docker-compose ps
-
停止所有服务:
docker-compose down
-
停止并移除容器、网络、图像以及项目中的卷:
docker-compose down --volumes
-
docker logs命令查看日志:# 查看特定容器的所有日志 docker logs
# 实时跟踪日志 docker logs -f # 显示时间戳 docker logs --timestamps # 查看最后几行日志 docker logs -n 100 -
使用 Docker Compose 查看日志:
# 查看所有服务的日志 docker-compose logs # 查看特定服务的日志 docker-compose logs
# 同样地,你可以添加 -f 参数以实时跟踪日志: docker-compose logs -f
也可以选择进入容器使用常规的 Linux 命令来查看日志文件,通过这些步骤,你可以方便地使用 Docker Compose 来管理和部署多个 Docker 容器应用,实现对多个API服务的统一管理。

