Docker笔记
写在开头
对于Docker到底是做什么用的,我还没有找到过一个比较通俗的回答。我的看法是Docker可以用来复制并迅速环境,比方说你想模拟一下一个古早版本的Ubuntu,还要用到古早版本的Python之类,你就可以用Docker来快速搭建,而不用折腾你的WSL了。另外它也轻量很多,比方说你可以直接运行Python,而无需安装基础的Ubuntu环境。
用Dockerfile创建镜像
通过编写Dockerfile文件,可以指明建立Docker镜像需要的资源。
- 使用Dockerfile创建镜像:
docker build -t <image>:<version> .
注意最后这个表示在当前目录寻找Dockerfile文件的点。
用镜像创建容器
docker run -it -v <original data path>:<dest data path> \
--name <name> -p 8080:8080 <image>:<version>
这里面的-v
表示将本机上的original
路径映射到Docker中的dest
路径,-p
表示端口映射。
容器建立后的操作
以下所有的<container>
既可以替换为容器的ID,也可以替换为容器的名字。
这里的ID是一个哈希码,可以通过docker ps -a
查看。
- 查看所有镜像:
docker images
- 查看所有容器:
docker ps -a
- 启动容器:
docker start <container>
- 停止容器:
docker stop <container>
- 进入启动的容器:
docker attach <container>
- 进入容器:
docker exec -it <container> /bin/bash
start与exec的区别
docker start
只能用于启动一个处于停止运行状态的容器,docker exec
只能用于进入一个已经处于运行状态的容器,同时新开一个进程。
- 删除容器:
docker rm <container>
- 删除镜像:
docker rmi <image>:<version>
镜像的导入与导出
- 导出镜像:
docker save -o <filename>.tar <image>:<version>
- 批量导出:
docker save -o <filename>.tar <image1>:<version> <image2>:<version> ...
- 批量导出:
- 导入镜像:
docker load -i <filename>.tar
Docker Compose
Todo
待补充。
附录:Docker in OSLAB
在Lab1及以后,可以通过make debug
在Docker中调试。具体流程如下:
-
在当前项目目录中执行
make debug
-
远程调试