WHAT - 容器化系列(二)- docker

目录

  • 一、前言
  • 二、Docker镜像:可运行软件包
  • 三、Docker容器:可执行环境
  • 四、容器和镜像的关系
  • 五、创建镜像的过程
    • 5.1 编写Dockerfile
    • 5.2 构建Docker镜像
    • 5.3 查看构建的镜像
    • 5.4 运行Docker容器
    • 5.5 验证容器运行状态
    • 5.6 推送镜像到镜像仓库(可选)
      • 1. 登录Docker Hub
      • 2. 标记镜像
      • 3. 推送镜像
    • 总结
  • 六、创建容器的过程
    • 6.1 基本过程:选择镜像、启动容器、运行应用
    • 6.2 示例
  • 七、docker run 命令
    • 7.1 镜像来源
    • 7.2 主要参数说明
      • 基本参数
      • 网络相关参数
      • 资源限制
      • 其他参数
      • 完整示例
      • 总结
  • 八、其他常见 docker 命令

一、前言

在 WHAT - 容器化系列(一) 我们简单介绍过 Docker 的产生过程以及它从根本上解决本地环境和 PaaS 环境不一致的问题。Docker大大简化了容器的创建、管理和分发,使得容器技术迅速普及,并引发了DevOps和微服务架构的革命。

因此Docker在容器化发展进程具备非常重要的意义,我们今天主要来介绍Docker。在Docker的生态系统中,理解Docker镜像和Docker容器及其关系是至关重要的。

二、Docker镜像:可运行软件包

Docker镜像是一种轻量级、独立的可执行软件包,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

镜像是只读的,并且通常基于层次结构,每一层代表镜像的某个历史状态。

特点:

  • 只读性:镜像是不可变的,一旦创建就不能更改。
  • 层次结构:镜像由多个层组成,每层都是前一层的增量更新,这样可以提高存储和传输效率。
  • 可移植性和一致性:镜像可以在任何支持Docker的环境中运行,确保应用在不同环境下的一致性。

三、Docker容器:可执行环境

Docker容器是基于镜像创建的一个可运行的实例。它是一个轻量级、独立的可执行环境,包含应用程序及其依赖项,并且运行在一个隔离的进程空间中。

容器可以被启动、停止、移动和删除,每个容器都是独立的。

特点:

  • 可写层:每个容器在镜像的基础上创建时,会增加一个可写层,允许容器在运行时进行更改。
  • 隔离性:容器通过操作系统级虚拟化技术(如Namespaces和cgroups)实现资源的隔离和控制。
  • 临时性:容器的生命周期是短暂的,通常用于运行应用程序的一个实例。

四、容器和镜像的关系

容器和镜像之间的关系可以比作面向对象编程中的类和对象:

  • 镜像是类:它定义了容器的蓝图或模板,包含所有需要的文件和设置。
  • 容器是对象:它是镜像的实例,实际运行中的实体。

容器镜像好比是一个编译好的、打包好的程序文件,容器就是用这个程序文件运行的程序进程。

五、创建镜像的过程

创建Docker镜像的过程主要包括编写Dockerfile和使用Docker命令构建镜像。

以下是详细步骤:

5.1 编写Dockerfile

Dockerfile 是一个文本文件,包含了构建镜像的所有指令。这些指令定义了镜像的基础镜像、安装的依赖、复制的文件、设置的环境变量以及启动容器时运行的命令等。

Dockerfile 示例

以下是一个简单的示例Dockerfile,用于创建一个包含Nginx服务器的镜像:

# 使用官方Nginx基础镜像
FROM nginx:alpine# 维护者信息
LABEL maintainer="yourname@example.com"# 复制本地目录下的文件到镜像中的指定目录
COPY ./index.html /usr/share/nginx/html/index.html# 暴露端口
EXPOSE 80# 启动Nginx服务
CMD ["nginx", "-g", "daemon off;"]

5.2 构建Docker镜像

编写完Dockerfile后,可以使用docker build命令构建镜像。

命令格式

docker build -t <镜像名>:<标签> <Dockerfile所在目录>

示例命令

# 构建镜像并命名为mynginx:latest
# docker build -t mynginx:v1.1 .
docker build -t mynginx:latest .

5.3 查看构建的镜像

构建完成后,可以使用docker images命令查看本地的镜像列表。

docker images

5.4 运行Docker容器

构建完镜像后,可以使用docker run命令基于该镜像创建并运行容器。

命令格式

docker run -d --name <容器名> -p <主机端口>:<容器端口> <镜像名>:<标签>

示例命令

# 运行基于mynginx:latest镜像的容器,映射端口80
docker run -d --name mynginx_container -p 80:80 mynginx:latest

5.5 验证容器运行状态

可以使用docker ps命令查看正在运行的容器列表。

docker ps

5.6 推送镜像到镜像仓库(可选)

如果需要将镜像分享给其他人或在不同环境中使用,可以将镜像推送到Docker Hub或其他私有镜像仓库。

1. 登录Docker Hub

docker login
docker login -u admin <DockerHub域名>
# 示例:docker login -u admin mycontainer myregistry.com

2. 标记镜像

docker tag mynginx:latest <DockerHub用户名>/mynginx:latest
# 示例:docker tag mynginx:latest mycontainer myregistry.com/myapp/mynginx:latest

3. 推送镜像

docker push <DockerHub用户名>/mynginx:latest
# 示例 docker push mycontainer myregistry.com/myapp/mynginx:latest

总结

创建Docker镜像的过程主要包括以下步骤:

  1. 编写Dockerfile:定义镜像的构建步骤和内容。
  2. 构建镜像:使用docker build命令构建镜像。
  3. 查看镜像:使用docker images命令查看本地镜像列表。
  4. 运行容器:使用docker run命令基于镜像创建并运行容器。
  5. 验证容器:使用docker ps命令查看容器运行状态。
  6. 推送镜像(可选):将镜像推送到镜像仓库,以便共享和使用。

通过以上步骤,可以创建和管理Docker镜像,从而实现应用程序的容器化部署。

六、创建容器的过程

6.1 基本过程:选择镜像、启动容器、运行应用

  1. 选择镜像:通过Docker命令选择一个已有的镜像或从Docker Hub等仓库中拉取一个镜像。
  2. 启动容器:基于选定的镜像,Docker引擎创建一个容器实例,并在镜像的基础上添加一个可写层。
  3. 运行应用:容器启动后,镜像中的应用程序在隔离的环境中运行。

6.2 示例

假设有一个名为myapp的Docker镜像,以下是基于这个镜像创建并运行容器的过程:

# 拉取镜像(如果镜像已存在,可以跳过这一步)
docker pull myapp# 基于镜像创建并运行容器
docker run -d --name mycontainer myapp# 查看正在运行的容器
docker ps# 进入容器
docker exec -it mycontainer /bin/bash# 停止容器
docker stop mycontainer# 删除容器
docker rm mycontainer

七、docker run 命令

7.1 镜像来源

在前面我们提供过下面两个例子:

# 1. 本地build后run
docker build -t mynginx:latest .
docker run -d --name mynginx_container -p 80:80 mynginx:latest# 2. 拉取远端镜像run
docker pull myapp
docker run -d --name mycontainer myapp

对于远端镜像,在Docker中,可以直接通过docker run命令指定远端镜像,而不需要先使用docker pull命令拉取镜像。Docker会在本地没有指定镜像的情况下自动从远端仓库(例如Docker Hub)拉取镜像,然后运行容器。

以下是如何直接指定远端镜像的示例:

# 直接指定远端镜像并运行容器
docker run -d --name mycontainer myapp

在这个命令中,如果myapp镜像不存在于本地,Docker会自动从Docker Hub拉取镜像并运行容器。

如果需要指定具体的镜像版本或标签,可以在镜像名后面加上标签(例如myapp:latestmyapp:v1.0)。

# 直接指定带标签的远端镜像并运行容器
docker run -d --name mycontainer myapp:latest

另外,如果镜像托管在私有仓库或组织名下,需要包括仓库地址或组织名:

# 指定私有仓库中的镜像并运行容器
docker run -d --name mycontainer myregistry.com/myapp:latest# 指定组织名下的镜像并运行容器
docker run -d --name mycontainer myorg/myapp:latest

7.2 主要参数说明

docker run 是 Docker 中用于创建并运行容器的主要命令。这个命令有许多参数,可以用来配置容器的运行方式。以下是一些常用的 docker run 参数及其说明:

基本参数

  1. -d--detach

    • 作用:以后台模式运行容器。
    • 示例docker run -d nginx
  2. --name

    • 作用:为容器指定一个名称。
    • 示例docker run --name mycontainer nginx
  3. -p--publish

    • 作用:将容器的端口映射到主机的端口。
    • 示例docker run -p 8080:80 nginx
  4. -e--env

    • 作用:设置环境变量。
    • 示例docker run -e MYVAR=myvalue nginx
  5. -v--volume

    • 作用:挂载主机目录或数据卷到容器。
    • 示例docker run -v /host/path:/container/path nginx
  6. --rm

    • 作用:容器停止后自动删除容器。
    • 示例docker run --rm nginx
  7. -it

    • 作用:以交互模式运行容器并绑定终端。
    • 示例docker run -it ubuntu /bin/bash

网络相关参数

  1. --network

    • 作用:指定容器的网络模式。
    • 示例docker run --network bridge nginx
  2. --link

    • 作用:连接到其他容器。
    • 示例docker run --link another_container nginx

资源限制

  1. --cpus

    • 作用:限制容器使用的CPU数量。
    • 示例docker run --cpus="1.5" nginx
  2. --memory

    • 作用:限制容器使用的内存。
    • 示例docker run --memory="512m" nginx

其他参数

  1. --restart

    • 作用:定义容器的重启策略。
    • 示例docker run --restart=always nginx
  2. --env-file

    • 作用:从文件中读取环境变量。
    • 示例docker run --env-file ./env.list nginx
  3. --entrypoint

    • 作用:覆盖镜像的默认入口点。
    • 示例docker run --entrypoint /bin/bash ubuntu
  4. -u--user

    • 作用:以指定用户运行容器。
    • 示例docker run -u 1001 nginx
  5. --log-driver

    • 作用:指定容器的日志驱动。
    • 示例docker run --log-driver=syslog nginx

完整示例

结合多个参数的完整示例:

docker run -d --name mynginx -p 8080:80 -v /mydata:/data --env MYVAR=myvalue --network mynetwork --restart=always nginx
  • -d:以后台模式运行容器。
  • --name mynginx:为容器指定名称为 mynginx
  • -p 8080:80:将主机的8080端口映射到容器的80端口。
  • -v /mydata:/data:将主机目录 /mydata 挂载到容器的 /data 目录。
  • --env MYVAR=myvalue:设置环境变量 MYVARmyvalue
  • --network mynetwork:将容器连接到 mynetwork 网络。
  • --restart=always:设置容器重启策略为总是重启。
  • nginx:使用 nginx 镜像。

总结

docker run 命令提供了丰富的参数选项,允许用户精细控制容器的运行方式。通过组合不同的参数,可以满足各种应用场景的需求。

八、其他常见 docker 命令

以下是一些常见的Docker命令及其功能介绍:

  1. 查看容器:

    docker ps
    

    这个命令列出当前正在运行的容器。

  2. 启动或停止容器:

    docker start <容器ID或名称>
    docker stop <容器ID或名称>
    

    通过这些命令可以启动或停止指定的容器。

  3. 删除容器:

    docker rm <容器ID或名称>
    

    这个命令用于删除指定的容器。

  4. 在容器中执行命令:

    docker exec -it <容器ID或名称> <命令>
    

    这个命令允许你在正在运行的容器中执行特定的命令。

  5. 分析容器的配置:

    docker inspect <容器ID或名称>
    

    这个命令会返回指定容器的详细配置信息,包括网络设置、挂载的卷、环境变量等。

  6. 查看容器标准输出日志:

    docker logs <容器ID或名称>
    

    这个命令用于查看容器的标准输出日志,可以用来调试和监视容器的运行情况。

  7. 查看镜像:

    docker images
    

    这个命令列出本地系统中的Docker镜像列表。

  8. 删除镜像:

    docker rmi <镜像ID或名称>
    

    这个命令用于删除指定的Docker镜像。

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

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

相关文章

【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法

1.问题现象 8 个网口&#xff0c; 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数&#xff0c; 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令&#xff08; rmmod…

Spring 中如何控制 Bean 的加载顺序?

如果你脱口而出说添加 Order 注解或者是实现 Ordered 接口&#xff0c;那么恭喜&#xff0c;你掉坑了。 一 Order 注解和 Ordered 接口 在 Spring 框架中&#xff0c;Order 是一个非常实用的元注解&#xff0c;它位于 spring-core 包下&#xff0c;主要用于控制某些特定上下文…

【模型参数微调】最先进的参数高效微调 (PEFT) 方法

简介 由于大型预训练模型的规模,微调大型预训练模型的成本通常高得令人望而却步。参数高效微调 (PEFT) 方法只需微调少量(额外)模型参数而不是所有模型参数,即可使大型预训练模型有效地适应各种下游应用。这大大降低了计算和存储成本。最近最先进的PEFT技术实现了与完全…

git基本使用——回退,撤销add,commit,合并分支

学习笔记 笔记中表格中的—— 表示需要回退的地方&#xff0c;也就是使用命令之后会改变的地方 网页软件分享 这是一个非常好用web端笔记画图软件&#xff0c;解决了typora画图不方便的问题

TOP10-k8s-安全措施

TOP 1、镜像安全 镜像中存在什么&#xff1f; 镜像中存在打包后的code以及base image、tools 安全建议&#xff1a; 1、代码中非必须不使用任何多余的tools或者库。 2、尽量使用小而精且签名的base image. 3、推送到私有仓库前扫描 docker image.(可以集成在CI/CD的流水线中) 4…

模板-初阶

引言&#xff1a; 在C&#xff0c;我们已经学过了函数重载&#xff0c;这使得同名函数具有多个功能。但是还有一种更省力的方法&#xff1a;采用模板。 本文主要介绍以下内容 1. 泛型编程 2. 函数模板 3. 类模板 1.泛型编程 在将这一部分之前&#xff0c;通过一个故事引…

mysql中EXPLAIN详解

大家好。众所周知&#xff0c;MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划&#xff0c;这个执行计划展示了接下来具体执行查询的方式。在日常工作过程中&#xff0c;我们可以使用EXPLAIN语句来查看某个查询语句的具体执行计划&#xff0c; 今天我们…

数据库索引的理解

目录 1.索引是什么&#xff0c;解决了什么问题 2.索引付出了什么代价 3.如何使用sql索引&#xff0c;有何注意事项 普通索引&#xff1a; 唯一索引&#xff1a; 主键索引(Primary Key Index)&#xff1a; 删除索引: 创建主键索引的基本语法: 4.索引背后的数据结构 1.索…

数据结构严蔚敏版精简版-绪论

1.基本概念和术语 下列概念和术语将在以后各章节中多次出现&#xff0c;本节先对这些概念和术语赋予确定的含义。 数据(Data)&#xff1a;数据是客观事物的符号表示&#xff0c;是所有能输入到计算机中并被计算机程序处理的符号 的总称。 数据元素(DataElement)&#xff1a;…

《Python学习》-- 实操篇一

一、文件操作 1. 1 读取文本文件 # 文件操作模式 # r (默认) - 只读模式。文件必须存在&#xff0c;否则会抛出FileNotFoundError。在这种模式下&#xff0c;你只能读取文件内容&#xff0c;不能写入或追加。 # w - 写入模式。如果文件存在&#xff0c;内容会被清空&#xff…

大模型日报2024-06-02

大模型日报 2024-06-02 大模型资讯 LLM360推出K2&#xff1a;开源大语言模型&#xff0c;计算效率超越Llama 2 70B 摘要: LLM360发布了K2&#xff0c;一款完全可复现的开源大语言模型。K2在计算效率上超越了Llama 2 70B&#xff0c;使用的计算能力减少了35%。这一突破性的模型为…

JAVA: 抽象类和接口

Java中可以可以定义不含方法体的方法&#xff0c;方法的方法体由其所在类的子类根据实际需求去实现&#xff0c;这样的方法称为抽象方法&#xff08;Abstract Method&#xff09;&#xff0c;包含抽象方法的类必须是抽象类&#xff08;Abstract Class&#xff09;。 抽象方法和…

【架构设计】Java如何利用AOP实现幂等操作,防止客户端重复操作

1实现方案详解 在Java中,使用AOP(面向切面编程)来实现幂等操作是一个常见的做法,特别是当你想在不修改业务代码的情况下添加一些横切关注点(如日志、事务管理、安全性等)时。幂等操作指的是无论执行多少次,结果都是相同的操作。 为了利用AOP实现幂等操作以防止客户端重…

基于STM32的水库预警系统的Proteus仿真

文章目录 一、水库预警系统1.题目要求2.思路2.1 OLED显示汉字2.2 水质传感器等等2.3 步进电机2.4 驱动水泵 3.仿真图3.1 未仿真时3.2 开始仿真&#xff0c;OLED开始显示3.3 提高水位&#xff0c;开启阀门和预警3.4 通过按键增大水位阈值&#xff0c;取消报警 4.仿真程序4.1 程序…

轻松拿捏C语言——【文件操作】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 目录 &#x1f…

关于模拟信道和数字信道根本区别的探讨

在学习过程中&#xff0c;了解到模拟信号、数字信号是什么&#xff0c;以及模拟信道只能传输模拟信号&#xff0c;数字信道只能传输数字信号&#xff0c;模拟信道要传输数字信号&#xff0c;需要经过调制解调器将数字信号调制成模拟信号再传输。也了解到&#xff0c;电话线是属…

谨以此文章记录我的蓝桥杯备赛过程

以国优秀结束了蓝桥杯cb组 鄙人来自电信学院&#xff0c;非科班出身&#xff0c;在寒假&#xff0c;大约2024年2月份&#xff0c;跟着黑马程序员将c基础语法学完了&#xff0c;因为过年&#xff0c;事情较多&#xff0c;没在学了。 最初就是抱着拿省三的态度去打这个比赛的&a…

C语言之旅:探索单链表

目录 一、前言 二、实现链表的功能&#xff1a; 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码&#xff1a; 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…

禁用手机连接 - Win11

问题 Win11系统自带手机连接软件&#xff0c;会在后台自启&#xff0c;不适用于全部的手机型号&#xff0c;而且常规方法无法卸载。甚至任务管理器中&#xff0c;此软件的后台进程高达76个&#xff0c;如下图。下文以Win11系统为例&#xff0c;介绍如何禁用手机连接。 解决方…

考研数学:有些无穷小不能用等价无穷小的公式?

今天要给大家分享的笔记是&#xff1a;《有些无穷小虽然是无穷小&#xff0c;但却不能用无穷小的相关公式》&#xff1a;