赞
踩
制作自己的docker镜像,将docker镜像作为服务器,接受vscode连接
目录
(1)制作ubuntu20.04的开发环境
(2)启动镜像实例,将其作为开发环境
(3)添加用户(权限对齐物理开发机),可访问宿主开发机目录
(4)通过ssh或者vscode远程登录
在dockerhub上找基础镜像 Docker Hub
这里以ubuntu20.04为例
基于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

构建带有C++开发环境的新镜像
docker build -t myubuntu20.04:0.1 .
将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
为了保证docker机和开发机的用户权限一致,我们需要按照权限添加用户
假设现在要将用户名为cpf的用户添加到docker中,为了docker中用户能够访问物理机的目录,我们保证docker中的用户和物理机用户在同一组内
在开发机上查看用户cpf的用户信息
- # 有root权限可以直接查看
- cat /etc/passwd | grep cpf
- # 无root权限,用户登录后查看
- id -u && id -g
制作镜像的时候已经在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
- # 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
点击图标
添加配置并保存
刷新后连接
输入密码并回车
连接成功后点击添加目录
点击打开文件夹,然后输入文件夹,默认是打开home目录
打开终端
docker中查看目录
一起学习,一起进步
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。