docker
一、定义
Docker 是一个开源的应用容器引擎,基于
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
二、架构
Docker包括三个基本概念:
-
镜像:Docker镜像,就相当于是一个root文件系统。
-
容器:镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库:仓库可看成一个代码控制中心,用来保存镜像。
-
一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。
-
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
-
三、常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #万能命令
镜像命令
-
docker images 查看所有本地的主机上的镜像
zt@ubuntu:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, --all # 列出所有的镜像
-q, --quiet # 只显示镜像id
-
docker search 搜索镜像
# 可选项
--filter
--filter=STARS=3000 搜索出来的镜像STARS大于3000
-
docker pull 下载镜像
docker pull 镜像名(:tag(版本号))
zt@ubuntu:~$ sudo docker pull mysql
Using default tag: latest # 如果不写tag,默认版本latest
latest: Pulling from library/mysql
15115158dd02: Already exists # 分层下载,docker image的核心 联合文件系统
d733f6778b18: Already exists
1cc7a6c74a04: Already exists
c4364028a805: Already exists
82887163f0f6: Already exists
28abcb7f57e0: Already exists
46d27a431703: Already exists
8e745fe86aaf: Already exists
ab75add93486: Pull complete
09e3960383f3: Pull complete
59f780965951: Pull complete
8ead2303095c: Pull complete
Digest: sha256:b17a66b49277a68066559416cf44a185cfee538d0e16b5624781019bc716c122
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
docker pull mysql
# 等价于
docker pull docker.io/library/mysql:latest
-
docker rmi 删除镜像
docker rmi -f 镜像id #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
容器命令
有了镜像才可以创建容器
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="ANme" 容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
# 启动并进入容器
zt@ubuntu:~$ sudo docker run -it centos /bin/bash
[root@7055403b6694 /]# ls # 查看容器内的centos
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 退出容器
exit
列出容器
docker ps # 列出当前正在运行的容器
# 可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
退出容器
exit # 直接容器停止并退出
CTRL+p+q # 容器不停止退出
删除容器
docker rm # 容器id,不能删除正在运行的容器,若要强制删除 -f
docker rm $(docker ps -aq) # 删除所有容器
docker ps -a|xargs docker rm # 删除所有容器
启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码