御风灰灰
发布于 2024-08-29 / 20 阅读
0
0

Docker镜像构建及终端使用

1. 目的

为了解决各种开发环境部署麻烦,采用docker容器进行开发环境构建的一种方法。

2. 优势

  1. 解决编译环境搭建复杂,环境不一致问题。
  2. 规避虚拟机镜像大的问题。
  3. 具有环境奔溃快速恢复能力。

3 Dockfile构建

3.1 Ubuntu类镜像

  1. 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"]
  1. 启动脚本文件
#!/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

评论