Docker 是⼀个开源的应⽤容器引擎,开发者可以打包应⽤和依赖包到⼀个轻量级、可移植的容器中,然后发布到任何流⾏的 Linux机器上,能够更⾼效的利⽤系统资源、保证⼀致的运⾏环境,实现持续交付和部署,以及后期更轻松的迁移、维护、扩展。
sudo apt-get install docker.io
sudo yum install docker
sudo dnf install docker
# $name:$tag 镜像名称:标签名称
# Dockfile 基于上下⽂构建,构建⽬录必须包含Dockerfile
# $dockerfile 指定 Dockerfile 名称,默认是 PATH/Dockerfile
# $dockerfile_dir Dockerfile 所在路径是 PATH
sudo docker build -f $dockerfile -t $name:$tag $dockerfile_dir
# $imageID 镜像ID
sudo docker rmi $imageID
# $containerID 容器ID
sudo docker rm $containerID
# $imageID 镜像ID
# $name:$tag 镜像名称:标签名称
sudo docker tag $imageID $name:$tag
# $containerID 容器ID
# $name 容器名称
sudo docker rename $containerID $name
sudo docker image ls
sudo docker container ls
#运⾏ Docker 环境
# --privileged 特权模式
# -it 表⽰开启交互模式, /bin/bash 表⽰交互⽅式
# -v $host_dir:$docker_dir 将主机⽬录映射到 Docker 内
# -p $host_port:$docker_port 将主机端口映射到 Docker 内
# -u $docker_user 指定使⽤ Docker 内⽤⼾登陆
# -w $cwd_dir 切换到容器内的路径
# -d --detach 设置后台运⾏模式
#运⾏指定的镜像
sudo docker run --privileged -it -u $docker_user -v $host_dir:$docker_dir
$imageID /bin/bash
#运⾏指定的容器
sudo docker exec -it -w $cwd_dir $containerID /bin/bash
#登录 dockerhub 账号
sudo docker login -u $username -p $password
#拉取 dockerhub 镜像
sudo docker image pull $imageID
#推送镜像到 dockerhub
sudo docker image push $username/$imagename
#导出本地镜像(tar archive file)
sudo docker image save $name:$tag -o ${dockerimage.tar}
#导⼊本地镜像(tar archive file)
sudo docker image load -i ${dockerimage.tar}
#本地镜像提交修改
# -m 提交的描述信息
# -a 提交的作者
# $containerID 发⽣修改的容器ID
# $new_name:$new_tag 提交后的镜像名称标签
sudo docker commit -m $commit_message -a $author $containerID $new_name:$new_tag
#参考该⽂档提供的 Dockerfile
#假定 Dockerfile 位于 /home/docker/Dockerfile
cd /home/docker
sudo docker build -t docker_rk:latest .
#假定 SDK 位于 /home/user/SDK
#将 SDK 映射到 Docker 镜像内,并进⼊镜像内
sudo docker run --privileged -it -u rk -v /home/user/SDK:/home/rk
docker_rk:latest /bin/bash
#切换到 Docker 内的路径,编译⽅法可以通过 build.sh -h 查看
cd /home/rk
./build.sh -h
#退出 Docker 镜像后,除映射⽬录外的所有修改都不会保留,要保留相应修改需要更新 Docker 镜像
#假定本次镜像实例化的容器为 rk@ecbbcdc7e5ca:/$
#按照以下命令,更新 Docker 镜像
sudo docker commit -m "update" ecbbcdc7e5ca docker_rk:latest
6、dockerfile参考
FROM ubuntu:21.04
ENV DEBIAN_FRONTEND=noninteractive
RUN \
# use the default source,or choose the most appropriate software source,following
is an example
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-security main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-updates main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-backports main restricted universe
multiverse" \
> /etc/apt/sources.list \
&& apt-get update -y && apt-get upgrade -y \
&& apt-get install -y curl \
&& curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/bin/repo &&
chmod 755 /usr/bin/repo \
&& apt-get install -y build-essential make cmake gcc g++ gcc-multilib g++-
multilib device-tree-compiler \
binfmt-support qemu-user-static live-build chrpath diffstat fakeroot patchelf
expect texinfo flex bison \
libelf-dev libssl-dev liblz4-tool ncurses-dev libegl1-mesa libsdl1.2-dev xz-utils
debianutils iputils-ping \
vim tree net-tools bc cpio time rsync ssh gawk unzip git git-core fdisk sudo zstd
wget socat xterm strace \
python python3 python3-pip python3-pexpect python3-git python3-jinja2 python3-
crypto \
&& pip3 install pyelftools -i http://pypi.mirrors.ustc.edu.cn/simple/ --trustedhost pypi.mirrors.ustc.edu.cn \
# add user in docker
&& useradd -c 'rk user' -m -d /home/rk -s /bin/bash rk && sed -i -e '/\%sudo/ c
\%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers && usermod -a -G sudo rk \
# delete useless package and cache,reduce docker image size
&& apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
当前⽹络⽆法访问 Docker 官⽹镜像仓库,可以通过配置 Docker 国内镜像仓库,解决⽆法访问的问题, 可参考以下修改:
#在 /etc/docker/daemon.json 添加以下内容
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
(1)docker 需要内核开启 cgroups、namespace、netfilter、overlayfs 等配置⽀持,才能正常运⾏,可以通 过运⾏ /usr/share/docker.io/contrib/check-config.sh 脚本检查当前系统内核的配置是否满⾜ docker 运⾏的要 求。
(2)cgroupfs 没有挂载问题,通常发⽣在 Buildroot 系统上,需要⼿动完成 cgroupfs 系统的挂载,挂载脚 本可以参考: https://github.com/tianon/cgroupfs-mount。