Docker入门指南:快速学习Docker的基本操作

news2024/11/23 21:46:14

为什么需要Docker

有时我们在本地开发好程序并成功运行之后,却在服务器上运行不起来,通过观察日志通常会发现,哦原来是这个库没安装,于是我们就需要先安装需要用到的库,然后再启动服务你可能还会发现用到的数据库信息或者 API 密钥缺失,于是你需要添加配置文件,最后启动服务又发现安装的库版本不行,于是你又开始升本或者降本.....诸如此类的繁琐的操作可能还会因为服务器的OS不同而差生其他错误。想想就头疼🤕。于是便产生了诸如Docker这样的技术。

什么是Docker

Docker 是一个开源的平台,用于开发、部署和运行应用程序。它通过使用容器技术来实现应用程序的隔离和打包,使得应用程序可以在任何环境中一致地运行。Docker 容器包含了应用程序及其所有依赖项(如库、配置文件等),从而确保应用程序在不同环境中的行为一致。

Docker的基本操作

如果你还没有安装 Docker,请参照官方文档进行安装: docs.docker.com/desk...
你可以在命令行中运行 docker info 或者 docker version 来验证自己是否安装成功。

在正式开始之前,我们先来了解一下 Docker的相关概念:

  • Docker 镜像(Image)是一个只读的模板,用于创建 Docker 容器。它包含了应用程序及其运行所需的所有依赖项(如代码、库、环境变量、配置文件等)。镜像是不可变的,这意味着一旦创建,就不能被修改。
  • Docker 容器(Container)是从 Docker 镜像(Image)创建的一个运行实例。容器是一个轻量级、独立的可执行软件包,它包含了应用程序及其所有依赖项(如库、配置文件等),从而确保应用程序在任何环境中都能一致地运行。
  • Dockerfile:Dockerfile 是一个文本文件,里面记录着创建 Image 的详细步骤。它包含了一系列的指令,告诉 Docker 如何从头开始构建镜像。

举个简单的例子帮助你理解上述的概念:

在我们建造房屋的时候,通常需要先知道所需的材料、步骤和设计图纸构造出一副房屋的蓝图(Dockerfile)。然后根据建筑蓝图(Dockerfile),你可以预先制造出房屋的各个模块(如墙壁、屋顶、地板等)。这些模块是静态的、不可变的,一旦制造完成,就不能再修改,这就是镜像。最后Docker 容器就像是根据预制模块(镜像)建成的房屋。你可以根据预制的房屋模块(镜像)在不同的地点(主机)快速搭建出一栋完整的房屋(容器)。

镜像相关

列出镜像列表

docker images

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

获取镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

在获取之前可以先通过docker search 来查找所需要的具体镜像,或者在https://hub.docker.com/中查找后再拉取。

拉取 

使用Dockerfile构建镜像

在实际的开发当中我们往往需要构建出自己项目的镜像,这时就需要用到Dockerfile文件了。

Dockerfile文件应位于项目的根目录下,文件的内容就是镜像构建的过程。

# 使用官方的 Python 基础镜像
FROM python:3.8-slim
# 设置工作目录
WORKDIR /app
# 复制当前目录下的所有文件到工作目录
COPY . /app
# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 暴露应用程序运行的端口
EXPOSE 5000
# 运行应用程序
CMD ["python", "app.py"]

详细解释:

  • FROM:指定基础镜像,所有 Dockerfile 必须 FROM 指令开始
  • WORKDIR: 设置工作目录。之后的指令(如 RUN、CMD等)都会在这个目录下执行。
  • COPY:将文件或目录从本机复制到容器中的指定路径。COPY 的第一个参数表示源路径,是一个相对于 Dockerfile 所在位置的路径。第二个参数是相对于工作目录的路径(当然也可以是绝对路径)
  • RUN:在镜像中运行指定的命令。通常用于安装软件包或者依赖。
  • ENV: 设置环境变量。
  • EXPOSE: 声明容器运行时监听的端口
  • CMD:指定容器启动时要运行的命令。每个 Dockerfile 只能有一个 CMD,如果指定了多个,只有最后一个生效。

更多指令可以参考官方文档

构建镜像:docker build -t 镜像名:标签 Dockerfile所在路径

 

删除镜像

docker rmi 镜像

 可以用来删除指定镜像

容器相关

有了镜像之后就可以通过镜像启动容器。

启动容器

或者你可以以后台的方式启动,并为容器指定一个名字

成功的话你会看到类似上面的输出,这是容器的唯一id

查看容器

查看所有容器,包括运行中和停止的容器

docker ps -a

 docker ps查看运行中的容器,我这里没有正在运行的。

  1. CONTAINER ID:容器唯一标识符(ID)。是一个简短的哈希值,用于唯一标识每个容器。

  2. IMAGE:容器所使用的镜像名称。例如,python:3.8-slim 。

  3. COMMAND:容器启动时执行的命令,可以在启动容器时覆盖。一般在Dockerfile末尾

  4. CREATED:容器创建的时间。例如,2 minutes ago 或 3 days ago

  5. STATUS:容器的当前状态。可能的状态包括:

    • Restarting:容器正在重启。
    • Paused:容器已暂停。
    • Exited:容器已停止,后面通常跟着退出代码和停止时间。
    • Up:容器正在运行。
  6. PORTS:容器的端口映射信息。显示主机端口和容器端口之间的映射关系。例如,0.0.0.0:80->80/tcp 表示主机的 80 端口映射到容器的 80 端口。

  7. NAMES:容器的名称。可以在启动容器时通过 --name 选项指定。如果没有指定,Docker 会自动生成一个随机名称。

停止容器

 docker stop 容器ID(上述的CONTAINER ID字段)

 

删除容器

docker rm -f 容器ID

后台运行容器&进入后台运行的容器

在使用-d选项后台运行容器之后可以通过使用docker attach 或者 docker exec进入容器。

查看正在运行的容器

 进入后台运行的容器docker exec

docker exec 命令会在一个正在运行的容器中启动一个新的进程,并附加到这个新进程上。这个新进程的标准输出和标准错误输出是独立的,不会显示容器主进程的输出。因此,当你使用 docker exec -it 进入容器时,你看不到主进程的输出。

docker attach

查看容器的执行日志

通过docker exec进入容器并不能查看到容器的标准输出,所以我们可以通过查看容器的日志来查看

docker log -f 容器ID或名字

Docker构建镜像的原理 

todo

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

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

相关文章

《Linux从小白到高手》理论篇(六):Linux软件安装一篇通

List item 本篇介绍Linux软件安装相关的操作命令,看完本文,有关Linux软件安装相关操作的常用命令你就掌握了99%了。 Linux软件安装 RPM RPM软件的安装、删除、更新只有root权限才能使用;查询功能任何用户都可以操作;如果普通用…

真正的Open AI ——LLaMA颠覆开源大模型

1. LLaMA 简介 LLaMA(Large Language Model Meta AI)是由Meta(原Facebook)推出的一个大型语言模型系列,旨在通过更小的模型规模和更少的计算资源,实现与其他主流语言模型(如GPT)相媲…

spring简短注入

新建bean 创建set方法 jpackage com.dependency.spring6.bean;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class User {private static final Logger LOGGER LoggerFactory.getLogger(User.class);private String username;private String password;pr…

RPA跨流程复用元素技巧|实在RPA研究

为什么要跨流程复用元素 在 RPA 操作中,元素至关重要,因为自动化的本质就是模拟人类对元素的操作。基本上,每个流程都会包含若干个元素。对于同时维护多个流程的用户而言,相似的流程包,甚至是同一个元素。例如电商用户…

Solidworks斜接法兰快速绘制钣金箱体

Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 0.5mm间距为钣金焊接的预留焊缝。

Linux云计算 |【第四阶段】RDBMS1-DAY6

主要内容: MySQL索引(索引分类、创建索引)、用户及授权(创建用户并授权、查看授权、撤销授权、授权库mysql)、root密码恢复、备份、使用mysqldump进行逻辑备份、Percona 一、MySQL索引 1、基本概念 MySQL 索引(Inde…

给虚拟机安装操作系统以及无密码SSH登录

安装完虚拟化软件VMware Workstation Pro 17之后,我们下载了Ubuntu光盘映像文件,上次说演示desktop版的安装,但是考虑到后面要部署数据库,所以为了方便起见还是下载sever服务器版。 文件还挺大,在等待下载完成这会我们…

基于SpringBoot的休闲娱乐代理售票系统设计与实现

1.1研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发休闲娱乐代理售票…

C++那些事之内存优化

C那些事之内存优化 通常程序运行时内存是一个比较大的问题,如何减少内存占用和提升访问速度是至关重要。为了解决这些问题,C20 引入了 no_unique_address 特性,并结合空基类优化(EBO, Empty Base Optimization)&#x…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展,智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势,彰显了行业蓬勃发展的活力与潜力。然而,车联网技术的广泛应用也带来了一系列网络安全问题&a…

Mybatis知识

1. 基础知识 mybatis是基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建statement等繁杂的过程。 通过xml或者注解的方式将要执行的各种sta…

序列化方式五——ProtoStuff

介绍 Protostuff是一个基于Java的高效序列化库,它使用Protocol Buffers(简称protobuf)协议,为Java对象提供高效、灵活且易用的序列化和反序列化方法。Protostuff的主要优势在于其高性能和简单的使用方式,相对于其他序…

C#多线程数据同步的几种方式(不同的锁)

无锁 多个关联数据无法完整获取修改 internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");ThreadPool.QueueUserWorkItem(Thread1);ThreadPool.QueueUserWorkItem(Thread2);ThreadPool.QueueUserWorkItem(Thread3);Console…

SpringBoot框架在墙绘产品展示中的运用

4 系统设计 墙绘产品展示交易平台的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没…

linux查看进程所在的目录

在Linux系统中,查看一个进程所在的目录(即该进程的可执行文件所在的目录)可以通过多种方式实现。 以下是查找进程的可执行文件路径的方法: 使用ls -l /proc/[pid]/cwd 你可以通过查看/proc/[pid]/cwd的符号链接来找到进程的可执…

UE5蓝图实战:动态墙上挖坑与自定义坑尺寸

在Unreal Engine 5.3中,我利用蓝图系统开发了一个创新的挖坑Demo,该Demo展示了如何在实时环境中动态地在墙体上挖坑,并允许用户自定义坑的大小。这一过程得益于UE5官方提供的Geometry Script插件,该插件通过蓝图接口实现了强大的网…

sql-labs:42~65

less42(单引号闭合、报错回显) login_useradmin login_password123 and if(11,sleep(2),1) # # 单引号闭合 ​ login_useradmin login_password123and updatexml(1,concat(0x7e,database(),0x7e),1)# # 报错回显…

端模一体,猎豹移动对大模型机器人发展路径清晰

今年世界机器人大会刚刚收官不久,接咖啡、拿苹果、摊煎饼……人形机器人在这届大会上备受关注,厂商们编排“整活”,展位几乎水泄不通。 自从AI大模型开始全面改变市场开始,关于机器人的方向性争论就不绝于耳,就在最近的…

北京中实新材料:携手知名建筑企业,共筑重大工程辉煌篇章

近年来,北京中实新材料有限责任公司(以下简称“北京中实”)凭借其卓越的产品质量、专业的技术服务和良好的市场信誉,积极参与了一系列重大工程项目的建设,与多家知名建筑企业建立了长期稳定的合作关系,共同书写了城市发展的辉煌篇章。 深耕行业,铸就品质基石 自成立以来,北京中…