vscode+docker搭建迷你开发环境。制作docker镜像,并通过vscode连接后进行开发

制作自己的docker镜像,将docker镜像作为服务器,接受vscode连接

目录

[1. 制作开发环境镜像](#1. 制作开发环境镜像)

[1.1 选择基础镜像](#1.1 选择基础镜像)

[1.2 编写dockerfile](#1.2 编写dockerfile)

[1.3 构建镜像](#1.3 构建镜像)

[2. 启动镜像](#2. 启动镜像)

[3. 添加用户](#3. 添加用户)

[3.1 查看物理机上用户信息](#3.1 查看物理机上用户信息)

[3.2 登录到docker中](#3.2 登录到docker中)

[3.3 按照物理机的用户和组id增加用户](#3.3 按照物理机的用户和组id增加用户)

[4. 使用vscode连接](#4. 使用vscode连接)

[4.1 vscode添加ssh配置](#4.1 vscode添加ssh配置)

[4.2 vscode连接docker](#4.2 vscode连接docker)

[4.3 打开工作目录](#4.3 打开工作目录)

[4.4 查看共享目录](#4.4 查看共享目录)

然后就是下载代码并开始后续的开发工作了


分 4 步

  • (1)制作ubuntu20.04的开发环境

  • (2)启动镜像实例,将其作为开发环境

  • (3)添加用户(权限对齐物理开发机),可访问宿主开发机目录

  • (4)通过ssh或者vscode远程登录

1. 制作开发环境镜像

1.1 选择基础镜像

在dockerhub上找基础镜像 Docker Hub

这里以ubuntu20.04为例

1.2 编写dockerfile

基于ubuntu20.04的基础镜像,安装C++开发工具

FROM ubuntu:20.04 AS ubuntu20.04-base
LABEL author="authorname"
ENV DEBIAN_FRONTEND=noninteractive

# 1. 基础环境
# 1.1 切换国内源
RUN sed -i s@/archive.ubuntu.com/@/mirrors.tuna.tsinghua.edu.cn/@g /etc/apt/sources.list
RUN apt-get clean && apt-get update

# 1.2 安装基础包
RUN apt-get -yq install apt-utils vim git tmux bash-completion \
    curl sudo locales gnupg lsb-release language-pack-zh-hans \
    python3-pip openssh-server

# 1.3 语言
RUN locale-gen en_US en_US.UTF-8
RUN update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
ENV LANG=en_US.UTF-8

# 1.4 添加docker和root用户
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN useradd -rm -d /home/docker -s /bin/bash -g root -G sudo docker
RUN echo 'docker:docker' | chpasswd
RUN echo 'root:Aa123456' | chpasswd
USER docker
WORKDIR /home/docker

# 2. 安装ssh服务
FROM ubuntu20.04-base AS ubuntu20.04-base-sshd
USER root
# 2.1 ssh服务配置
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
RUN sed -i 's/\#PubkeyAuthentication\ yes/PubkeyAuthentication\ yes/' /etc/ssh/sshd_config && \
    sed -i 's/\#PasswordAuthentication\ yes/PasswordAuthentication\ yes/' /etc/ssh/sshd_config && \
    sed -i 's/\#X11Forwarding\ no/X11Forwarding\ yes/' /etc/ssh/sshd_config && \
    sed -i 's/\#AllowTcpForwarding\ yes/AllowTcpForwarding\ yes/' /etc/ssh/sshd_config && \
    sed -i 's/\#AllowAgentForwarding\ yes/AllowAgentForwarding\ yes/' /etc/ssh/sshd_config
RUN mkdir /var/run/sshd
RUN bash -c 'install -m755 <(printf "#!/bin/sh\nexit 0") /usr/sbin/policy-rc.d'
RUN ex +'%s/^#\zeListenAddress/\1/g' -scwq /etc/ssh/sshd_config
RUN ex +'%s/^#\zeHostKey .*ssh_host_.*_key/\1/g' -scwq /etc/ssh/sshd_config
RUN RUNLEVEL=1 dpkg-reconfigure openssh-server
RUN ssh-keygen -A -v
RUN update-rc.d ssh defaults

# 3. sudo配置
RUN ex +"%s/^%sudo.*$/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" -scwq! /etc/sudoers

FROM ubuntu20.04-base-sshd AS ubuntu20.04-dev

# 4. ssh指纹可免密登录
# Generate and configure user keys.
USER docker
WORKDIR /home/docker
RUN ssh-keygen -t rsa -b 4096 -C "xxx@gmail.ai" -f ~/.ssh/id_rsa_xxx_gmail -q -N ""

# 5. 基础开发环境
# 更新镜像的包索引并安装必要的软件包
RUN sudo apt-get install -yq \
    cmake \
    g++ \
    gdb \
    pkg-config

# 6. 默认启动命令
ENTRYPOINT sudo service ssh restart && bash

1.3 构建镜像

构建带有C++开发环境的新镜像

docker build -t myubuntu20.04:0.1 .

2. 启动镜像

  • 将docker的ssh端口22映射到物理机的2222

  • 将docekr的/mnt目录映射到物理机的/mnt/users/software目录

    docker run -d -t -p 2222:22 --name ubuntu20.04_for_software -v /mnt:/mnt/users/software myubuntu20.04:0.1

3. 添加用户

为了保证docker机和开发机的用户权限一致,我们需要按照权限添加用户

假设现在要将用户名为cpf的用户添加到docker中,为了docker中用户能够访问物理机的目录,我们保证docker中的用户和物理机用户在同一组内

3.1 查看物理机上用户信息

在开发机上查看用户cpf的用户信息

# 有root权限可以直接查看
cat /etc/passwd | grep cpf
# 无root权限,用户登录后查看
id -u && id -g

3.2 登录到docker中

制作镜像的时候已经在docker里增加了docker用户,因此直接使用docker用户登录

# 在docker所在的物理机可以通过两种方式登录到docker中
# 1. 通过docker命令登录:docker exec -it ubuntu20.04_for_software /bin/bash
# 2. 通过ssh登录
ssh docker@127.0.0.1 -p2222
# 在其他设备上也可以通过ssh登录,10.31.2.204为docker所在物理机的IP地址
ssh docker@10.31.2.204 -p2222

3.3 按照物理机的用户和组id增加用户

# 1. 以用户和组id为1000来添加cpf用户到cpf组
sudo groupadd cpf -g 1000
sudo useradd -g cpf -ms /bin/bash cpf -u 1000
# 2. 如果需要sudo权限
# sudo usermod -aG sudo cpf
# 3. 修改cpf用户的密码
# 删除原密码
sudo passwd -d cpf
# 切换到cpf并修改密码
sudo su - cpf
passwd

4. 使用vscode连接

4.1 vscode添加ssh配置

点击图标

添加配置并保存

4.2 vscode连接docker

刷新后连接

输入密码并回车

连接成功后点击添加目录

4.3 打开工作目录

点击打开文件夹,然后输入文件夹,默认是打开home目录

4.4 查看共享目录

打开终端

docker中查看目录

然后就是下载代码并开始后续的开发工作了

一起学习,一起进步

相关推荐
乐闻x1 小时前
VSCode 插件开发实战(九): 不同插件之间如何通信
ide·vscode·编辑器
奋斗吧程序媛1 小时前
删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
前端·vscode
乐闻x1 小时前
VSCode 插件开发实战(十): 环境变量Env设置与管理
ide·vscode·编辑器
jieshenai1 小时前
使用 VSCode 学习与实践 LaTeX:从插件安装到排版技巧
ide·vscode·学习
@泽栖4 小时前
Docker 常用命令
运维·服务器·docker
鲁正杰6 小时前
在一个服务器上抓取 Docker 镜像并在另一个服务器上运行
运维·服务器·docker
老大白菜7 小时前
Windows 11 安装 Dify 完整指南 非docker环境
windows·docker·容器
VinciYan11 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
tntlbb11 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Gabriel_liao12 小时前
Docker安装Neo4j
docker·容器·neo4j