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" ];then
DOCKER_HOME="/root"
fi
if [ ! -d "$HOME/.cache" ];then
mkdir "$HOME/.cache"
fi
IMG="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指令。