# KDocker **Repository Path**: ZiKun007/kdocker ## Basic Information - **Project Name**: KDocker - **Description**: 存放自己构建的docker镜像 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-03 - **Last Updated**: 2025-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于 Docker 构建 Ubuntu 的 ZSH+CXX 环境 > Docker 学习资料:**Docker技术入门与实战** ## 1. 利用 Docker 下载基础镜像 1. 下载Ubuntu镜像,由于现在(2024年7月19日)国内很多docker镜像网站停止服务,我找了很久终于找到一个可用的docker服务 > 非常感谢仓库作者! > > [docker镜像下载(测试可用)](https://github.com/DaoCloud/public-image-mirror):https://github.com/DaoCloud/public-image-mirror 2. 下载Ubuntu镜像,并创建一个bash交互窗口 ```bash docker run -it -P m.daocloud.io/docker.io/library/ubuntu /bin/bash ``` ## 2. 构建本仓库镜像 1. 导入镜像 由于`ubunut-zshcpp.tar`超过了gitee运行上传的大小,没有办法放在仓库里面! 如果利用`Dockerfile`以及构建好了镜像,可以跳过这一步。 如果不想利用`Dockerfile`构建镜像,可以直接将`ubuntu-zshcpp.tar`文件导入,从而节省长达十多分钟的镜像构建时间,导入方法如下: ```bash docker load -i ubuntu-zshcpp.tar ``` 2. 利用`Dockerfile`构建镜像 >注意: 首先解压 `oh-my-zsh.zip` 和 `vscode-server` 文件 VSCode的相关插件配置,我本来放在`.vscode-server`文件夹中准备上传到仓库,无奈文件太大,上传失败,只能曲线救国了。 利用打开VSCode,利用`Dev Container`插件连接上正在运行的容器后,下载C++开发的相关插件到容器中,主要有以下插件: - 微软开发的C/C++插件 - CMake插件 - CMake Tools插件 - CMake Language Support插件 - clangd 插件 - CodeLLDB 插件 ```bash # 列出本地的所有镜像 docker imgaes ``` ![./images/docker_images.png](./images/docker-images.png) ```bash # 修改下载Ubuntu镜像的Tag docker tag m.daocloud.io/docker.io/library/ubuntu:latest ubuntu:base ``` **注意事项**:如果只想构建ZSH环境,按要求修改Dockerfile即可,默认会构建ZSH+CXX环境(基于Clang的CXX环境),这个镜像有点大,构建时间会要十多分钟。 ```bash # 在本项目的根目录下(Dockerfile所在的目录)构建镜像 docker build -t ubuntu:zshcpp . ``` ## 3. 使用镜像,运行容器 1. 不挂载卷直接运行容器: ```bash docker run -it --name ucpp ubuntu:zshcpp ``` 不挂载卷,就无法将容器运行产生的数据持久化到本机磁盘上,一旦容器被删除,容器数据都会丢失。容器暂停和关闭不会丢失数据。 但是可以将容器产生的数据复制到本机上: ```bash # 将<容器文件夹路径>的内容复制到<本机文件夹路径>下 docker cp <容器ID>:<容器文件夹路径> <本机文件夹路径> ``` 2. 挂载卷运行: 挂载卷之后,当容器运行时,容器产生的数据会持久化到本机磁盘上,即使容器被删除,本机上的数据也不会丢失。容器上在卷中写的数据会立刻同步到本机的卷中。 ```bash # 将<本机文件夹绝对路径>挂载到<容器文件夹绝对路径> docker run -it --name ucpp -v <本机文件夹绝对路径>:<容器文件夹绝对路径> ubuntu:zshcpp ``` ## 4. 在VSCode中运行容器 1. 首先运行运行容器 2. 在本机的VSCode中安装插件:Dev Containers 3. 点击VSCode左下角的 Dev Containers 图标 ![images](./images/devCont1.png) 3. 选择**附加到正在运行的容器** ![images](./images/devCont2.png) 4. 最终的效果 ![alt text](./images/image.png) ## 5. 测试 ```bash # 打开容器的一个文件夹,比如Code,进入Code # 将一个C++项目结构模板拉取到当前目录下 git clone --depth 1 --branch cppu https://gitee.com/kunwhu/kuntemplate.git ./ ``` 按照 `README.md` 所描述的,运行和调试项目中的一个demo程序。