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
相关推荐
峰顶听歌的鲸鱼1 天前
Kubernetes介绍和部署
运维·笔记·云原生·容器·kubernetes·学习方法
信创天地1 天前
自动化运维利器赋能信创:Ansible与SaltStack在国产系统的部署与批量管理实战
运维·自动化·ansible
东城绝神1 天前
《Linux运维总结:基于ARM64+X86_64架构使用docker-compose一键离线部署MySQL8.0.43 NDB Cluster容器版集群》
linux·运维·mysql·架构·高可用·ndb cluster
creator_Li1 天前
即时通讯项目--(1)环境搭建
linux·运维·ubuntu
Ka1Yan1 天前
Docker:基本概念与快速入门
运维·docker·容器
文静小土豆1 天前
Rocky Linux 二进制 安装K8S-1.35.0高可用集群
linux·运维·kubernetes
小技工丨1 天前
华为TaiShan 200 2280 ARM服务器虚拟化部署完整指南
运维·服务器·arm开发
糠帅傅蓝烧牛肉面1 天前
单实例多MCP聚合服务:两种实现方案深度对比
前端·docker·ai
403240731 天前
[Jetson/Ubuntu 22.04] 解决挂载 exFAT 硬盘报错 “unknown filesystem type“ 及只读权限问题的终极指南
linux·运维·ubuntu
零意@1 天前
debian如何把新编译的内核镜像替换原来的内核
运维·debian·更新内核版本·linux内核版本更新·debian更新内核