1. 安装docker
sudo apt install docker.io;echo $?
2. 拉取Ubuntu 22.04的镜像
sudo docker pull ubuntu:22.04;echo $?
$ sudo docker pull ubuntu:22.04
22.04: Pulling from library/ubuntu
Digest: sha256:34fea4f31bf187bc915536831fd0afc9d214755bf700b5cdb1336c82516d154e
Status: Image is up to date for ubuntu:22.04
docker.io/library/ubuntu:22.04
3. 启动Ubuntu 22.04容器(容器内可使用gdb)
sudo docker run -itd --net host --name ubuntu22.04 --security-opt seccomp=unconfined --privileged --cap-add sys_ptrace -v `pwd`:/mnt ubuntu:22.04 /bin/bash;echo $?
$ sudo docker run -itd --net host --name ubuntu22.04 --security-opt seccomp=unconfined --privileged --cap-add sys_ptrace -v `pwd`:/mnt ubuntu:22.04 /bin/bash
0547e87a5e0c9e1a42a610caa5edcb0baa852f123818edf4262cc723f73da8f5
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0547e87a5e0c ubuntu:22.04 "/bin/bash" About a minute ago Up About a minute ubuntu22.04
4. 将终端附加到容器内
sudo docker exec -it <CONTAINER ID> /bin/bash
例如:
$ sudo docker exec -it 0547e87a5e0c9e1a42a610caa5edcb0baa852f123818edf4262cc723f73da8f5 /bin/bash
root@penghao-ThinkBook-14-G3-ITL:/#
5. 初始化开发环境
apt update -y;apt upgrade -y
apt clean -y;apt autoclean -y
apt remove --purge -y;apt autoremove --purge -y
apt install -y apt-transport-https ca-certificates vim cpio squashfs-tools
mv -v /etc/apt/sources.list /etc/apt/sources.list.default
cp -rfv /etc/apt/sources.list.default /etc/apt/sources.list.tuna
ln -s /etc/apt/sources.list.tuna /etc/apt/sources.list
echo "# The source image is commented by default to improve the speed of apt update, you can uncomment it if needed" | tee /etc/apt/sources.list.tuna; \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna; \
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse" | tee -a /etc/apt/sources.list.tuna
输入以上命令后,docker环境下的/etc/apt/sources.list文件内容如下:
# The source image is commented by default to improve the speed of apt update, you can uncomment it if needed
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
cat /etc/apt/sources.list
cat /etc/issue
apt update -y;apt upgrade -y
apt clean -y;apt autoclean -y
apt remove --purge -y;apt autoremove --purge -y
apt install -y gcc g++ make cmake gdb m4 libtool sqlite3 python2 python3 htop git git-lfs iputils-ping tree subversion
apt install -y binutils bison coreutils diffutils findutils gawk gcc-12 g++ build-essential libstdc++-9-dev \
grep gzip m4 make patch perl python3 sed texinfo xz-utils gdb wget tree htop
apt clean -y;apt autoclean -y;apt remove --purge -y;apt autoremove --purge -y
rm -rfv /bin/sh
ln -s /usr/bin/bash /bin/sh
apt clean -y;apt autoclean -y;apt remove --purge -y;apt autoremove --purge -y
6. 将容器保存为镜像
sudo docker ps -a
sudo docker image ls -a
sudo docker commit -a "ubuntu 22.04 base dev env." -m "zhangzg" <CONTAINER ID> <REPOSITORY>:<TAG>;echo $?
# sudo docker commit -a "ubuntu 22.04 base dev env." -m "ph" 3d5494f13dca387c428a45d6e451f543fbeb27a1652c557383b3d7cf56dd09d6 ubuntu:22.04-dev-1.0;echo $?
7. 启动Ubuntu 22.04-dev-1.0容器(容器内可使用gdb)
sudo docker run -itd --net host --name <CONTAINER NAME> --security-opt seccomp=unconfined --privileged --cap-add sys_ptrace -v `pwd`:/mnt ubuntu:22.04-dev-1.0 /bin/bash;echo $?
例如:
sudo docker run -itd --net host --name ubuntu22.04-dev-1.0 --security-opt seccomp=unconfined --privileged --cap-add sys_ptrace -v `pwd`:/mnt ubuntu:22.04-dev-1.0 /bin/bash;echo $?
sudo docker exec -it <CONTAINER ID> /bin/bash
例如:
sudo docker exec -it b92d002d0d2a65ff124f65a8a13d299f587ce55e1d77b539794beafb72f9b898