Docker安装及基本使用

news/2024/12/21 2:29:39/

介绍

Docker于2013年首次发布,由Docker, Inc开发。‌‌Docker是一种用于构建、发布及运行应用程序的开源项目,它基于操作系统层级的虚拟化技术,将软件与其依赖项打包为容器‌。Docker的核心概念是“容器”(Container),容器是一个轻量级的、可移植的软件打包技术,包含了应用运行所需的所有依赖库、配置文件和服务,它类似于虚拟机,但更加轻量,启动速度更快,占用资源更少。

为什么使用?
Docker能够帮助开发者在轻量级容器中自动部署应用程序,并使得不同容器中的应用程序彼此隔离,高效工作。
Docker容器与宿主系统共享内核,不像虚拟机需要完整的操作系统,从而提高了效率。
使用Docker,开发者可以打包、分发和运行应用程序及其依赖环境,而无需担心环境配置问题。

Docker的版本:
Docker CE(Community Edition)‌: 这是Docker的开源版本,免费,适合个人开发者和小型团队使用。它包括Docker Engine、Docker CLI、Docker Compose和Docker Swarm等组件‌。
Docker EE(Enterprise Edition)‌: 这是收费的商业版本,为企业用户提供更多功能和支持,如安全扫描、镜像管理和多主机容器编排等。EE版本分为Basic、Standard和Advanced三个版本,提供不同的功能和支持级别‌。
Docker Desktop‌: 这是一个适用于Windows和macOS的桌面应用程序,提供图形界面管理Docker容器,并包含Docker Engine和Docker CLI‌。

Docker安装

提示:在安装之前首先得保证我们的虚拟机CentOS7的yum源已经更新,因为今年的6月份CentOS已经停止对7的维护了,所以要先把yum源改成国内的;这里可以参考我的博客——更换yum源:CentOS7安装及静态IP配置与yum源更换

1.卸载旧版本
如果系统中之前安装过docker的,就先把旧版本删除

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinux 

2.安装yum-utils

yum install -y yum-utils device-mapper-persistent-data lvm2

3.配置Docker的yum源

#将docker-ce仓库地址添加到YUM的仓库列表中,以便能够安装或更新那些不在默认仓库中的软件包。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#查找/etc/yum.repos.d/docker-ce.repo文件中所有的download.docker.com字符串,并将其替换为mirrors.aliyun.com/docker-ce
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

4.更新yum建立缓存

yum makecache

5.安装docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6.启动和校验

# 查看docker版本
docker -v
# 设置开机自启
systemctl enable docker
# 启动Docker
systemctl start docker
# 执行docker images命令,如果不报错,说明安装启动成功
docker images

7.配置镜像加速

# 创建目录
mkdir -p /etc/docker
# 添加国内镜像加速地址
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF# 重新加载配置
systemctl daemon-reload# 重启Docker
systemctl restart docker

Docker的基本使用

1.常用命令

docker image pull

  • 别名: docker pull
  • 描述:docker仓库中拉去镜像
  • 用法: docker image pull [选项] 镜像名[:版本]
  • 选项
选项默认描述
-a, --all-tags下载存储库中所有标记的镜像
–disable-content-trusttrue跳过镜像验证
–platform如果服务器支持多平台,则设置平台
-q, --quiet禁止详细输出
  • 执行命令后的结果解释:
docker pull mysql	#默认不指定的话就是拉去最新的版本
latest: Pulling from library/mysql #拉取的消息
2c0a233485c3: Pull complete #pull complete表示拉取完成
cb5a6a8519b2: Pull complete
570d30cf82c5: Pull complete
a841bff36f3c: Pull complete
80ba30c57782: Pull complete
5e49e1f26961: Pull complete
ced670fc7f1c: Pull complete
0b9dc7ad7f03: Pull complete
cd0d5df9937b: Pull complete
1f87d67b89c6: Pull complete
Digest: sha256:0255b469f0135a0236d672d60e3154ae2f4538b146744966d96440318cc822c6
#Digest是摘要信息这里显示的是sha256的镜像ID
Status: Downloaded newer image for mysql:latest
#拉取结果状态,此处表示拉取的是最新的mysql
8a1c151b30b759efffd9c044fd562f4779988324531e4c1981590df82fa9be3b

docker image rm

  • 别名: docker image rm | docker image remove | docker rmi
  • 描述: 移除一个或多个镜像
  • 用法: docker rmi [选项] 镜像1 [镜像2 镜像3…]
  • 选项
选项描述
-f, --force强制删除镜像

docker rm

选项描述
-f, --force强制删除运行中的容器
-l, --link删除指定的连接
-v, --volumes删除与容器关联的匿名卷

docker images

  • 别名: docker image remove | docker rmi
  • 描述: 列出图像
  • 用法: docker image ls [选项] [存储库[:版本]]
    • 选项
选项描述
-a, --all显示所有镜像,包括中间层镜像(即构建过程中产生的临时镜像)
–digests显示摘要
-f, --filter根据提供的条件过滤输出,详细见:Docker images --filter
–format使用自定义模板格式化输出:table、table TEMPLATE、json、TEMPLATE;请参阅docker images --format
–no-trunc不要截断输出
-q, --quiet仅显示镜像的D
–tree以树状的形式显示镜像

docker run

  • 别名: docker run
  • 描述: 创建并运行一个容器
  • 用法: docker container run [选项] 镜像 [命令] [传递给命令的参数…]
    • 选项
选项描述
-d, --detach后台运行容器并打印容器ID
–name容器指定名称
–network指定容器连接的网络
-v, --volume绑定安装卷
-p, --publish容器的端口发布到主机
-P, --publish-all将所有暴露的端口发布到随机端口

docker container start

docker container stop

docker container restart

docker container ls

选项描述
-a, --all显示所有容器(默认显示正在运行)
-f, --filter根据提供的条件过滤输出
–format使用自定义模板格式化输出
-s, --size显示文件总大小
更多选项docker ps选项

docker container exec

  • 别名: docker container list | docker container ps | docker ps
  • 描述: 在正在运行的容器中执行命令
  • 用法: docker container exec [选项] 容器 命令 [传给命令的参数…]
    • 选项: 具体的选项参考:docker exec的选项

其他命令见:docker命令官方文档

2.命令演示

这里通过拉取nginx做为常用命令的一个演示

# 拉取Nginx镜像
docker pull nginx# 查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB# 创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx# 查看运行中容器
docker ps
# 也可以加格式化方式访问,格式会更加清爽
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 访问网页,地址:http://虚拟机地址,如果报错无法访问,就把防火墙关闭,或者开放相对应的端口# 停止容器
docker stop nginx# 查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 再次启动nginx容器
docker start nginx# 再次查看容器
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"# 进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL,待出现Enter password:字眼时输入密码即可进入容器内的mysql
docker exec -it mysql mysql -uroot -p# 删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

注意: 默认情况下,每次重启虚拟机我们都需要手动启动Docker和Docker中的容器,可以通过以下命令实现开机自启动:

# Docker开机自启 systemctl enable docker
# Docker容器开机自启 docker update --restart=always [容器名/容器id]

数据卷

容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。
可预见的问题:

  1. 想要升级mysql的版本,要删除旧的容器容器内的数据怎么办?一起删除?
  2. 自己容器运行后,想要修改配置文件怎么办?
  3. 想让Nginx代理自己的静态资源的时候怎么办?

数据卷介绍:
Docker 数据卷(Volume)是 Docker 中用于持久化存储和共享数据的重要机制。数据卷可以绕过容器文件系统的 Union File System,提供了一种方便的机制来管理应用程序数据。
特性:

  • 持久化: 数据卷中的数据在容器删除后仍然存在。
  • 共享: 多个容器可以共享同一个数据卷。
  • 管理: 数据卷可以通过 Docker CLI 或 API 进行管理。

1.数据卷命令

命令说明
docker volume create创建数据卷,详细说明见:docker volume create
docker volume ls查看所有数据卷,详细说明见:docker volume ls
docker volume rm删除指定数据卷,详细说明见:docker volume rm
docker volume inspect查看某个数据卷的详情,详细说明见:docker volume inspect
docker volume prune清除数据卷,详细说明见:docker volume prune

注意: 容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。

2.数据卷挂载

默认的存放所有容器数据卷的目录:/var/lib/docker/volumes,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data。
挂载的语法:
1.挂载在宿主机默认的数据卷目录

docker run -d --name 容器-p 宿主机的端口:应用端口  -v 数据卷:容器内被挂载的目录|文件 应用

2.挂载在本地目录或文件
可以发现,数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载,挂载语法与数据卷类似,例如:

-v mysql:/var/lib/mysql #如果不加./或者/路径的话就会被识别成数据卷
-v ./mysql:/var/lib/mysql #./为在挂载在当前目录下的mysql目录,如果运行时不存在会自动创建

数据卷挂载演示
此处以nginx为例子演示挂载数据卷
如果要挂载的容器具体路径不知道,可以在https://hub.docker.com/中搜索对应的应用,它会有说明,比如直接搜索Nginx,他就会出现Nginx相关的说明
在这里插入图片描述
来到nginx这一项的页面后往下面滑就是Nginx相关的一些说明
在这里插入图片描述

#创建容器并指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
#查看数据卷
docker volume ls
#查看数据卷的结果
DRIVER    VOLUME NAME
local     39163b69dad792b461a0dc6253c809f92fda0865bad63c6925fb403b6bb15323
local     html
#查看数据卷详情
docker volume inspect html
#结果
[{"CreatedAt": "2024-12-18T17:27:46+08:00",	#创建的时间"Driver": "local", #卷的驱动类型,这里指的是本地"Labels": null, #卷标签"Mountpoint": "/var/lib/docker/volumes/html/_data",	#卷挂载的位置"Name": "html",	#卷的名称"Options": null, #卷选项"Scope": "local" #卷作用域}
]

对比卷的内容和容器内被挂载的内容

#进入nginx容器里面查看 /usr/share/nginx/html 看到底有写什么东西
#进入nginx容器
docker exec -it nginx bash
#进入/usr/share/nginx/html路径
cd /usr/share/nginx/html/
ls
#ls输出结果
50x.html  index.html
#查看宿主机卷里面有什么
#用exit退出nginx容器
exit
#进入nginx挂载的卷:/var/lib/docker/volumes/html/_data/
cd /var/lib/docker/volumes/html/_data/
ls
#输出的结果
50x.html  index.html

可以看到容器内的内容和被数据卷里面的内容一样

尝试在宿主机的卷上修改内容是否能够同步到容器里面去

#进入宿主机的卷
cd /var/lib/docker/volumes/html/_data/
#编辑nginx的欢迎页面
vim index.html
#在index.html的页面中h1下新增一个h2标签
#修改后的index.html文件
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<h2>hello docker volume</h2> #新增后wq保存
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

然后在浏览器访问一下
在这里插入图片描述
再次进入容器里面查看index.html是否跟宿主机上的一样

docker exec -it nginx bash
cd /usr/share/nginx/html/
cat index.html

在这里插入图片描述
可以看到宿主机和容器里面的index.html是一样的
**拓展:**有些应用默认创建容器的时候如果没有指定挂载的话会自动创建一个匿名卷,比如:mysql,匿名卷就是由一串hash组成的目录在宿主机,如下图:
在这里插入图片描述


http://www.ppmy.cn/news/1556797.html

相关文章

长沙家具叠影床,让生活浸染自由浪漫

在繁华都市的喧嚣中&#xff0c;长沙铂乐家具叠影床宛如一方宁静的港湾&#xff0c;悄然静卧于家居空间。它以独特的设计语言&#xff0c;诉说着自由与浪漫的故事。 汲取世间万物之美&#xff0c;实现人与家具的美好互动&#xff0c;铂乐家具叠影床以光影交错为灵感&#xff0…

el-tree组件的父节点半选中状态—(选中和不选中的区别)

一.不选中父节点 回显数据需要在el-tree组件添加default-checked-keys属性 <template><div><el-button type"primary" click"handleShowData">回显数据</el-button><el-tree :props"{ children: children, label: name …

图的基本概念|存储

图的基本概念 图的定义 图G由顶点集V和边集E组成&#xff0c;记为G&#xff08;V&#xff0c;E) 其中V(G)表示图G中顶点的有限非空集&#xff1b;E&#xff08;G)表示图G中顶点之间的关系&#xff08;边&#xff09;集合。 若V{ v 1 , v 2 , … , v n v_{1},v_{2},\dots,v_{n…

Linux下调试工具:gdb

Windows和Linux下的调试有区别吗&#xff1f; 调试思路上一定是一样的&#xff1b;调试的操作方式有差别(Linux命令行调试&#xff0c;Windows窗口) 1.准备工作&#xff1a; 默认情况下&#xff0c;gdb无法进行对现在发布的程序进行调试(debug / release)。在Linux下用gcc编译…

repmgr集群部署-PostgreSQL高可用保证

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

Kaggler日志--Day9

进度24/12/18 昨日复盘&#xff1a; 补充并解决Day7Kaggler日志–Day7统计的部分问题 今日进度&#xff1a; 继续完成Day8Kaggler日志–Day8统计问题的解答 明日规划&#xff1a; 今天报名了Regression with an Insurance Dataset算是新手村练习比赛&#xff0c;截止时间是2…

clearvoice 语音降噪、语音分离库

参看: https://github.com/modelscope/ClearerVoice-Studio/tree/main ClearVoice 提供了一个统一的推理平台,用于语音增强、语音分离以及视听目标说话人提取。 代码参看: https://github.com/modelscope/ClearerVoice-Studio/tree/main/clearvoice https://github.com/mode…

【Elasticsearch】使用阿里云 infererence API 及 semantic text 进行向量搜索

原作者&#xff1a;Elastic布道师 刘晓国 在之前的文章 “Elasticsearch 开放推理 API 新增阿里云 AI 搜索支持”&#xff0c;它详细描述了如何使用 Elastic inference API 来针对阿里的密集向量模型&#xff0c;稀疏向量模型&#xff0c; 重新排名及 completion 进行展示。在…