42、Docker入门:安装、运行与管理指南

Docker入门:安装、运行与管理指南

一、Docker服务检查与启动

在使用Docker之前,我们需要先检查Docker服务是否正在运行,同时确认该服务是否已启用。若未启用,可使用以下命令同时启动并启用Docker服务:

systemctl enable --now docker

默认情况下,使用 docker 命令需要root权限,为了避免每次使用都输入 sudo ,可以将用户账户添加到 docker 组,使用如下命令:

sudo usermod -aG docker <yourusername>

执行完上述命令后,注销并重新登录,就能更轻松地管理Docker了。可以通过运行 groups 命令来验证用户是否已加入 docker 组。

二、管理Docker容器

安装并启动Docker后,我们就可以使用 docker 命令及其各种子命令来管理容器了。首先,让我们尝试使用 docker search 命令来搜索容器镜像,例如搜索Ubuntu镜像:

docker search ubuntu

在Docker中,容器是从镜像创建的。我们既可以使用现有的容器镜像,也可以自己构建。 docker search 命令能帮助我们在Docker Hub(一个在线容器仓库)中搜索符合条件的容器镜像。选择好镜像后,就可以将其下载到本地并创建容器实例。

以安装NGINX容器为例,官方的 nginx 镜像值得信赖,在 Docker Hub 网站上搜索该镜像时,若显示“DOCKER OFFICIAL IMAGE”,则表明它是官方镜像。使用官方镜像部署容器能节省大量时间,避免从头开始创建。

不过,即使镜像来自可信赖的源,也应该对其进行审计,因为安全方面没有绝对的可靠。

三、下载与管理镜像

要下载Docker镜像,可以使用 docker pull 命令,例如下载最新的Ubuntu容器镜像:

docker pull ubuntu

下载完成后,镜像会存储在本地,我们可以使用 docker images 命令查看本地存储的镜像列表:

docker images

输出结果会显示镜像的相关信息,包括 IMAGE ID 。如果需要删除某个镜像,可以使用 docker rmi 命令,并指定镜像的ID,例如:

docker rmi d2e4e1f51132
四、创建与运行容器

有了下载好的容器镜像后,就可以使用 docker run 命令创建并运行容器。例如,使用之前下载的Ubuntu镜像运行 bash ,以便进入容器的shell环境:

docker run -it ubuntu /bin/bash

运行上述命令后,我们就可以在容器的shell中执行各种命令,就像在真实的Ubuntu机器上一样。

需要注意的是,当在容器内运行的命令执行完毕后,容器会停止并被删除。例如,在容器中安装了一些软件包,当退出容器时,这些软件包会被清除。

每个运行的容器都有一个唯一的 CONTAINER ID ,可以使用 docker ps 命令查看正在运行的容器列表,若要查看所有容器(包括已停止的),可以添加 -a 选项:

docker ps -a

如果要停止一个容器,可以使用 docker stop 命令,并指定容器的ID:

docker stop <Container ID>
五、容器的退出与重新连接

退出容器有两种方式:一是按下 Ctrl + d ,二是输入 exit 并回车。但这样会导致容器停止并被删除。如果想退出容器但不停止它,可以在容器内按下 Ctrl + p ,再按下 q 。

若要重新连接到正在运行的容器,可以使用 docker attach 命令,并指定容器的ID:

docker attach d2e4e1f51132
六、其他有用的命令
  • docker info :该命令能提供有关Docker实现的信息,例如系统上的容器数量。
  • docker start :用于启动已停止的容器,需要指定容器的ID。
七、以服务方式运行容器

如果希望容器像服务一样在后台持续运行,可以使用 -d 选项以分离模式运行容器,例如:

docker run -dit ubuntu /bin/bash

这里的 -i 选项开启交互模式, -t 选项提供伪TTY, -d 选项使容器在后台运行。

八、端口重定向与应用部署

我们可以通过端口重定向来访问容器内运行的应用。例如,创建一个新的Ubuntu容器,并将容器内的80端口重定向到主机的8080端口:

docker run -dit -p 8080:80 ubuntu /bin/bash

在容器内安装并启动Apache服务,步骤如下:
1. 更新仓库索引:

apt update
  1. 安装Apache:
apt install apache2
  1. 启动Apache服务:
/etc/init.d/apache2 start

启动后,按下 Ctrl + p 和 q 退出容器,然后在浏览器中访问 localhost:8080 ,应该能看到Apache的默认页面。

九、创建自定义镜像

当容器运行一段时间后,我们可以根据容器的当前状态创建自定义镜像。首先,使用 docker ps 命令获取容器的ID,然后使用 docker commit 命令创建新镜像:

docker commit <Container ID> ubuntu/apache-server:1.0

创建完成后,可以使用 docker images 命令查看新镜像。要从新镜像创建容器,使用 docker run 命令并指定镜像的标签和名称:

docker run -dit -p 8080:80 ubuntu/apache-server:1.0 /bin/bash
十、Docker的实际应用案例

在实际工作中,Docker有很多应用场景。例如,在一个软件开发团队中,不同开发者可能使用不同的Linux发行版,这可能会导致开发环境的不一致。可以为每个开发者提供一个基于特定发行版(如Debian)的Docker容器,并将所需的构建工具集成到容器中,这样开发者就可以使用自己喜欢的操作系统,而不会影响开发工作。

通过以上步骤,我们可以完成Docker的安装、镜像的下载与管理、容器的创建与运行等操作。随着对Docker的深入了解,我们还可以进一步探索自动化构建容器的方法。

以下是一个简单的流程图,展示了使用Docker的基本流程:

graph LR
    A[检查Docker服务] --> B[启动并启用服务]
    B --> C[添加用户到docker组]
    C --> D[搜索镜像]
    D --> E[下载镜像]
    E --> F[创建并运行容器]
    F --> G[管理容器(停止、删除等)]
    F --> H[创建自定义镜像]
    H --> I[从自定义镜像创建容器]

同时,为了更清晰地展示一些命令及其作用,我们列出以下表格:
| 命令 | 作用 |
| — | — |
| systemctl enable --now docker | 启动并启用Docker服务 |
| sudo usermod -aG docker <yourusername> | 将用户添加到docker组 |
| docker search <镜像名称> | 搜索容器镜像 |
| docker pull <镜像名称> | 下载容器镜像 |
| docker images | 查看本地存储的镜像列表 |
| docker rmi <镜像ID> | 删除镜像 |
| docker run -it <镜像名称> <应用程序> | 创建并运行容器 |
| docker ps [-a] | 查看容器列表 |
| docker stop <容器ID> | 停止容器 |
| docker attach <容器ID> | 连接到正在运行的容器 |
| docker info | 获取Docker实现的信息 |
| docker commit <容器ID> <新镜像名称:标签> | 创建自定义镜像 |

Docker入门:安装、运行与管理指南

十一、ENTRYPOINT的概念

随着对Docker知识的深入了解,我们需要进一步探究 ENTRYPOINT 的概念。 ENTRYPOINT 是在Docker容器中启动应用程序的首选方式。在之前的示例中,我们使用 /bin/bash 作为 ENTRYPOINT ,这是完全可行的。但通常情况下, ENTRYPOINT 是一个Bash脚本,该脚本被配置为运行所需的应用程序,并由容器启动。

十二、容器管理的更多细节
  1. 容器ID的重要性 :每个容器都有一个唯一的 CONTAINER ID ,它在管理容器时起着关键作用。无论是停止、删除容器,还是重新启动已停止的容器,都需要使用这个ID。例如,使用 docker stop 和 docker rm 命令时,都要指定容器的ID。
  2. 容器状态的查看 : docker ps 命令是查看容器状态的常用工具。通过添加不同的选项,可以查看不同状态的容器。例如, docker ps -a 可以查看所有容器,包括已停止的容器;而 docker ps 默认只显示正在运行的容器。
  3. 容器的持久化 :默认情况下,容器在停止后会被删除,其中的数据也会丢失。如果需要持久化容器中的数据,可以使用数据卷(Volumes)或挂载主机目录的方式。例如,在创建容器时使用 -v 选项挂载主机目录:
docker run -it -v /host/directory:/container/directory ubuntu /bin/bash

这样,容器内 /container/directory 目录的更改会同步到主机的 /host/directory 目录。

十三、Docker的网络管理

Docker提供了多种网络模式,用于管理容器之间以及容器与主机之间的通信。常见的网络模式有:
1. 桥接模式(Bridge) :默认的网络模式,容器通过主机的网桥与外部通信。每个容器都有一个独立的IP地址,并且可以通过主机的IP地址和映射的端口访问。
2. 主机模式(Host) :容器与主机共享网络命名空间,容器使用主机的网络接口,没有独立的IP地址。这种模式可以提高网络性能,但会增加安全风险。
3. 无网络模式(None) :容器没有网络连接,只能与本地主机通信。
4. 自定义网络 :可以创建自定义的网络,让容器加入到该网络中,实现容器之间的隔离和通信。例如,创建一个自定义的桥接网络:

docker network create mynetwork

然后在创建容器时指定网络:

docker run -it --network=mynetwork ubuntu /bin/bash
十四、Docker的安全考虑

虽然Docker提供了一定的隔离机制,但在使用过程中仍需要注意安全问题。以下是一些安全建议:
1. 镜像审计 :如前文所述,即使是来自可信赖源的镜像,也应该进行审计,确保镜像不包含恶意软件或漏洞。
2. 最小化权限 :在容器中运行应用程序时,尽量使用最小化的权限,避免以root用户运行。可以创建一个普通用户,并在容器中使用该用户运行应用程序。
3. 更新镜像和容器 :及时更新镜像和容器,以修复已知的安全漏洞。
4. 网络安全 :合理配置容器的网络,避免不必要的端口暴露。可以使用防火墙或网络策略来限制容器的网络访问。

十五、Docker的自动化构建

在实际应用中,手动创建和管理容器效率较低,因此需要实现自动化构建。Docker提供了 Dockerfile 和 docker-compose 等工具来实现自动化构建。
1. Dockerfile : Dockerfile 是一个文本文件,用于定义镜像的构建步骤。通过编写 Dockerfile ,可以自动化地构建自定义镜像。以下是一个简单的 Dockerfile 示例:

# 使用基础镜像
FROM ubuntu

# 更新仓库索引
RUN apt update

# 安装Apache
RUN apt install -y apache2

# 暴露端口
EXPOSE 80

# 启动Apache服务
CMD ["apache2ctl", "-D", "FOREGROUND"]

使用以下命令构建镜像:

docker build -t myapache .
  1. docker-compose : docker-compose 是一个用于定义和运行多容器Docker应用的工具。通过编写 docker-compose.yml 文件,可以一次性启动多个容器,并配置它们之间的关系。以下是一个简单的 docker-compose.yml 示例:
version: '3'
services:
  web:
    build: .
    ports:
      - "8080:80"

使用以下命令启动容器:

docker-compose up -d
十六、总结与展望

通过以上内容,我们详细介绍了Docker的安装、镜像管理、容器创建与运行、网络管理、安全考虑以及自动化构建等方面的知识。Docker作为一种轻量级的容器化技术,具有隔离性好、资源利用率高、部署方便等优点,在软件开发、测试、部署等环节得到了广泛应用。

随着技术的不断发展,Docker也在不断完善和扩展。未来,我们可以进一步探索Docker与其他技术的结合,如Kubernetes、OpenShift等容器编排工具,实现更高效、更可靠的容器化应用部署。同时,也可以尝试将Docker应用到更多的场景中,如大数据处理、人工智能等领域,发挥其更大的价值。

以下是一个流程图,展示了使用Dockerfile和docker-compose进行自动化构建的流程:

graph LR
    A[编写Dockerfile] --> B[构建镜像]
    B --> C[编写docker-compose.yml]
    C --> D[启动容器]
    D --> E[管理容器(停止、删除等)]

另外,为了更清晰地展示Docker的一些概念和操作,我们列出以下表格:
| 概念/操作 | 说明 |
| — | — |
| ENTRYPOINT | 容器启动应用程序的首选方式,通常是一个Bash脚本 |
| 数据卷(Volumes) | 用于持久化容器中的数据 |
| 桥接模式(Bridge) | 默认网络模式,容器通过主机网桥与外部通信 |
| 主机模式(Host) | 容器与主机共享网络命名空间 |
| 无网络模式(None) | 容器没有网络连接 |
| 自定义网络 | 创建自定义网络实现容器隔离和通信 |
| Dockerfile | 用于定义镜像的构建步骤 |
| docker-compose | 用于定义和运行多容器Docker应用 |

通过学习和实践,相信你已经对Docker有了更深入的了解,并能够在实际工作中灵活运用Docker来提高工作效率和质量。希望你在使用Docker的过程中不断探索和创新,发现更多有趣和有用的应用场景。

相关推荐

【Docker 新手入门指南】第九章:仓库管理

《Docker 新手入门指南》系列文章涵盖了 Docker 的基础知识到高级应用,适合初学者快速上手。文章从 Docker 的架构概述、安装、镜像加速、容器操作、网络配置到仓库管理,逐步深入。此外,还介绍了 Docker Hub 的高级功能,如自动构建、组织协作、镜像版本管理等,并详细讲解了如何搭建私有 Docker 仓库,包括认证机制和 HTTPS 配置。对于企业级应用,文章还提供了镜像分层存储、安全审计、跨数据中心同步等解决方案。最后,通过对比公共仓库与私有仓库的优缺点,帮助用户根据实际需求选择合适的仓

awei0916的专栏 1533

Docker 从入门到实战教程(二):Docker 安装与基本命令详解 | 最全安装指南与常用命令

Docker 从入门到实战教程(二):Docker 安装与基本命令详解 | 最全安装指南与常用命令 如云原生、前端、后端、运维和AI都有超多内容更新。本文详细介绍了 Docker 在 Linux、Mac 和 Windows 上的安装过程,以及最常用的 Docker 基本命令。掌握这些命令后,用户可以快速创建、管理容器,并方便地使用 Docker Hub 进行镜像拉取与分享。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 1万+

42、Docker入门指南:安装、使用与容器管理

本文是一篇Docker入门指南,详细介绍了Docker的安装、配置与基本使用,包括镜像搜索与下载、容器的创建与管理、自定义镜像的创建等操作。同时,还深入探讨了ENTRYPOINT、信号处理、多容器应用编排、安全最佳实践以及性能优化等内容。通过本文的学习,读者可以快速掌握Docker的核心功能,并将其应用于实际项目中,提高开发与部署效率。

hope8的博客 72

3、Docker入门指南:安装、运行与原理解析

本文详细介绍了Docker的安装、配置和基本使用方法,包括Docker Desktop和Toolbox的安装步骤、Docker Compose的使用、容器的基本概念、网络配置、数据管理、容器编排以及安全最佳实践。通过本指南,读者可以快速入门Docker技术,并了解其在现代应用开发与部署中的优势。

milk5的博客 118

JS逆向实战:从宿务航空机票搜索到参数签名算法解析

在现代Web应用开发中,前端与后端的数据交互安全是核心技术环节。其原理通常涉及参数签名、令牌验证等机制,用于防止未授权访问和数据篡改。这些技术的核心价值在于保障接口调用的合法性与数据完整性,广泛应用于电商、金融、旅行预订等对数据安全要求较高的场景。以机票搜索为例,网站常通过动态生成的签名参数来验证请求来源。本文以宿务太平洋航空为案例,深入解析其搜索请求中关键参数(如signature)的生成逻辑,并演示如何通过浏览器开发者工具进行断点调试、变量追踪,最终使用Node.js与crypto-js库本地复现完整请

weixin_26642481的博客 751

Python+Appium实现泛微OA自动打卡:5分钟搭建移动端自动化脚本

移动端自动化测试是软件测试与办公自动化领域的重要技术方向,其核心原理是通过程序模拟用户对手机应用界面的操作,实现重复性任务的自动执行。Appium作为主流的开源移动端自动化框架,基于WebDriver协议,支持跨平台且无需修改被测应用,为自动化脚本开发提供了标准化接口。在工程实践中,结合Python简洁的语法和丰富的生态,可以快速构建稳定可靠的自动化解决方案。这一技术组合的价值在于能够高效处理“重复性、低价值、高频率”的日常操作,例如考勤打卡、数据填报等办公场景,显著提升工作效率。本文以泛微OA Emobi

weixin_28836875的博客 389

从零构建:四轴机械臂D-H参数建模与MATLAB实战指南

本文详细介绍了四轴机械臂D-H参数建模的完整流程与MATLAB实战应用。从机械臂运动学基础出发,解析D-H参数原理与坐标系建立规则,提供MATLAB Robotics Toolbox的安装、模型创建及正逆运动学求解的代码实现。特别针对四轴机械臂的逆运算优化、轨迹规划和奇异位形规避等高级应用给出实用解决方案,是机器人开发者的实战指南。

weixin_29062255的博客 419

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 382

《数据分析岗笔试高频题:字节常用的SQL与AB测试考题解析》

• 核心考点:用RANK()/DENSE_RANK()/ROW_NUMBER()排序,SUM() OVER()计算累积值。◦ 用公式n=2*(Zα/2+Zβ)^2*σ²/δ²,取α=0.05,β=0.2,计算得每组需260人;◦ 关注字节技术公众号“字节跳动数据团队”,学习真实AB测试案例(如“推荐算法优化实验”)。• 题型分布:SQL编程题(40%)、AB测试方案设计(30%)、数据洞察题(30%);◦ 牛客网“字节跳动SQL真题”(如“统计用户7日留存”“广告投放ROI计算”)。

2501_91651594的博客 1107

Captcha must be filled out,解决Kaggle新用户注册无法弹出验证提示的问题

Captcha must be filled out

weixin_46713695的博客 5万+

激光打标轴坐标计算分析

‌:基于坐标差的平方和开方运算,勾股定理将几何关系转化为代数计算,从而实现了从坐标到距离的精确转换‌12。直角三角形的应用从上图可以看到A,B,P三个点连起来就是一个直角三角形了。用勾股定理计算距离 C#有相关的方法直接传参数就可以了。很方便。

StevenChen的博客 306

华为OD机试真题 新系统 - WIFI设备网络规划 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2012

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 18、Linux文件与目录操作及数据处理全解析
下一篇: 44、移动机器人的运动控制与定位技术
gin88
博客等级 码龄1天 0粉丝 2353原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值