制作自己的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中查看目录
然后就是下载代码并开始后续的开发工作了
一起学习,一起进步
发表评论