Docker新手使用教程

一、Docker 的基本概念

  1. 镜像 (Image):
    • 镜像是一个只读的模板,用于创建 Docker 容器。
    • 镜像包含了运行应用程序所需的所有内容:代码、运行时环境、库、配置文件等。
    • 可以将镜像看作是应用程序的 “代码”。
    • 你可以从 Docker Hub 或其他镜像仓库下载现成的镜像,也可以自己构建镜像。
  2. 容器 (Container):
    • 容器是基于镜像创建的可运行实例。
    • 容器是相互隔离的,它有自己的文件系统、进程空间和网络接口。
    • 你可以启动、停止、删除容器,并且可以在容器内运行应用程序。
    • 可以将容器看作是应用程序的 “运行环境”。
  3. 仓库 (Registry):
    • 仓库是用于存储 Docker 镜像的地方。
    • Docker Hub 是最大的公共镜像仓库,你可以在这里找到各种各样的镜像。
    • 你也可以创建私有的镜像仓库。
  4. Dockerfile:
    • Dockerfile 是一个文本文件,包含了构建 Docker 镜像的指令。
    • 你可以使用 Dockerfile 来定义如何从基础镜像开始,构建自己的应用程序镜像。
  5. Docker Client:
    • docker 命令是 Docker 的客户端,用于与 Docker daemon 交互。
    • 你使用 docker run, docker ps 等命令,实际是发送命令到 Docker daemon 执行。
  6. Docker daemon:
    • Docker daemon 是一个运行在后台的服务,负责实际的镜像拉取、容器创建、容器运行等操作。

二、Docker 安装

  1. 下载 Docker:
    • 访问 Docker 官网:https://www.docker.com/get-started
    • 根据你的操作系统下载 Docker Desktop (macOS, Windows) 或 Docker Engine (Linux)。
  2. 安装 Docker:
    • 按照下载的安装程序中的说明进行安装。
  3. 验证安装:
    • 打开你的终端或命令提示符,输入 docker --version,如果输出 Docker 版本信息,则表示安装成功。

三、常用 Docker 命令

  1. 镜像操作:

    • docker pull <image_name>: 从镜像仓库拉取镜像到本地。
      • 例如:docker pull ubuntu 拉取 ubuntu 镜像。
    • docker images: 列出本地已下载的镜像。
    • docker rmi <image_id>: 删除本地的镜像。
      • 例如:docker rmi 234ab5c67de 删除 id 为 234ab5c67de 的镜像。
  2. 容器操作:

    • docker run <image_name>: 基于镜像创建一个新的容器并运行。
      • 例如:docker run -it ubuntu /bin/bash 运行 ubuntu 镜像,并进入 bash shell。
    • docker ps: 列出当前正在运行的容器。
    • docker ps -a: 列出所有容器,包括正在运行和已停止的。
    • docker stop <container_id>: 停止一个正在运行的容器。
    • docker start <container_id>: 启动一个已停止的容器。
    • docker restart <container_id>: 重启一个容器。
    • docker rm <container_id>: 删除一个已停止的容器。
      • 例如:docker rm 1a2b3c4d5e 删除 id 为 1a2b3c4d5e 的容器。
    • docker exec -it <container_id> <command>: 在正在运行的容器中执行命令。
      • 例如:docker exec -it 1a2b3c4d5e /bin/bash 进入正在运行的 id 为 1a2b3c4d5e 的容器的 bash shell。
  3. 端口映射:

    • -p <host_port>:<container_port>: 将宿主机的端口映射到容器的端口。
      • 例如:docker run -p 8080:80 -it nginx 将宿主机的 8080 端口映射到容器的 80 端口。
  4. 目录挂载:

    • -v <host_dir>:<container_dir>: 将宿主机的目录挂载到容器的目录。
      • 例如:docker run -v /home/user/mydata:/app/data -it ubuntu /bin/bash 将宿主机的 /home/user/mydata 目录挂载到容器的 /app/data 目录。
  5. GPU支持:

    • --gpus all: 允许容器使用所有可用的 GPU。
    • --gpus "device=<gpu_id>": 允许容器使用指定的 GPU 设备。

四、Docker 镜像的使用

  1. 拉取镜像:
    docker pull ubuntu
    
    这将从 Docker Hub 拉取最新的 ubuntu 镜像到你的本地。
  2. 运行容器:
    docker run -it ubuntu /bin/bash
    
    这将基于 ubuntu 镜像创建一个新的容器,并启动 bash shell。你可以开始在容器内运行 Linux 命令。
  3. 退出容器:
    • 在容器中输入 exit 并按回车即可退出容器。
  4. 运行 web 服务
    docker run -d -p 8080:80 nginx
    
    • -d 后台运行容器。
    • -p 8080:80 将主机的8080端口映射到容器的80端口。
    • nginx 镜像名称。

五、Dockerfile 的使用

  1. 创建 Dockerfile:

    • 在你项目的根目录创建一个名为 Dockerfile (注意没有文件后缀) 的文件。

    • 在 Dockerfile 中写入构建镜像的指令。例如:

      FROM python:3.9-slim-buster  # 基于 Python 镜像
      WORKDIR /app   # 设置工作目录
      COPY requirements.txt . # 拷贝依赖文件
      RUN pip install -r requirements.txt # 安装依赖
      COPY . .   # 拷贝项目代码
      CMD ["python", "app.py"]   # 运行应用程序
      
  2. 构建镜像:

    • 在你项目根目录下,使用 docker build 命令构建镜像。

      docker build -t my_app .
      
      • -t my_app 指定镜像名称为 my_app,你可以改为你想要的名称。
      • . 表示 Dockerfile 所在的当前目录。
  3. 运行容器:

      docker run -p 5000:5000 -it my_app
    
    • 这将运行 my_app 镜像, 并将宿主机的 5000端口映射到容器的5000端口。

六、基本操作流程

  1. 选择或创建镜像: 从 Docker Hub 拉取现成的镜像,或者创建自己的 Dockerfile 来构建镜像。
  2. 运行容器: 使用 docker run 命令创建并运行容器。
  3. 在容器内部运行应用程序: 使用 docker exec 进入容器内部,或者直接在 docker run 命令中执行应用程序。
  4. 管理容器: 使用 docker ps, docker stop, docker start, docker rm 等命令来管理容器。
  5. 删除镜像和容器: 使用 docker rmi 删除镜像,使用 docker rm 删除容器。

七、进阶使用

  1. Docker Compose 可以用于管理多个容器,并设置容器的网络,端口, 卷等等,可以使用 docker-compose up 命令运行应用。
  2. Docker Network 可以用于设置容器之间的网络,可以使得多个容器之间进行通信。
  3. Docker Volume 可以用于持久化数据,使得容器之间可以共享数据,或使得容器即使删除,数据也可以保留。

八、 学习资源:

  • Docker 官方文档: https://docs.docker.com/
  • Docker Hub: https://hub.docker.com/
  • Docker 教程: 有许多在线课程和教程可以帮助你学习 Docker。 例如:
  • 菜鸟教程:https://www.runoob.com/docker/docker-tutorial.html
  • 腾讯云:https://cloud.tencent.com/developer/article/1758455

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven常见知识点

1、maven是什么&#xff1f; maven是Java的包管理工具&#xff0c;因为java包太多了&#xff0c;使用工具统一管理。 2、引入同一个包时使用哪个&#xff1f; 会遵循 路径最短优先 和 声明顺序优先 两大原则。解决这个问题的过程也被称为 Maven 依赖调解。 3、什么是 POM&…

Windows 上的 MySQL 8.4.3 和 WSL(Ubuntu)的 MySQL 8.0.40 之间配置 主从同步

在 Windows 上的 MySQL 8.4.3 和 WSL&#xff08;Ubuntu&#xff09;的 MySQL 8.0.40 之间配置 主从同步&#xff08;Master-Slave Replication&#xff09; 的过程略有不同&#xff0c;因为两者的 MySQL 版本和环境存在差异。以下是详细步骤&#xff0c;帮助你完成跨平台的主从…

基于php求职招聘系统设计

基于php求职招聘系统设计 摘要 随着社会信息化时代的到来&#xff0c;如今人们社会的生活节奏普遍加快&#xff0c;人们对于工作效率的要求也越来越高&#xff0c;企业 举办招聘会耗时耗财&#xff0c;个人参加招聘会漫无目的寻找不到“方向”&#xff0c;网络搜索工作量目的…

python-应用自动化操作方法集合

python-PC应用自动化操作 pywinauto&#xff1a;适合Windows系统的软件&#xff08;GUI&#xff09;&#xff0c;通过遍历窗口&#xff08;对话框&#xff09;和窗口里的UI控件进行定位操作&#xff0c;也可以控制鼠标和键盘输入等 https://geekdaxue.co/read/pywinauto-doc-zh…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…

49_Lua调试

Lua提供了debug库用于创建自定义调试器,尽管Lua本身没有内置的调试器1。这个库允许开发者在程序运行时检查和控制执行流程,这对于开发过程中的错误查找和修复非常有用。 1.Debug库概述 debug库提供的函数可以分为两类:自省函数(introspection functions)和钩子函数(hoo…

Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》

【机器学习】数据拟合-最小二乘法(Least Squares Method)

最小二乘法&#xff08;Least Squares Method&#xff09; 最小二乘法是一种广泛使用的数据拟合方法&#xff0c;用于在统计学和数学中找到最佳拟合曲线或模型&#xff0c;使得观测数据点与模型预测值之间的误差平方和最小化。以下是详细介绍&#xff1a; 基本概念 假设有一组…

ASP.NET Core 多环境配置

一、开篇明义&#xff1a;多环境配置的重要性 在ASP.NET Core 开发的广袤天地中&#xff0c;多环境配置堪称保障应用稳定运行的中流砥柱。想象一下&#xff0c;我们精心打造的应用&#xff0c;要在开发、测试、预发布和生产等截然不同的环境中穿梭自如。每个环境都如同一个独特…

Flutter 多终端测试 自定义启动画面​​​​​​​ 更换小图标和应用名称

多终端测试 flutter devices flutter run -d emulator-5554 flutter run -d emulator-5556 自定义启动画面 之前&#xff1a; 进入assert 3x 生成 1x 2x dart run flutter_native_splash:create dart run flutter_native_splash:remove 现在&#xff08;flutter_nativ…

springMVC实现文件上传

目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

Java内存与缓存

Java内存管理和缓存机制是构建高性能应用程序的关键要素。它们之间既有联系又有区别&#xff0c;理解这两者对于优化Java应用至关重要。 Java 内存模型 Java内存模型&#xff08;JMM&#xff09;定义了线程如何以及何时可以看到其他线程修改过的共享变量的值&#xff0c;并且规…

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构&#xff1a; {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…

云服务信息安全管理体系认证,守护云端安全

在数据驱动的时代&#xff0c;云计算已成为企业业务的超级引擎&#xff0c;推动着企业飞速发展。然而&#xff0c;随着云计算的广泛应用&#xff0c;信息安全问题也日益凸显&#xff0c;如同暗流涌动下的礁石&#xff0c;时刻威胁着企业的航行安全。这时&#xff0c;云服务信息…

微服务中引入消息队列的利弊

微服务中引入消息队列的利弊 1、微服务架构中引入消息队列(Message Queue)的主要优势&#xff1a; 1.1 解耦(Decoupling) 服务之间不需要直接调用&#xff0c;通过消息队列实现松耦合 生产者和消费者可以独立扩展和维护 降低系统间的依赖性 1.2 异步处理(Asynchronous Proc…

npm、yarn、pnpm包安装器差异性对比

特性npmyarnpnpm发布年份2010 年发布2016 年发布2017 年发布安装速度较慢&#xff08;旧版本&#xff09;&#xff0c;但自 npm 5 后有所改善较快&#xff0c;尤其是在缓存方面极快&#xff0c;使用硬链接和全局缓存来提高速度包管理模式扁平化依赖&#xff0c;可能会发生重复依…

LabVIEW与WPS文件格式的兼容性

LabVIEW 本身并不原生支持将文件直接保存为 WPS 格式&#xff08;如 WPS 文档或表格&#xff09;。然而&#xff0c;可以通过几种间接的方式实现这一目标&#xff0c;确保您能将 LabVIEW 中的数据或报告转换为 WPS 可兼容的格式。以下是几种常见的解决方案&#xff1a; ​ 导出…

创建 WordPress 插件(第一部分):添加管理页面

WordPress 是互联网上最受欢迎的内容管理系统之一。它是用 PHP 创建的&#xff0c;可以处理从博客到商业网站的一切需求。事实上&#xff0c;我们的博客和网站都使用 WordPress。在本文中&#xff0c;我将向你展示如何创建一个 WordPress 插件&#xff0c;该插件会在管理员控制…

Go语言之路————条件控制:if、for、switch

Go语言之路————if、for、switch 前言ifforswitchgoto和label 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#xff0c;到后面能正常完成工作上的业务开发的过程&#xff0…

解锁企业数据管理统一身份认证难题,EasyMR助力企业敏捷提效

在数字经济迅猛发展的当下&#xff0c;企业数据量正以令人惊叹的速度持续增长。据IDC研究显示&#xff0c;至2025年&#xff0c;全球数据总量预计将超175 ZB。数据的爆发式增长对企业而言&#xff0c;既是机遇&#xff0c;更是巨大挑战。 如今&#xff0c;大数据已然成为企业决…