背景
docker太好用了,把自己使用的环境打包成镜像,随用随取,也不用担心把ubuntu折腾崩掉,新世界nice!
必须记录下docker构建镜像的步骤,防止自己忘掉!神器!
使用docker commit命令构建镜像
- 首先有一个已经在使用的容器,比如基于ubuntu20.04搭建的cpp编译环境:
ubuntu_cpp
- 使用
docker commit
命令以ubuntu_cpp
容器来构建镜像,如下所示。其中,-m用于描述提交信息,-a用于描述作者。用户仓库的命名由用户名、仓库名两部分组成,例如azhen/ubuntu_cpp_image
,也可以只是用仓库名,例如:azhen/ubuntu_cpp_image
.
# 创建镜像azhen/ubuntu_cpp_image, 其中tag为1.0
docker commit -m "base line" \
-a "Azhen" \
ubuntu_cpp azhen/ubuntu_cpp_image:1.0
至此一个包含cpp编译的镜像就已经构建完毕了,后续我们就可以直接通过该镜像来创建容器进行使用。
使用docker save将镜像保存到本地
创建好镜像后,有时候需要把log本地打包发给有缘人,这时候我们需要把镜像分批压缩到本地。
# 将docker镜像分批压缩
docker save azhen/ubuntu_cpp_image:1.0 |gzip - | split -b 2500m - ubuntu_cpp_image-1.0_0604.tar.gz
推送至Docker Hub
除了使用docker save
把镜像分卷打包到本地, 还可以将镜像推送到Docker Hub,也可以很方便地共享给有缘人。需要注意的是,仓库名称(azhen/ubuntu_cpp_image
)中的用户名(azhen
)必须和Docker Hub账号的用户名保持一致,否则会推送失败。
# 登陆 Docker Hub 账号,并输入账号、密码
docker login
docker push azhen/ubuntu_cpp_image:1.0
使用docker run生成容器
#将镜像压缩分包组成azhen/ubuntu_cpp_image:1.0
镜像压缩包
cat ubuntu_cpp_image-1.0_0604.tar.gza* >> ./ubuntu_cpp_image-1.0_0604.tar.gz
挂载azhen/ubuntu_cpp_image:1.0
docker镜像
docker load -i ubuntu_cpp_image-1.0_0604.tar.gz
镜像运行启动容器,~/home/azhen/ws
需修改成自己本地项目路径
docker run --gpus all -itd --privileged --cap-add=SYS_ADMIN --device=/dev/dri -v /tmp/.X11-unix:/tmp/.X11-unix -p 7086:22 -v $HOME/.Xauthority:/root/.Xauthority -v ~/home/azhen/ws:/home/azhen/workspace -e TZ="Asia/Shanghai" -e DISPLAY=$DISPLAY --name ubuntu_cpp_image-1.0_0604 azhen/ubuntu_cpp_image:1.0 /bin/bash
如果需要图形化界面,启用X server访问权限
xhost +
以root用户进入容器(docker exec
进入容器可以使用图形界面,ssh登录不能使用图形界面)
docker exec -it ubuntu_cpp_image-1.0_0604 bash
愉快的使用吧!