阅读量:3
制作自己的docker镜像,将docker镜像作为服务器,接受vscode连接
目录
分 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中查看目录
然后就是下载代码并开始后续的开发工作了
一起学习,一起进步