使用 Docker 构建 Rust 开发环境

发布于 阅读 724未分类

在现代软件开发中,Docker 已经成为了一种非常流行的工具,用于创建和管理开发环境。通过 Docker,我们可以轻松地构建一个隔离的、可重复的开发环境,确保每个开发者都在相同的环境中工作。本文将介绍如何使用 Docker 构建一个 Rust 开发环境,并扩展一些相关的内容。

1. Dockerfile 配置

首先,我们需要创建一个 Dockerfile 来定义我们的 Rust 开发环境。以下是一个示例 Dockerfile:

Dockerfile
# 使用 Ubuntu 22.04 作为基础镜像
FROM ubuntu:22.04

# 设置工作目录
WORKDIR /home

# 设置环境变量,确保使用非交互式 apt-get
ENV DEBIAN_FRONTEND=noninteractive
ENV PATH $PATH:/root/.cargo/bin

# 使用清华大学的镜像源
RUN rm -rf /var/lib/apt/lists/*
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 安装 SSH 服务
RUN mkdir /var/run/sshd
RUN apt-get update && apt-get install -y openssh-server
RUN apt-get install -y git build-essential libssl-dev pkg-config libssl-dev tar wget vim curl htop tree net-tools iputils-ping iproute2 dnsutils netcat nmap tcpdump lsof lrzsz unzip zip bzip2 gzip lzma xz-utils

# 安装 rustup
ENV RUSTUP_DIST_SERVER="https://rsproxy.cn"
ENV RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup-init
RUN chmod +x rustup-init
RUN ./rustup-init -y
RUN rm rustup-init

# 复制预先创建好的cargo配置文件到容器中
COPY cargo_config /root/.cargo/config
RUN . $HOME/.cargo/env
RUN set -x
RUN rustup default stable

# 暴露端口
EXPOSE 22
EXPOSE 3300
EXPOSE 3400
EXPOSE 3500

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 拷贝 SSH id_rsa和id_rsa.pub到.ssh目录
RUN mkdir /root/.ssh
COPY id_rsa /root/.ssh/id_rsa
COPY id_rsa.pub /root/.ssh/id_rsa.pub
COPY authorized_keys /root/.ssh/authorized_keys
RUN chmod 600 /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa.pub
RUN chmod 600 /root/.ssh/authorized_keys

# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]

1.1 基础镜像

我们选择了 ubuntu:22.04 作为基础镜像,这是一个稳定且广泛使用的 Linux 发行版。

1.2 环境变量

我们设置了 DEBIAN_FRONTEND=noninteractive 来避免在安装过程中出现交互式提示。同时,我们将 PATH 环境变量更新为包含 Rust 的二进制路径。

1.3 使用国内镜像源

为了加速软件包的下载,我们将 Ubuntu 的软件源替换为清华大学的镜像源。

1.4 安装 SSH 服务

为了方便远程访问,我们安装了 openssh-server,并启动了 SSH 服务。

1.5 安装 Rust

我们使用 rustup 来安装 Rust 工具链,并设置为默认的稳定版本。

1.6 暴露端口

我们暴露了多个端口,包括 SSH 的 22 端口和其他自定义端口(3300、3400、3500),以便在容器外部访问这些服务。

1.7 设置时区

我们将容器的时区设置为 Asia/Shanghai,以便与本地时间保持一致。

1.8 配置 SSH 密钥

我们将预先生成的 SSH 密钥复制到容器中,以便通过 SSH 访问容器时无需输入密码。

2. 构建和运行 Docker 容器

2.1 构建镜像

使用以下命令构建 Docker 镜像:

Bash
docker build -t rust-dev .

2.2 运行容器

构建完成后,可以使用以下命令运行容器:

Bash
docker run -d --name=rust-dev -v /home/dev:/home/dev -p 2222:22 -p 3300:3300 -p 3400:3400 -p 3500:3500 rust-dev

2.3 映射宿主机 hosts 文件

如果需要将宿主机的 hosts 文件映射到容器中,可以使用以下命令:

Bash
docker run -d --name=rust-dev -v /home/dev:/home/dev -v /etc/hosts:/etc/hosts -p 2222:22 -p 3300:3300 -p 3400:3400 -p 3500:3500 rust-dev

2.4 映射 SSH 公钥

如果需要将宿主机的 SSH 公钥映射到容器中,可以使用以下命令:

Bash
docker run -d --name=rust-dev -v /home/dev:/home/dev -v /etc/hosts:/etc/hosts -v /root/.ssh/authorized_keys:/root/.ssh/authorized_keys -p 2222:22 -p 3300:3300 -p 3400:3400 -p 3500:3500 rust-dev

3. 安装 CodeLLDB 扩展

如果你在容器中使用 VSCode 进行开发,并且需要调试 Rust 代码,可以安装 codelldb 扩展。首先,将扩展文件复制到容器中:

Bash
docker cp /tmp/codelldb-x86_64-linux.vsix rust-dev:/tmp/

然后,在容器中安装扩展:

Bash
code --install-extension /tmp/codelldb-x86_64-linux.vsix

4. 扩展内容:MySQL Docker 容器

在开发过程中,数据库是必不可少的。我们可以使用 Docker 快速启动一个 MySQL 容器,并将其与 Rust 开发环境连接。

4.1 启动 MySQL 容器

使用以下命令启动一个 MySQL 容器:

Bash
docker run -d --name=mysql-dev -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 mysql:5.7

4.2 连接 MySQL 容器

在 Rust 项目中,可以使用 mysql crate 来连接 MySQL 数据库。以下是一个简单的示例:

5. 总结

通过 Docker,我们可以轻松地构建一个 Rust 开发环境,并且可以方便地扩展其他服务,如 MySQL 数据库。这种隔离的开发环境不仅提高了开发效率,还确保了环境的一致性。希望本文对你构建 Rust 开发环境有所帮助!

评论 (0)
0 / 500
暂无评论,快来抢沙发~