Docker 介绍和常用命令

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
相关推荐
T0uken2 分钟前
Colab:SSH 访问免费 GPU Server
运维·ssh
Python大数据分析@11 分钟前
通过 MCP 实现 AI Agent自动化数据采集
运维·人工智能·爬虫·自动化
Initialize2930833 分钟前
告警一条接一条刷屏?五步治理告警风暴
运维
帷幕落秋39 分钟前
Docker镜像加速
运维·docker
帷幕落秋1 小时前
Docker原理-理论基础
运维·docker
有毒的教程1 小时前
Linux底层存储路由配
linux·运维·网络
TTATTC1 小时前
告别开源 Agent 的本地运维折磨:拆解阿里 QoderWork 的沙盒隔离架构与三级渐进式 Skills 编排实践
docker·开源
帷幕落秋1 小时前
Docker常见命令总结
docker
程序员老赵1 小时前
Docker 部署 Redmine:轻松搭建私有化项目管理平台
docker·容器·开源
Baron X1 小时前
Eclipse Temurin 21 (JRE) Alpine 镜像获取、离线导入与推送操作
java·docker·eclipse·temurin