1. 目的
为了解决各种开发环境部署麻烦,采用docker容器进行开发环境构建的一种方法。
2. 优势
- 解决编译环境搭建复杂,环境不一致问题。
- 规避虚拟机镜像大的问题。
- 具有环境奔溃快速恢复能力。
3 Dockfile构建
3.1 Ubuntu类镜像
- dockerfile 文件
FROM ubuntu:22.04
LABEL Description="openwrt dev env"
RUN apt-get install -y sudo vim rsync flex bison bc cpio binutils dosfstools bash-completion pigz lbzip2 qemu-user-static \
sshpass udev uuid-runtime zstd \
make gcc device-tree-compiler git kmod cmake cpp \
abootimg binfmt-support \
libssl-dev openssl\
libxml2-utils \
python3 python-is-python3 \
&& sed -i '36,43s/^#//' /etc/bash.bashrc \
&& echo "export CROSS_COMPILE=/opt/aarch64--glibc--stable-2022.08-1/bin/aarch64-buildroot-linux-gnu-" >> /etc/profile \
&& chmod 777 /etc/sudoers && echo "dev ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && chmod 440 /etc/sudoers \
&& echo "root:1" | chpasswd \
&& groupadd dev && useradd -g dev -G root -d /home/dev -c "dev user" -s /bin/bash -p "1" dev \
&& usermod -a -G sudo dev \
&& echo "dev:1" | chpasswd
WORKDIR /home/dev/openwrt
COPY dev_point.sh /bin
CMD ["/bin/dev_point.sh"]
- 启动脚本文件
#!/bin/bash
USERNAME=dev
CURRENT_UID=$(grep "^$USERNAME:" /etc/passwd | cut -d: -f3)
CURRENT_GID=$(grep "^$USERNAME:" /etc/group | cut -d: -f3)
if [[ "$UID" =~ ^[0-9]+$ ]] && [[ "$CURRENT_UID" -ne "$UID" ]]; then
echo "update uid:$UID"
usermod -u $UID $USERNAME
fi
if [[ "$GID" =~ ^[0-9]+$ ]] && [[ "$CURRENT_GID" -ne "$UID" ]]; then
echo "update gid:$UID"
groupmod -g $GID $USERNAME
fi
su $USERNAME
4. 终端启动脚本
主要用于快速打开交互终端,快速创建容器
docker run -it \
--rm \
--name=openwrt-dev-`logname` \
--env UID=`id -u` \
--env GID=`id -g` \
-v ./:/home/dev/openwrt \
-v /tmp:/home/dev/openwrt/dl \
-w /home/dev/openwrt \
--privileged \
image:1.0.0