Docker介绍
最近在做CS144的课程,由于用mac电脑不想安装虚拟机做,于是用docker做了环境配置。
概述
Docker可以理解为一个容器化平台,他是对操作系统级别的虚拟,和虚拟机类似,但他更轻量,没有像虚拟机一样虚拟化整个硬件,独占一部分内存和硬盘资源,他只是进程级别的隔离。
原因
docker出现的主要原因是各种项目的环境配置太乱了,相信大家每次想从github运行一个新项目第一步要搞定的永远都是环境问题,docker作为一个容器化平台,通过把环境打包解决这个问题。成功解决了"在我的电脑上能运行,在你的电脑上也能运行"。
容器
要理解docker就得理解两个重要概念-容器和镜像。首先是容器,容器就是一个沙盒,不同容器之间是相互隔离开的,同时本级电脑和容器之间也是隔离开的(可以通过端口转发等手段联系起来),可以理解为容器是一个项目的运行实例,或者更通俗的理解就是一个容器就是一个小的虚拟机,里面有系统,有环境配置,有项目文件,但这些都是仅支持项目运行的最轻量的配置。docker在不同机器上可以忽略环境的原因就是在不同机器上跑同一个容器,那么结果肯定是一致的(这点和JAVA的JVM类似,都是采取了一层抽象虚拟,达成不同机器上通用的结果)。
镜像
镜像可以理解为容器的快照,他一般是只读的。他就是将容器某一瞬间所有的状态保存下来,方便调用。容器的创建一定是依赖于某个镜像创建的。容器在运行时,经过不同的环境配置后也可以随时通过镜像保存下来。
使用方式
其实发现docker和git基本形式类似,都有本地仓库,远程仓库的概念,所以理解了git,使用docker就不算太难。一般要运行其他人的项目,可以采用该项目的docker镜像,这样创建的容器就不仅包括项目文件连环境配置也和项目作者相同。我这里就是直接采用了ubuntu22.04的镜像去做CS144的实验了。
Docker常见命令如下:
1.创建并启动一个容器:
bash
docker run [OPTION] IMAGE [COMMAND] ...
其中OPTION是可选择添加的配置容器的选项,常见有-it,即分配一个可交互的终端(i是interactive可交互,t是tty伪终端,)、--name 后跟要创建的容器名称,没有的话系统会默认分配以及一些后段运行服务器的命令-d(detached在后台运行,不占用终端)和-p 8080:80(publish 端口映射,将自己电脑的8080端口映射到容器内部80端口)等。
IMAGE是容器的镜像,首先从本地镜像中查找,没有的话从远程网站拉去镜像到本地再创建。
COMMAND为可添加到命令,一般在创建时想要一个可交互的客户端时会添加bash命令。
2.查看所有容器(包括停止的容器):
bash
docker ps -a
3.停止一个在后台运行的容器:
bash
docker stop container_name/id
4.重新启动一个停止的容器:
bash
docker start container_name/id
简单的启动命令只是在后台重新启动,想要让现在的终端直接就是容器内部的终端有以下方式:
bash
docker start -ai container_name/id
这里a是attach,i是interactive。
2.
bash
docker attach container_name/id
在启动之后,再采用附加的命令(将当前容器内部终端附加到当前终端上)。
3.
bash
docker exec -it container_name/id bash
这是在容器内部开启一个新进程,表现形式和上述类似,但优点是在该终端推出后只是结束了这个新进程和,容器的主进程并没有停止。
5.删除一个容器(必须先停止):
bash
docker rm container_name/id