Docker学习笔记(2):挂载数据、进入容器内部运行指令、生成镜像

发布于 2023-12-23  292 次阅读


距离上一篇总结的文章已经过去快十个月了hhhh,好不容易抽空再写一点东西。

最近在学习Rust编程,又不想在windows上学习,毕竟linux搭建开发和运行环境都要容易得多,所以我采取的策略是在docker中运行一个ubuntu容器,然后将/home目录和我本地的一个目录进行绑定(将本地目录挂载到/home上),然后把环境装好,再生成一个名为Ubuntu_Rust的镜像。

1.挂载数据

我们可以这么理解,docker里面一般是不存放数据的,存放的都是程序,为了让容器更加灵活,开发更加方便,我们可以将一个本地目录挂载到容器里。

启动命令为:

docker run -v [本地目录]:[docker容器内目录] [镜像名]

比如我在Windows系统上,我要把F:/data/home目录挂到/home上,就只需要这样写命令:

docker run -v F:/data/home:/home ubuntu

但是你会发现这样写容器一跑起来就直接寄了,这是因为犯了一个小错误,咱们没有设置-itd参数。

docker -itd 是一个 Docker 命令行选项的组合,其中 -i、-t 和 -d 是三个单独的选项。
* -i 代表交互模式,表示保持 STDIN 打开。这通常用于保持与运行中的容器的连接。
* -t 分配一个伪终端或 TTY。这使得你可以在容器内部运行需要 TTY 的应用,例如 shell。
* -d 代表在后台运行容器。这会启动容器,但不会自动进入容器的 shell。相反,它会立即返回容器的 ID。

我们再给它设置一个名字,叫rust,注意所有参数必须放在[镜像名]的左边,不然会报错,完整命令为:

docker run -itd -v F:/data/home:/home --name rust ubuntu

2.进入容器内部运行指令

docker给我们提供了一个api去进入容器内部。

用以下命令:

docker exec -it [container ID] /bin/bash

这个命令会在给定的容器中启动 bash shell,允许你在容器内部执行命令。

随后你将以root身份进入容器(实际上是在容器中打开了shell)。

容器ID是可以简写的(写前面几个,只要能够唯一标识就ok),例如我的容器ID为:fe077b33b003,我只需要写:

docker exec -it fe /bin/bash

在容器中使用exit命令即可退出。

3.将容器打包为镜像

我进入容器内部后,把相关的环境弄好了,如果此时把容器删除了,下次重新run一个镜像,这些环境都没了,为了让这些环境更利于储存和传播,我们可以将容器打包为镜像。

用commit命令即可,很简单。

docker commit [container ID] [Image Name] 

不过我不知道Image具体存放在Windows的那个目录,只能通过命令上传到Docker hub上进行传播。

结语

感谢大家阅读~我是Eriktse,很高兴可以帮助到你。

19岁,性别未知,ACM-XCPC退役选手,CCPC全国邀请赛金牌,ICPC亚洲区域赛银牌,武汉某院校计算机科学与技术专业本科在读。
最后更新于 2023-12-23