docker打包物理机linux的系统环境

打包物理镜像

  1. 打包系统文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    yum clean all  # apt clean
    # rm -rf /tmp/* /var/tmp/*

    # --numeric-owner:保留文件权限和所有者(重要!)
    # --exclude:排除 /proc, /sys, /dev, /run, /boot 等特殊目录(Docker 会自动生成)
    # 排除所有 Docker 相关文件(避免冲突或冗余数据)
    # /var/lib/docker # 排除 Docker 存储目录
    # /var/run/docker.sock # 排除 Docker 套接字
    # /usr/bin/docker # 排除 Docker 二进制文件
    # /usr/bin/dockerd # 排除 Docker 守护进程
    # /usr/bin/containerd # 排除 Containerd
    # /usr/bin/ctr # 排除 Containerd CLI
    # 排除其它用户数据或无关紧要的目录:/opt/apps ~ /var/lib/mysql
    tar --numeric-owner \
    --exclude=/proc \
    --exclude=/sys \
    --exclude=/dev \
    --exclude=/run \
    --exclude=/boot \
    --exclude=/var/lib/docker \
    --exclude=/var/run/docker.sock \
    --exclude=/usr/bin/docker \
    --exclude=/usr/bin/dockerd \
    --exclude=/usr/bin/containerd \
    --exclude=/usr/bin/ctr \
    --exclude=/opt/apps \
    --exclude=/home/algo \
    --exclude=mnt/disk1/data \
    --exclude=/mnt/disk1/log \
    --exclude=/tmp \
    --exclude=/var/log \
    --exclude=/var/cache \
    --exclude=/var/lib/mysql \
    -cvpf rootfs.tar /
  2. 导入为 Docker 镜像

    1
    cat rootfs.tar | docker import - alibaba3:raw
  3. 基于基础镜像生成新的目标镜像(可选)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FROM alibaba3:raw

    #RUN groupadd -r algo && useradd -r -g algo algo
    #RUN groupmod -g 1021 algo && usermod -u 1021 -g 1021 algo
    RUN echo "algo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

    RUN mkdir /tmp && chmod 777 /tmp

    WORKDIR /home/algo
    RUN chown -R algo:algo /home/algo
    RUN mkdir -p /mnt/disk1/jindosdk/tmp && chown -R algo:algo /mnt/disk1/jindosdk
    USER algo
1
docker build . -t alibaba3:base
  1. 使用镜像
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker run -d --restart unless-stopped \
    --name="jupyterlab" \
    --network=host \
    --cpus='8.0' --memory='30g' \
    -e TZ=Asia/Shanghai \
    -v /mnt/disk1/data:/mnt/disk1/data \
    -v /home/algo/.conda:/home/algo/.conda \
    -v /home/algo/.ipython:/home/algo/.ipython \
    -v /mnt/disk1/data/scripts/.jupyter4docker/opt/apps:/opt/apps \
    -it alibaba3:base \
    bash /mnt/disk1/data/scripts/start.sh

参考资料