如何在 Ubuntu 上使用 Docker:安装、镜像、Dockerfile 与优化完整指南

目次

1. 介绍

什么是 Docker?

Docker 是一个基于容器虚拟化技术的平台,用于高效地开发、分发和运行应用程序。与传统的虚拟机(VM)不同,容器共享宿主操作系统内核,从而实现更快的启动速度和更低的资源消耗。

在 Ubuntu 上使用 Docker 的优势

Ubuntu 是与 Docker 兼容性极强的 Linux 发行版之一。主要原因包括:

  • 官方支持:Docker 官方支持 Ubuntu,可通过官方仓库轻松安装。
  • 稳定的包管理:Ubuntu 的 APT 包管理器使版本管理变得简洁明了。
  • 广泛的社区支持:Ubuntu 拥有庞大的全球用户群,遇到问题时更容易获得帮助和解决方案。

本文将教您什么

本指南将逐步讲解以下内容:

  1. 如何在 Ubuntu 上安装 Docker
  2. Docker 镜像的基本操作
  3. 使用 Dockerfile 创建自定义镜像
  4. 在 Ubuntu 容器中设置日语语言环境
  5. 优化与精简 Docker 镜像
  6. 在 Ubuntu 容器内开发应用程序
  7. 常见错误及排查方法

本文内容适用于初学者和高级,您可以在任何阶段参考使用。

2. 在 Ubuntu 上安装 Docker

使用官方仓库安装 Docker

在 Ubuntu 中,您可以通过官方仓库轻松安装 Docker。请按照以下步骤配置环境。

1. 移除已有的 Docker 包

Ubuntu 可能已预装名为 docker.io 的软件包,该版本可能较旧。请在安装最新 Docker 之前将其移除。

sudo apt remove docker docker-engine docker.io containerd runc

2. 安装所需依赖包

在安装前先安装依赖软件包。

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. 添加官方 Docker 仓库

添加 Docker 官方的 GPG 密钥并配置仓库地址。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) 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

4. 安装 Docker

添加仓库后,安装 Docker 软件包。

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. 验证安装

通过显示版本信息来检查 Docker 是否已正确安装。

docker --version

安装后的初始设置

1. 启动并启用 Docker 服务

启动 Docker 服务并设置开机自启。

sudo systemctl start docker
sudo systemctl enable docker

2. 允许非 root 用户运行 Docker

默认情况下,仅 root 用户可以运行 Docker。请为普通用户授予 Docker 命令执行权限。

sudo usermod -aG docker $USER

注销并重新登录以使更改生效。

3. 测试 Docker 运行情况

使用普通用户账户运行 hello-world 容器进行测试。

docker run hello-world

如果输出中包含 “Hello from Docker!” 则说明安装成功。

3. Docker 镜像的基本操作

什么是 Docker 镜像?

Docker 镜像相当于创建容器的模板。使用基于 Ubuntu 的 Docker 镜像,您可以快速启动一个 Ubuntu 环境。

从 Docker Hub 拉取 Ubuntu 镜像

Docker Hub 提供大量官方 Docker 镜像。要下载 Ubuntu 镜像,请执行以下命令:

docker pull ubuntu

启动与停止容器

使用已下载的 Ubuntu 镜像启动:

docker run -it ubuntu bash

这会在 Ubuntu 容器中打开一个 shell,允许您在其中操作。

列出容器

显示正在运行的容器:

docker ps

显示所有容器,包括已停止的容器:

docker ps -a

停止和移除容器

停止一个正在运行的容器:

docker stop [container ID or name]

移除一个不必要的容器:

docker rm [container ID or name]

管理 Docker 镜像

列出已下载的 Docker 镜像:

docker images

移除一个镜像:

docker rmi [image ID]

4. 使用 Dockerfile 创建自定义镜像

什么是 Dockerfile?

Dockerfile 是一个用于构建 Docker 镜像的配置文件。根据 Dockerfile 中编写的指令,您可以创建自定义的 Docker 镜像。这允许您统一开发环境或创建包含所需软件包的镜像。

Dockerfile 的基本语法

Dockerfile 通常包括以下命令:

CommandDescription
FROMSpecifies the base image
RUNExecutes commands to build the image
COPYCopies files into the container
WORKDIRSets the working directory
CMDDefault command executed when the container starts
ENTRYPOINTDefines the entry point of the container

创建基于 Ubuntu 的自定义镜像

按照以下步骤创建基于 Ubuntu 的自定义 Docker 镜像。

1. 创建工作目录

首先,创建一个新的项目目录并进入其中。

mkdir my-ubuntu-image
cd my-ubuntu-image

2. 创建 Dockerfile

在目录中创建一个 Dockerfile 并写入以下内容:

# Base Ubuntu official image
FROM ubuntu:latest

# Maintainer information (optional)
LABEL maintainer="your-email@example.com"

# Update package list and install basic tools
RUN apt update && apt install -y curl vim git

# Set working directory
WORKDIR /workspace

# Default command when the container starts
CMD ["bash"]

3. 构建 Docker 镜像

从您的 Dockerfile 构建自定义镜像:

docker build -t my-ubuntu-image .

-t 选项为镜像分配一个名称。

4. 验证镜像

检查您新构建的镜像:

docker images

5. 运行容器

从自定义镜像启动一个容器:

docker run -it my-ubuntu-image

此镜像包含诸如 curlvim 等工具。

5. 在 Ubuntu 容器中设置日语环境

默认的 Ubuntu 镜像使用英语环境。要使用日语,需要进行额外的配置。

设置日语 Locale

要在 Ubuntu 容器中启用日语显示和输入,请安装日语 locale。

1. 安装所需软件包

apt update
apt install -y language-pack-ja locales

2. 配置 Locale

生成并应用 locale:

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. 应用设置

export LANG=ja_JP.UTF-8

设置日语输入

要在终端中输入日语字符,请安装 ibus-mozc

apt install -y ibus-mozc

如果使用 GUI 应用程序,请添加以下环境变量:

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

使用 GUI 应用程序

要在 Docker 容器中运行 GUI 应用程序,请在主机上使用 X 服务器。

使用启用 X11 运行容器:

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. 优化和最小化 Docker 镜像

Docker 镜像可以进行优化,以提高容器启动速度并减少存储使用量。以下是创建轻量级镜像的几种技术。

如何创建基于 Ubuntu 的轻量级镜像

默认的 ubuntu:latest 镜像相对较大。使用更轻量级的选项如 ubuntu:minimal 可以帮助减少容器大小。

FROM ubuntu:minimal

另一个选项是使用 Alpine Linux,它比 Ubuntu 小得多。

FROM alpine:latest
RUN apk add --no-cache bash curl

使用 Alpine 可以将镜像大小减少数百兆字节。

通过移除不必要的文件来减少镜像大小

您可以通过删除 apt-get 创建的非必要缓存文件来减小镜像大小。

RUN apt update && apt install -y curl vim \
    && apt clean \
    && rm -rf /var/lib/apt/lists/*

具体而言,rm -rf /var/lib/apt/lists/* 命令会删除软件包列表和未使用的数据。

使用多阶段构建

多阶段构建允许您仅在构建过程中使用工具,同时保持最终镜像的轻量化。

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

这样,您就可以避免在最终镜像中包含开发工具,从而显著减小体积。

7. 实践示例:在 Ubuntu 容器中进行应用开发

本节介绍如何在 Ubuntu 容器内部署开发环境。

设置 Python 开发环境

创建以下 Dockerfile,以在 Ubuntu 容器中搭建 Python 开发环境:

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

构建镜像并运行容器:

docker build -t python-dev .
docker run -it python-dev

该环境允许您使用 python3 命令进行脚本开发和测试。

设置 Node.js 开发环境

要搭建 Node.js 开发环境,请使用以下 Dockerfile:

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

构建并运行容器:

docker build -t node-dev .
docker run -it node-dev

该环境支持使用 node 命令执行 JavaScript 并进行应用开发。

8. 常见问题与故障排除

使用 Docker 可能会遇到各种问题。以下是常见问题及典型解决方案。

Docker 与虚拟机的区别

  • Docker:共享宿主操作系统内核,轻量且容器启动快速。
  • 虚拟机 (VM):每个虚拟机都包含完整的操作系统,导致资源占用更高且启动较慢。

Docker 在资源优化方面表现出色,适用于开发环境和自动化部署。

在 Ubuntu 容器中持久化数据

要在容器停止后仍保留数据,请使用 卷挂载

docker run -v my_data:/data ubuntu

即使容器被删除,存储在 my_data 卷中的数据仍可重复使用。

常见错误及解决方案

1. permission denied 错误

如果在尝试运行 Docker 时看到 permission denied,可能是因为您的用户未加入 docker 组。

将用户添加到 Docker 组:

sudo usermod -aG docker $USER

注销并重新登录以使更改生效。

2. image not found 错误

如果某镜像已从 Docker Hub 移除,请在拉取时指定更新的标签:

docker pull ubuntu:22.04

明确指定版本可确保获取到正确的镜像。

年収訴求