使用 vscode + docker 作为开发环境

文件目录结构

1
2
3
4
./.devcontainer
├── .devcontainer.json
├── docker-compose.yml
└── Dockerfile

DockerFile 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Dockerfile
ROM archlinux:latest
ENV USER=mxarcher
ENV PASSWD=what
ENV WORKDIR=/home/${USER}/projects

# 配置清华源和科大源
RUN printf '\n\
    Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch\n\
    Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist

# 安装开发环境必要的包
RUN pacman -Syyu --noconfirm && \
    pacman -S --noconfirm base-devel clang llvm sudo git cmake boost

# 添加用户并配置密码
RUN useradd -m ${USER} && yes ${PASSWD} | passwd ${USER}

# 赋予sudo权限并允许无密码sudo
RUN echo ${USER}' ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN chmod 644 /etc/sudoers

USER ${USER}
RUN mkdir -p ${WORKDIR}

docker-compose 文件配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# docker-compose.yml
version: "3.8"

services:
  projects-dev:
    restart: unless-stopped
    # 使用当前目录的 Dockerfile 来构建 docker 镜像
    build: .
    container_name: projects-dev
    hostname: "projects"
    # 如果在Dockerfile中修改过用户名,此处也要对应修改用户名和工作目录
    user: mxarcher
    working_dir: /home/mxarcher/projects
    # 修改安全配置,以运行gdb server
    security_opt:
      - seccomp:unconfined
    cap_add:
      - SYS_PTRACE
    # 通过 tailf 命令保持 container 不要退出的状态
    command: "tail -f /dev/null"
    volumes:
      # 本文件存放于.devcontainer/中,因而此处要把上级目录(源代码目录)挂载到工作目录
      - ..:/home/mxarcher/projects/

.devcontainer 配置

1
2
3
4
5
6
7
8
// .devcontainer.json
{
    "name": "Project Develop Env",
    "dockerComposeFile": "docker-compose.yml",
    "service": "projects-dev",
    "workspaceFolder": "/home/mxarcher/projects/",
    "remoteUser": "mxarcher"
}
0%