1.在母本服务器上查看要复刻的docker镜像。
sv800:build 作为docker镜像源[repository:tag],使用docker save 指令提出docker镜像包rk3588.tar
docker save -o rk3588.tar sv800:build
2.在新环境下加载docker镜像包,预先安装docker指令工具
docker load -i rk3588.tar
执行效果图:
安装完成后使用docker images指令可以看到docker下已经load的images信息。
3.启动load完成的image镜像,创建docker容器,执行star_docker.sh
脚本内容如下:
USER_ID=$(id -u)
GRP=$(id -g -n)
GRP_ID=$(id -g)
LOCAL_HOST=`hostname`
DOCKER_HOME="/home/$USER"if [ "$USER" == "root" ];thenDOCKER_HOME="/root"
fi
if [ ! -d "$HOME/.cache" ];thenmkdir "$HOME/.cache"
fiIMG="sv800:build"docker run -it \-d \--privileged \--name sv800_build \-e DOCKER_USER=$USER \-e USER=$USER \-e DOCKER_USER_ID=$USER_ID \-e DOCKER_GRP=$GRP \-e DOCKER_GRP_ID=$GRP_ID \-e TERM="xterm-256color" \--env ROS_DOMAIN_ID=$(date +%N) \-v /tmp/.X11-unix:/tmp/.X11-unix:rw \-v /media:/media \-v $HOME/.cache:${DOCKER_HOME}/.cache \-v /etc/localtime:/etc/localtime:rw \-v /home/build/:/home/build \--net host \--shm-size 512M \-w /home/build \$IMG \/bin/bash
执行成功后,便可再执行docker ps时看到运行状态的docker容器
4.以root身份进入docker环境,在docker内添加一个与docker外用户名及用户id一致的用户,这样在工作时,使文件在docker内外环境下都有一致的所有权属性。
执行into_docker_root.sh 以root身份进入docker。脚本内容如下:
docker exec -u root -it sv800_build /bin/bash
以root进入docker环境后,使用useradd xxx添加xxx用户,vi修改/etc/passwd文件中xxx用户对应的用户id值,使其与docker环境外的xxx用户id值保持一致。修改完成后,exit退出docker环境。
5.以xxx用户进入docker
执行into_docker.sh 以xxx身份进入docker环境,脚本内容:
docker exec -u xxx -it sv800_build /bin/bash
其中sv800_build对应的是docker ps指令中的NAMES,NAMES在star_docker.sh中--name参数指定。
确定是否在docker环境中,可以cat /proc/1/cgroup 是否有docker字段。也可以简单尝试是否有docker指令。