当前位置: 首页 > article >正文

docker基础命令入门、镜像、运行容器、操作容器

一. Docker 基础入门相关命令

1.1 启动Docker

1.2 查看 Docker 运行状态

1.3 停止 Dokcer

 1.4 重启Docker

1.5 配置开机启动 docker

 1.6 查看 docker 所有命令

二. Docker 镜像相关命令

2.1 docker search 镜像名称——(查询某个镜像)

2.2 docker pull 镜像名称:version——拉取指定版本镜像

2.3 docker images——列出当前主机上所有镜像

2.4 docker rmi 镜像ID——删除镜像

三. dockers 运行容器相关命令(包含各种组件)

3.1 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器命令

3.2 docker 部署 MySQL

3.3 docker 部署 Redis

3.4 docker 部署 RabbitMQ

3.5 docker 运行 nginx

3.6 docker 运行 nacos

3.7 docker 运行 minio

四. docker 容器常用命令

4.1 docker ps 查看正在运行的镜像列表

4.2 docker ps -al 查看所有镜像(运行中的和已停止的)

4.3 docker stop "容器ID/容器名称" 停止容器

4.4 docker restart "容器ID/容器名称" 重启容器

4.5 docker rm "容器ID/容器名称" 删除镜像

4.6 docker kill "强制停止容器"

4.7 docker system df 查看所有镜像容器所占空间

五. Docker 虚悬镜像是什么?

六. 收尾

一. Docker 基础入门相关命令
1.1 启动Docker

systemctl start docker

如下,在 Linux 操作系统中,只要没有报错就代表启动成功

1.2 查看 Docker 运行状态

刚才启动成功,查看一下运行状态,如下所示,Active为running表示正在运行中

可以看到 Active (running) 表示正在运行中; 

1.3 停止 Dokcer

在停止之后,它给了一个警告 "Stopping docker.service, but it can still be activated by:
  docker.socket"

翻译过来就是 "停止docker.service,但它仍然可以由docker.socket激活"。

查看状态,此时docker已经停止,处于 dead 死亡状态。

 1.4 重启Docker

重启 docker,命令与启动docker相似,加了一个前缀 "re",只要没有报错就代表重启成功,在查询一下状态,也显示正在运行中

1.5 配置开机启动 docker

运行这个命令之后,以后只要你启动了 Linux 服务器,Doker就会跟着启动,不需要每次都使用上面的启动命令

 1.6 查看 docker 所有命令

运行该命令,docker会给我们返回所有可执行命令,后面还有它的英文解释,大多也都不常用,同学们可以用到哪个查哪个。

这里有几个重要的命令我们下面都会说到;

二. Docker 镜像相关命令
2.1 docker search 镜像名称——(查询某个镜像)

 如下,我运行此命令查询 nginx 镜像都有哪些,返回了一大堆

如果有同学觉得比较多,我们可以在 search 后面加后缀 --limit N 显示几个,如下 --limit 5 表示显示排行榜前5个。

最上面的NAME,DESCRIPT,STARTS,OFFICIAL,AUTOMATED是参数,这些参数的含义如下图中所示,一般情况下选择第一个镜像就可以了,第一个通常是官方镜像。

2.2 docker pull 镜像名称:version——拉取指定版本镜像

可以看到我在后面加上了[:tag],这个是版本号的意思,因为同一个镜像也许会有多种不同的版本,如果你加,默认就是给你拉取 latest最新版的,这一点要记住哦!

如下所示,我拉取 redis 镜像,它默认就是下载的最新的。

2.3 docker images——列出当前主机上所有镜像

刚才我已经拉取了一个 redis 镜像,下面我们使用这个命令查看一下,可以看到已经查询到了

TAG:镜像版本,latest 表示最新版本;

IMAGE ID:镜像ID;

SIZE:镜像大小;

2.4 docker rmi 镜像ID——删除镜像

我将刚才拉取下来的 redis 镜像再删除,然后 docker images 重新查看,可以看到,此时已经没有镜像了,redis 镜像已经没有了。

此外,后面的镜像ID可以写多个,表示删除多个。

最重要的一点!!!如果镜像已经运行生成容器,是不可以直接删除的,必须

三. dockers 运行容器相关命令(包含各种组件)
3.1 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 运行容器命令

Docker 运行容器的命令是 docker run。这个命令用于从指定的镜像创建并启动一个新的容器。

其中,OPTIONS 是一些可选参数,IMAGE 是你想要运行的 Docker 镜像的名称或 ID,COMMAND 和 ARG 是传递给容器内部命令的参数。

以下是一些常用的 docker run 选项:

  • -d 或 --detach:在后台运行容器并返回容器 ID。
  • -p 或 --publish:将容器的端口映射到主机端口,格式为 主机端口:容器端口
  • --name:为容器指定一个名称。
  • -e 或 --env:设置环境变量。
  • -it:以交互模式运行容器,并分配一个伪终端。

3.2 docker 部署 MySQL

a. 拉取镜像,不写版本默认拉取最新版;

b. 查看是否拉取成功;

可以看到此时已经存在 redis 镜像,latest 最新版 

b. 运行下方命令,生成 docker 容器

注意,这里我 Linux 装了 MySQL,所以作为区分,docker 运行的 MySQL 端口为设置为 13306 呢,小伙伴可以自行设置其他端口,不要和已经安装的 MySQL 冲突即可!!!

-d表示在后台运行容器。容器将在后台运行,并且不会占用你的终端。
--restart=always设置了容器的重启策略。always 表示无论容器的退出状态如何,Docker 都会尝试自动重启容器。
--name mysql为容器指定了一个名称。在这个例子中,容器的名称是 mysql
-p 13306:3306

将容器的端口映射到宿主机。在这个例子中,容器的 3306 端口被映射到宿主机的 13306 端口。

这意味着你可以通过访问宿主机的 13306 端口来访问 MySQL 容器。

-e MYSQL_ROOT_PASSWORD=123456

设置了 MySQL 的 root 用户的密码。

这里我设置为123456

-e MYSQL_DATABASE=mydatabase

创建了一个新的数据库。

这里我新数据的名称为"mydatabase"

-e MYSQL_USER=normaluser

创建了一个新的用户。

我们知道数据库除了 ROOT 跟用户,还有普通用户,这里创不创建都可以;

-e MYSQL_PASSWORD=123456对应上方新建用户的密码
mysql:latest

指要运行的镜像的名称和标签(版本)。

在这里为 mysql ,版本为 latest 最新版;

c. 运行完毕命令如下所示,出现一串字符表示容器运行成功,为生成的容器ID。

docker ps 命令展示一下

d.  成功之后,我们打开 navicat 连接工具,

这里着重强调!!!

如果小伙伴们在虚拟机完成,请开放对应端口或直接关闭防火墙(systemctl stop firewalld);

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接!!!

然后输入IP:1.94.33.249 (换成自己的IP)

输入端口:13306  (换成自己设置的端口)

输入根用户:root  

输入密码:123456   (换成自己设置的密码)

测试连接成功!!!

3.3 docker 部署 Redis

a. 拉取 redis 镜像,不写版本默认拉取最新版本;

b. 查看镜像

查看,可以看到 redis 镜像已经被拉取到,latest 最新版 

c. 运行下方命令,即可生成 redis 容器

注意,我 Linux 上已经安装了 Redis ,这里为了跟已经存在的 redis 做区分,暴漏端口设置为 16379,小伙伴可以自行设置其他端口,不要和已经安装的 redis 冲突即可!!!

-d表示在后台运行容器。容器将在后台运行,并且不会占用你的终端;
--restart=always表示无论容器的退出状态如何,Docker 都会尝试自动重启容器。这意味着,如果容器因为某种原因停止运行,Docker 会自动尝试重新启动它。
--name redis为容器指定了一个名称。后需要我们就可以通过容器名称操作容器,可以不使用容器ID;
-p 16379:6379redis容器内部运行 redis 的 6379 端口被映射到宿主机的 16379 端口。当我们需要访问 redis 时,只需要访问服务器 16379 端口,它就会自动映射到 redis 容器内部的 6379 端口;
redis

指代我们希望运行的镜像的名称。

跟上面MySQL一样,不写默认给你 latest 最新版哦

--requirepass 123456表示设置 redis 容器的访问密码为 123456,如果不配置此项,则默认容器访问没有密码

d. 运行上述命令,如下图所示,运行成功!

e. 成功之后,我们打开连接工具

这里着重强调!!!

如果小伙伴们在虚拟机完成,请开放对应端口或直接关闭防火墙(systemctl stop firewalld);

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接或连接失败!!!

然后输入IP:1.94.33.249 (换成自己的电脑IP)

输入端口:16379   (换成自己设置的端口)

输入密码:123456   (换成自己设置的密码)

测试链接,显示连接成功!!!

3.4 docker 部署 RabbitMQ

a. 拉取 rabbitmq 镜像,拉取 manamgement 版本,因为我们后续需要访问控制台;

b. 查看是否拉取成功

可以看到此时 rabbitmq 镜像已经拉取成功! 

c. 运行下方命令,生成 RabbitMQ 容器,账号密码默认为 "guest",就不额外配置了;

注意,这里我 Linux 没有安装 RabbitMQ,使用默认端口 5672,控制台使用端口15672;

如果小伙伴们有自行下载 RabbitMQ,请区分设置其它端口哦,避免端口冲突占用问题出现;

-d表示在后台运行容器。容器将在后台运行,并且不会占用你的终端。
--name rabbitmq为容器指定了一个名称。在这个例子中,容器的名称是 rabbitmq
-p 5672:5672 -p 15672:15672

将容器的端口映射到宿主机。

容器的 5672 端口被映射到宿主机的 5672 端口;容器的 15672 端口被映射到宿主机的 15672 端口。

这意味着我们可以通过访问宿主机的 5672 端口来访问 RabbitMQ 的 AMQP 协议,通过访问宿主机的 15672 端口来访问 RabbitMQ 的管理界面。

rabbitmq:management

要运行的镜像的名称和标签。

因为我们待会需要访问 RabbitMQ 的管理面板,所以这里我们版本使用 "management"

d. 运行上述命令,如下图所示,运行成功!

e. 运行成功之后

这里着重强调!!!

如果小伙伴们在虚拟机完成,请开放对应端口或直接官方防火墙;

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接或连接失败!!!

我们尝试去访问 RabbitMQ 的控制台;打开浏览器输入IP+端口——1.94.33.249:15672,就会出现下方登陆界面,

f. 我们没有额外设置密码,默认账号密码都为"guest",输入完直接 Login,可以看到已经成功登录访问到了 RabbitMQ 的管理面板!!!

3.5 docker 运行 nginx

a. 拉取 nginx 镜像

b. 查看拉取的镜像

c. 可以看到,nginx 镜像已经存在,latest 为最新版

d. 运行下方命令,生成 nginx 容器

还是那句话,端口占用不要冲突!!!否则可能会运行失败!

-d表示在后台运行容器。容器将在后台运行,并且不会占用你的终端
--name nginx为容器指定了一个名称。这里直接叫作 nginx
-p 8090:80设置 nginx 容器内部运行于 80 端口,但映射于服务器的 8090 端口,我们可以通过 8090 端口访问到 nginx 服务
nginx:latest指定运行的镜像名称为 nginx,运行的版本为 latest 最新版

e. 查看是否运行成功

可以看到状态 up,已经运行成功

f. 尝试访问 nginx 页面

这里着重强调!!!

如果小伙伴们在虚拟机完成,请开放对应端口或直接关闭防火墙(systemctl stop firewalld);

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接或连接失败!!!

这里我们直接在浏览器输入"IP:端口"即可访问 nginx 服务,

如下图所示,直接访问 1.94.33.249:8090 端口,出现如下页面,就说明我们的 nginx 服务已经部署成功啦!!!

同学们也可以对着自己的 IP+端口 进行访问哦!

3.6 docker 运行 nacos 

a. 拉取 nacos 镜像

b. 查看拉取的镜像

 可以看到 nacos 镜像已经被成功拉取

c. 运行下方命令,生成 nginx 容器

-e MODE=standlone

指定了 Nacos 服务器的运行模式。

standlone 表示但单机模式;

cluster 表示集群模式;

通常微服务项目中,nacos 会采用集群的方式进行部署防止服务器宕机,但我们这里只是个人测试,使用单机模式启动即可;

-e SPRING_DATASOURCE_PLATFORM=mysql

指定了 Nacos 服务器使用的数据库类型。

nacos 服务启动是需要依赖数据库的,这里我们就使用 MySQL 就行,SQL server 或Oracle 也是可以的;

-e MYSQL_SERVICE_HOST=1.94.33.249

指定了 MySQL 数据库的主机地址。

我这里设置为自己的 1.94.33.249

-e MYSQL_SERVICE_PORT=3306配置的 MySQL 数据库的端口;
-e MYSQL_SERVICE_USER=root配置的 MySQL 数据库的用户名;
-e MYSQL_SERVICE_PASSWORD=123456配置的 MySQL 数据库的密码;
-e MYSQL_SERVICE_DB_NAME=nacos配置的 MySQL 数据库中 nacos 启动需要使用到的表所在的数据库名称
-e TIME_ZONE='Asia/Shanghai'指定了 Nacos 服务器的时区。在这个例子中,时区被设置为 Asia/Shanghai,即上海时区

d. 查看容器是否已成功运行

此时可以看到 nacos 已经成功运行; 

e. 访问 nacos 控制台

如果小伙伴们在虚拟机完成,请开放对应端口或直接关闭防火墙(systemctl stop firewalld);

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接或连接失败!!!

输入 IP:端口/nacos 访问该网站,我这里是 1.94.33.249:8848/nacos

账号密码默认均为 "nacso",如果自己在运行容器时额外设置,则填写自己设置的账号和密码;

如下图所示,成功进入 nacos 控制台,到此部署成功!!!

3.7 docker 运行 minio

a. 拉取 minio 镜像

b.  查看是否拉取成功

如下图所示,表示拉去成功 

c. 运行 minio 生成 镜像

d. 查看生成的镜像

如下图所示,minio 已经处于运行状态啦!

由于我的云服务器只有两个G运行内存,在测试的过程中由于开容器的太多直接服务器卡死机了。

我只能说绝了,所以这里我就把其他的容器全都停止了,这里同学们知道就好;

e. 测试登录 minio 控制台

跟之前一样:

如果小伙伴们在虚拟机完成,请开放对应端口或直接关闭防火墙(systemctl stop firewalld);

如果在云服务器完成,请开启安全组端口,一定一定一定要做!!!否则会拒绝连接或连接失败!!!

然后我们打开浏览器,输入 "IP:端口/login" 登陆界面,如下图所示,

然后我们输入用户名和密码,运行时已经均设置为 "minioadmin",然后登陆,如下图所示就成功地进入到了控制台页面;

然后点击进入 "Buckets",点击 "Create Bucket" 就可以创建存储文件的 "桶" 了

四. docker 容器常用命令
4.1 docker ps 查看正在运行的镜像列表

 如下图,接着上面的,现在只有一个 minio 容器处于运行状态;

4.2 docker ps -al 查看所有镜像(运行中的和已停止的)

如下图,显示出了所有的容器,我黄线圈出来的 "minio" 容器,STATUS 状态显示 "Up" ,表示当前容器处于运行状态,其它则处于停止状态;

4.3 docker stop "容器ID/容器名称" 停止容器

如下图,第一次 "docker ps" 显示当前 minio 处于运行状态,

然后 "docker stop minio" 停止 minio 容器;

再次 "docker ps" 查看可以看到 minio 也停止了,当前没有容器处于运行状态;

4.4 docker restart "容器ID/容器名称" 重启容器

接着刚才的图片,"docker restart minio" 重新启动 minio 容器,

此时再次 "docker ps" 查看,发现 minio 容器又处于运行状态了,已经被重新启动;

4.5 docker rm "容器ID/容器名称" 删除镜像

注意正在运行的容器无法删除,需要先 stop 停止而后才可以删除,

如下所示,我尝试删除 minio 容器。

爆出 Error,说 "minio 容器处于运行状态,不能删除,请在删除之前先停止"

4.6 docker kill "强制停止容器"

强制删除容器,对比于 "docker stop",该命令会更强硬,通常情况下,执行docker stop,这个命令会发送一个 SIGTERM 信号给容器,然后等待容器停止。默认情况下,Docker 会等待 10 秒钟,然后发送一个 SIGKILL 信号强制停止容器。这意味着容器有足够的时间来清理和保存其状态,然后优雅地停止。

而 "docker kill" 命令会立即发送一个 SIGKILL 信号给容器,强制停止容器。这个命令不会等待容器停止,也不会发送 SIGTERM 信号。这意味着容器没有足够的时间来清理和保存其状态,可能会丢失数据。

因此不建议使用此命令,使用 "docker stop" 即可。

4.7 docker system df 查看所有镜像容器所占空间

如下图所示,会展示当前所有容器、镜像的状态、所占资源等。 

  • TYPE:这是 Docker 使用的资源类型。可能的值包括 Images(镜像)、Containers(容器)、Local Volumes(本地卷)和 Build Cache(构建缓存)。

  • TOTAL:这是 Docker 使用的资源总数。例如,Images 字段表示 Docker 中镜像的总数。

  • ACTIVE:这是 Docker 当前正在使用的资源数量。例如,Containers 字段表示 Docker 中正在运行的容器数量。

  • SIZE:这是 Docker 使用的资源的大小。例如,Images 字段表示 Docker 中所有镜像的总大小。

  • RECLAIMABLE:这是 Docker 可以回收的资源的大小。例如,Images 字段表示 Docker 中所有未使用的镜像的总大小,这些镜像可以被删除以回收磁盘空间。

五. Docker 虚悬镜像是什么?

这也算是一个小的面试题,通过上面的学习,我们学会了使用 docker images 查看当前所有已有的docker 镜像。

但有些时候,查询出来的镜像的名字和版本都是none,只有镜像ID和大小,如下图。也就是说这个镜像我们不知道它是什么东西,不能确定,这种镜像称之为虚悬镜像。

这种镜像通常没什么用,建议删除,有时候是因为镜像下载过程中出现了问题,有时候是因为构建镜像时出现了问题。

六. 收尾

好啦!关于 Docker 就暂时先说到这里吧,整篇文章内容量其实很大,有两万多字,能够认真看完整篇文章的都是棒棒哒!!!

希望小伙伴们能认真看完,真正的学会。

许多小伙伴在此过程中不一定会一帆风顺,可能会遇到很多问题,例如 docker 报各种错误、拉取镜像失败、容器无法正常运行、运行了但无法访问等各种各样的问题,都是有可能的。

但我想说的是,遇到问题不可怕,遇到问题不知道去解决才是最可怕的。现在网上有很多的文章,还有Chat GPT,都可以成为我们处理问题的有力助手,一定善加利用呢。

其实 docker 还有很多可以聊的地方,后续如果有时间和精力,小编会继续写更多的文章分享给大家哒!!!


http://www.kler.cn/a/454269.html

相关文章:

  • lin.security提权靶场渗透
  • LLM预训练recipe — 摘要版
  • LabVIEW软件项目设计方案如何制定
  • VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试
  • Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架
  • 运行Zr.Admin项目(后端)
  • CentOS 下使用 xrandr 分屏输出问题: xrandr有概率设置分辨率失败
  • 微服务——服务通信与接口设计
  • FPGA远程升级 -- FLASH控制
  • 若依管理系统字典数组forEach改变原数组
  • Flutter web - 5 项目打包优化
  • NVIDIA GPU 内部架构介绍
  • 剑指Offer|LCR 014. 字符串的排列
  • Spring02 - 代理和事务篇
  • ModbusTCP从站转Profinet主站案例
  • LangChain教程 - 表达式语言 (LCEL) -构建智能链
  • windows下Redis的使用
  • Python vs PHP:哪种语言更适合网页抓取
  • 计算机基础复习12.22
  • 记录jvm进程号
  • jangow-01-1.0.1靶机
  • 16.3、网络安全风险评估项目流程与工作内容
  • 骑砍2霸主MOD开发(26)-Mono脚本系统
  • 《VQ-VAE》:Stable Diffusion设计的架构源泉
  • 在 Ubuntu 服务器上添加和删除用户
  • Redis篇--应用篇4--自动提示,自动补全