快速部署应用程序是企业和开发者提高效率、响应市场需求的关键。Docker作为一种轻量级的容器化技术,为应用程序的部署提供了便捷、高效的解决方案。Ubuntu作为一款广泛使用的开源操作系统,与Docker结合使用可以实现快速、稳定的应用程序部署。本文将详细介绍如何通过Docker在Ubuntu上快速部署应用程序。

一、Ubuntu 系统准备

在开始使用 Docker 部署应用程序之前,需要确保你的 Ubuntu 系统已经做好了相应的准备工作。首先,要保证你的 Ubuntu 系统版本是兼容 Docker 的。一般来说,较新的长期支持版本(LTS)都能很好地支持 Docker,例如 Ubuntu 18.04、20.04 和 22.04。

接下来,更新系统的软件包列表,以确保安装的 Docker 及相关依赖是最新版本。打开终端,执行以下命令:

sudo apt update
sudo apt upgrade -y

上述命令首先更新软件包列表,然后将系统中已安装的软件包升级到最新版本。更新过程可能需要一些时间,取决于你的系统配置和网络速度。

二、安装 Docker

Ubuntu 系统安装 Docker 有多种方式,这里介绍通过官方仓库安装的方法,这种方式能保证安装到最新且稳定的 Docker 版本。

1. 添加 Docker 的官方 GPG 密钥:

sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

这些命令首先安装了必要的依赖,然后添加了 Docker 的 GPG 密钥,用于验证下载的 Docker 软件包的完整性。

2. 设置 Docker 仓库:

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

此命令将 Docker 的官方仓库添加到系统的软件源列表中。

3. 安装 Docker 引擎:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

再次更新软件包列表后,安装 Docker 引擎、CLI 工具、containerd 以及 Docker 构建和 Compose 插件。

4. 验证 Docker 安装:

sudo docker run hello-world

如果安装成功,该命令会下载并运行一个简单的测试容器,输出相关的提示信息,表明 Docker 已经正常工作。

三、构建 Docker 镜像

在安装好 Docker 后,接下来需要构建应用程序的 Docker 镜像。Docker 镜像是一个轻量级、独立的可执行软件包,包含了运行应用程序所需的所有文件、依赖和配置信息。

1. 创建 Dockerfile:

在应用程序的根目录下创建一个名为 Dockerfile 的文件,它定义了如何构建 Docker 镜像。以下是一个简单的 Node.js 应用的 Dockerfile 示例:

# 使用官方的 Node.js 基础镜像
FROM node:18

# 设置工作目录
WORKDIR /app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install

# 复制应用程序代码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动应用程序
CMD ["node", "app.js"]

这个 Dockerfile 首先基于官方的 Node.js 18 镜像,然后设置工作目录,复制应用的依赖文件并安装依赖,接着复制应用代码,暴露应用监听的端口,最后定义容器启动时执行的命令。

2. 构建 Docker 镜像:

在 Dockerfile 所在的目录下,打开终端,执行以下命令来构建镜像:

sudo docker build -t my-node-app .

其中,-t 参数用于给镜像指定一个标签,这里将镜像命名为 my-node-app,. 表示使用当前目录作为构建上下文。构建过程可能需要一些时间,取决于应用程序的复杂度和依赖项的数量。

四、运行 Docker 容器

构建好 Docker 镜像后,就可以通过该镜像启动 Docker 容器来运行应用程序。

使用以下命令启动容器:

sudo docker run -d -p 8080:3000 my-node-app

-d 参数表示以守护进程模式运行容器,让容器在后台运行。-p 参数用于将容器内部的端口映射到宿主机的端口,这里将容器内的 3000 端口映射到宿主机的 8080 端口。这样,通过访问宿主机的 8080 端口就可以访问应用程序。

可以使用以下命令查看正在运行的容器:

sudo docker ps

如果想停止某个容器,可以使用容器的 ID 或名称,执行以下命令:

sudo docker stop <container_id_or_name>

五、管理 Docker 资源

在使用 Docker 部署应用程序的过程中,合理管理 Docker 资源是非常重要的,包括镜像、容器和数据卷等。

1. 镜像管理:

可以使用以下命令查看本地的 Docker 镜像:

sudo docker images

如果某个镜像不再需要,可以使用以下命令删除它:

sudo docker rmi <image_id_or_name>

2. 容器管理:

除了查看和停止容器,还可以使用以下命令查看所有容器(包括已停止的):

sudo docker ps -a

如果要删除某个容器,可以使用以下命令:

sudo docker rm <container_id_or_name>

3. 数据卷管理:

数据卷是 Docker 用于持久化存储容器数据的一种机制。可以使用以下命令创建数据卷:

sudo docker volume create my-volume

在启动容器时,可以将数据卷挂载到容器内部:

sudo docker run -d -p 8080:3000 -v my-volume:/app/data my-node-app

这样,容器内 /app/data 目录的数据就会持久化存储在名为 my-volume 的数据卷中。

六、使用 Docker Compose 部署多容器应用

对于一些复杂的应用程序,可能需要多个容器协同工作,例如一个包含前端、后端和数据库的应用。这时可以使用 Docker Compose 来管理和部署多容器应用。

1. 安装 Docker Compose:

在前面安装 Docker 时,已经安装了 Docker Compose 插件。可以通过以下命令验证 Docker Compose 是否安装成功:

docker compose version

2. 创建 docker-compose.yml 文件:

以下是一个简单的包含 Node.js 后端和 MySQL 数据库的应用的 docker-compose.yml 文件示例:

version: '3'
services:
  backend:
    build: .
    ports:
      - "8080:3000"
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: myappdb
      MYSQL_USER: myappuser
      MYSQL_PASSWORD: myapppassword
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:

这个文件定义了两个服务:backend 和 db。backend 服务使用当前目录的 Dockerfile 构建镜像,并将端口 8080 映射到容器内的 3000 端口,同时依赖于 db 服务。db 服务使用官方的 MySQL 8.0 镜像,设置了数据库的相关环境变量,并将数据持久化存储在名为 mysql-data 的数据卷中。

3. 启动多容器应用:

在 docker-compose.yml 文件所在的目录下,执行以下命令启动应用:

docker compose up -d

-d 参数表示以守护进程模式启动容器。Docker Compose 会自动拉取所需的镜像、创建容器并启动服务。

要停止并删除所有服务和容器,可以执行以下命令:

docker compose down

通过以上步骤,你可以在 Ubuntu 系统上使用 Docker 快速部署单容器或多容器应用程序。Docker 的容器化技术为应用程序的开发、测试和部署提供了极大的便利,能够提高开发效率、降低部署成本,是现代软件开发中不可或缺的工具。