【Docker】Docker介绍|部署|简单使用|镜像操作|容器操作|自动构建镜像

news2024/11/23 22:31:07

文章目录

  • Docker
    • Docker介绍
      • Docker简介
      • Docker的主要特点
      • 为什么要使用Docker?
      • Docker核心概念
      • (1)镜像(Image)
        • (2)容器(Container)
        • (3)仓库(Repository)
      • Docker的核心架构
    • Docker 安装
      • Docker自动化安装
      • Docker 手动安装
    • Docker镜像操作
    • Docker快速入门
    • Docker 容器操作
    • Docker 自动构建镜像
    • 1. Dockfile 编写[¶](#1-dockfile)
    • 2. 镜像使用[¶](#2)

Docker

Docker介绍

Docker简介

官方地址:https://docs.docker.com/

Docker 是一个基于go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 或者 Windows机器上,也可以实现虚拟化。

在这里插入图片描述

Docker 是一个用于开发、传送和运行应用程序的开放平台。Docker 使您能够将应用程序与基础设施分开,以便您可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础设施。通过利用 Docker 的快速交付、测试和部署代码的方法,您可以显着减少编写代码和在生产中运行代码之间的延迟。Docker(opens new window)是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,节约有限的生命。

在这里插入图片描述

Docker的主要特点

  1. 轻量化:Docker 容器使用的资源非常少,相比虚拟机技术,一个完整的 Docker 镜像通常只有几十 MB,启动几乎是立即的。
  2. 标准化:Docker 对应用及其依赖进行标准化打包,解决了“在我机器上可以运行,在你机器上就不行”的问题。
  3. 可移植性:可以在不同的平台和不同的环境中运行,例如开发环境、测试环境和生产环境。
  4. 版本管理和组件重用:Docker 可以进行版本管理、组件重用、快速部署等。
  5. 隔离性:Docker 能够提供独立的运行环境,应用程序在 Docker 容器的运行和外部世界进行隔离。

为什么要使用Docker?

  1. 环境一致性:在开发、测试和生产环境之间建立一致性,消除了“在我电脑上运行得好好的”这种情况。
  2. 便于持续集成和持续部署:Docker能够以最小的代价快速地启动和关闭,这让持续集成和持续部署变得非常简单。
  3. 隔离性和安全性:Docker容器之间彼此隔离,一个容器的崩溃不会影响到其他的容器,提供了额外的层次的安全性。
  4. 微服务架构:Docker非常适合微服务架构。每个微服务可以运行在自己的容器中,每个容器之间是相互隔离的,有自己独立的运行环境。
  5. 资源利用率高:Docker容器共享主机的内核,不需要像虚拟机那样为每个应用程序运行一个完整的操作系统,资源占用更少,启动更快。

因此,Docker 在软件开发、测试和运维中有着广泛的应用。

Docker核心概念

Docker三大核心概念:镜像 Image、容器 Container、仓库 Repository

(1)镜像(Image)

Docker 镜像(Image)可以被认为是 Docker 容器的模板。Docker 镜像是用于创建 Docker 容器的基础。简单来说,Docker 镜像就是一个只读的模板,用来创建 Docker 容器,一个镜像可以创建多个容器。

镜像包含了运行容器所需的所有内容,包括代码、运行时、库、环境变量和配置文件等。Docker 镜像是由文件系统叠加而成,每一层都代表 Dockerfile 中的一条指令,层与层之间是互相依赖的。

(2)容器(Container)

Docker 容器(Container)是 Docker 镜像(Image)运行时的实体。容器可以被创建、启动、停止、删除、暂停等。简单来说,容器就是用镜像创建的运行实例。它可以被启动、开始、停止、移动和删除。每个容器之间是相互隔离的、保护的,每个容器都有自己的文件系统,每个容器之间运行的进程都是相互隔离的。

容器的定义和镜像几乎一样,也是一系列的层的集合,不同的是容器的最上面那一层是可读可写的,而镜像的最上层是只读的。

(3)仓库(Repository)

Docker 仓库(Repository)是用来保存镜像的地方。Docker 仓库可以被认为是代码控制中的代码仓库一样。Docker 用户可以在仓库中创建一个账户,存储和分享自己的镜像。也可以从 Docker 仓库中下载别人分享的镜像。

Docker 仓库分为公开和私有两种形式。公开的 Docker 仓库是 Docker 公司提供的,可以被所有用户使用。DockerHub 就是最知名的公开 Docker 仓库。私有的 Docker 仓库可以在本地部署,只能被内部用户使用。

总结来说,Docker 的工作流程是,首先从 Docker 仓库中获取 Docker 镜像,然后用这个镜像创建 Docker 容器,最后对容器进行操作(启动、停止等)。

Docker的核心架构

在 Docker 主要有以下几部分组成:

  1. Docker 客户端,负责与 Docker 守护进行通信;
  2. Docker 守护进程,负责管理 Docker 镜像和 Docker 容器;
  3. Docker 镜像,负责产生 Docker 容器实例;
  4. Docker 容器,包含了应用程序和其所依赖环境。
  5. Docker Hub,已经制作好了很多镜像

在这里插入图片描述

Docker 安装

Docker自动化安装

官方的一键安装方式:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

国内daocloud一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

Docker 手动安装

# 安装依赖工具 
# yum-utils提供yum-config-manager
# device mapper存储驱动程序需要device-mapper-persistent-data和lvm2。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 配置镜像源, 我们使用的是阿里云的源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast

# 安装 Docker
yum install docker-ce docker-ce-cli containerd.io

安装命令执行成功之后,使用下面命令来管理Docker 守护进程:

# 查看 docker 版本
docker version
# 启动 docker 服务
systemctl start docker 
# 关闭 docker 服务
systemctl stop docker
# 重启 docker 服务
systemctl restart docker
# 查看 docker 状态
systemctl status docker
# 设置开机启动
systemctl enable docker

Docker镜像操作

镜像操作主要包括:

  1. 查看镜像
  2. 搜索镜像
  3. 下载镜像
  4. 运行镜像
  5. 删除镜像
  6. 保存镜像
  7. 加载镜像

示例命令:

# 1. 查看镜像
docker images             # 查看所有镜像
docker images -q          # 只查看镜像的ID
docker images --no-trunc  # 显示镜像完整信息

# 2. 搜索镜像
docker search 镜像名

# 3. 下载镜像
docker pull 镜像名:版本     # 不指定 TAG, 则默认使用 latest

# 4. 运行镜像
docker run -it 镜像名:版本 程序                # 交互式运行容器
docker run -it --name=标签名 镜像名:版本 程序   # 容器指定名字
docker run -itd 镜像名:版本 程序               # 后台运行容器

# 5. 删除镜像
docker rmi -f 镜像名                   # 删除指定镜像
docker rmi -f 镜像ID                   # 删除指定镜像
docker rmi -f $(docker images -qa)    # 删除所有镜像

# 6. 保存镜像
docker save 镜像名:版本 -o xxx.tar

"""
[root@bogon ~]# docker save alpine:latest -o myalpine.tar
[root@bogon ~]# ls
anaconda-ks.cfg  myalpine.tar
"""

# 7. 加载镜像
docker load -i xxx.tar

"""
[root@bogon ~]# docker load -i myalpine.tar
24302eb7d908: Loading layer [==================================================>]  5.811MB/5.811MB

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       latest    e66264b98777   3 weeks ago    5.53MB
centos       latest    5d0da3dc9764   9 months ago   231MB
"""

Docker快速入门

大致的步骤如下:

  1. 查看 Docker 服务运行状态;
  2. 查看本地镜像;
  3. 从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu:18.04 镜像;
  4. 再次查看本地镜像;
  5. 使用 ubuntu:18.04 镜像构建容器,并交互式运行容器;
  6. 在容器内部执行 LS 命令;
  7. 退出容器;
  8. 查看本地容器实例;
  9. 再次启动停止的容器;
  10. 退出并停止容器.

执行命令如下:

# 0. 查看 Docker 服务运行状态;
systemctl status docker

# 1. 查看本地镜像;
docker images
"""
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
"""

# 2. 从 Docker Hub 拉取基础镜像, 我们此处选择 ubuntu 镜像;
docker search ubuntu
docker search ubuntu --no-trunc
docker pull ubuntu
"""
Using default tag: latest
latest: Pulling from library/ubuntu
405f018f9d1d: Pull complete
Digest: sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
"""

# 3. 再次查看本地镜像;
docker images
docker image ls
"""
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
ubuntu       latest    27941809078c   9 days ago   77.8MB
"""

# 4. 使用 ubuntu 镜像构建容器,并交互式运行容器,并在容器中执行 LS 命令;
docker run -it ubuntu:latest /bin/bash
"""
root@abcced6d5ee8:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
"""

# 5. 退出容器;
exit
"""
exit
[root@bogon docker]#
"""

# 6. 查看本地容器实例;
docker ps
docker ps -a
"""
CONTAINER ID   IMAGE           COMMAND       CREATED              STATUS                      PORTS     NAMES
abcced6d5ee8   ubuntu:latest   "/bin/bash"   About a minute ago   Exited (0) 35 seconds ago             sad_montalcini
"""

# 7. 再次启动停止的容器;
docker start 容器ID
"""
[root@bogon docker]# docker start abcced6d5ee8
abcced6d5ee8
"""

# 8. 再次进入容器
docker exec -it abcced6d5ee8 /bin/bash
"""
root@abcced6d5ee8:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
"""

# 9. 退出容器, 并停止容器
exit
docker stop 容器ID
"""
[root@bogon docker]# docker ps
CONTAINER ID   IMAGE           COMMAND       CREATED         STATUS         PORTS     NAMES
abcced6d5ee8   ubuntu:latest   "/bin/bash"   9 minutes ago   Up 6 minutes             sad_montalcini
[root@bogon docker]# docker stop abcced6d5ee8
abcced6d5ee8
[root@bogon docker]# docker exec -it abcced6d5ee8 /bin/bash
Error response from daemon: Container abcced6d5ee8e6980f8271d3e78d18d0dff708e377c22c7798006a133ac73559 is not running
"""

Docker 容器操作

容器操作主要包括:

  1. 查看容器
  2. 启动容器
  3. 停止容器
  4. 删除容器
  5. 进入容器
  6. 容器导出
  7. 容器导入
# 1. 查看容器
docker ps       # 查看正在运行的容器实例
docker ps -a    # 查看正在运行或者已停止的容器实例

# 2. 运行容器
docker start 容器ID     # 启动容器
docker restart 容器ID   # 重启容器

# 3. 停止容器
docker stop 容器ID

# 4. 删除容器
docker rm -f 容器ID              # 删除指定容器
docker rm -f $(docker ps -qa)   # 删除所有容器

# 5. 进入容器
# attach 退出终端会导致容器停止
# exec 不会导致容器停止
docker attach 容器ID
docker exec -it 容器ID /bin/bash

# 6. 容器导出
docker export 容器ID > xxx.tar

# 7. 容器导入
docker import xxx.tar xxx:tag

Docker 自动构建镜像

我们也可以使用 Dockerfile 构建镜像,Dockerfile 其实就是把我们前面的一系列安装、配置命令写到一个文件中,通过 docker build 命令,一键完成镜像的构建。接下来,我们以 python3.7.5 作为基础镜像,来构建我们自己的镜像。

1. Dockfile 编写

# 继承的基础镜像
FROM python:3.7.5
MAINTAINER "wechat:chinesecpp, email:chinacpp@hotmail.com"

# 安装 app 需要的 Python 包
RUN pip install pandas flask scikit-learn jieba zhconv -i https://pypi.tuna.tsinghua.edu.cn/simple

# 设置工作目录
WORKDIR /root/app

# COPY 命令使用的是相对路径
COPY app/ /root/app

# 显式声明容器服务监听的端口
EXPOSE 5000

# 当启动容器时默认执行的命令
CMD ["python", "app.py"]

接下来,使用下面命令构建 Docker 镜像:

docker build -t spam:1.0 .

2. 镜像使用

镜像构建完成之后,启动镜像创建容器实例:

docker run -d -p 8000:5000 spam:1.0

持久化本地存储镜像:

docker save spam:1.0 -o spam.tar

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

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

相关文章

LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models

ChatGPT 是基于大型语言模型(LLM)的人工智能应用。 GPT 全称是Generative Pre-trained Transformer。-- 生成式预训练变换模型: Generative(生成式):可以根据输入生成新的文本内容,例如回答问题…

PAL(Program-Aided Language Model)

PAL(Program-Aided Language Model)是一种结合生成式语言模型(如 GPT)和程序执行能力的技术框架。它的核心思想是通过让语言模型生成代码或程序来解决复杂任务,程序执行的结果反过来增强语言模型的输出准确性和逻辑性。…

Flutter:AnimatedSwitcher当子元素改变时,触发动画

AnimatedSwitcher中的子元素 由:CircularProgressIndicator() 改变为:Image.network(https://cdn.uviewui.com/uview/swiper/1.jpg) 则会触发动画class _MyHomePageState extends State<MyHomePage> {bool flag true;overrideWidget build(BuildContext context) {retur…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中&#xff0c;中间件&#xff08;Middleware&#xff09;是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑&#xff0c;像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用&#xff0c;也可以只在特定页…

QT中QString类的各种使用

大部分的QString使用可以参考:QT中QString 类的使用--获取指定字符位置、截取子字符串等_qstring 取子串-CSDN博客 补充一种QString类的分离:Qt QString切割(Split()与Mid()函数详解)_qstring split-CSDN博客 1. Trimmed和Simplified函数(去除空白) trimmed&#xff1a;去除了…

经济增长初步

1.人均产出 人均产出&#xff0c;通常指的是一个国家、地区或组织在一定时期内&#xff0c;每个劳动人口平均创造的生产总值。它是衡量一个地区或国家经济效率和劳动生产率的重要指标。具体来说&#xff0c;人均产出可以通过以下公式计算&#xff1a; 人均产出总产出/劳动人口…

c#使用高版本8.0步骤

一、找到项目所在怒路&#xff0c;记事本打开.proj文件。 二、记事本打开此文件&#xff0c;<PropertyGroup>后面加入如下语句&#xff1a; <LangVersion>8.0</LangVersion> 关闭并保存。 根据提示全部重新加载即可。

Flutter:SlideTransition位移动画,Interval动画延迟

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationControllerlate AnimationController _controller;overridevoid initState() {super.…

深入浅出分布式缓存:原理与应用

文章目录 概述缓存分片算法1. Hash算法2. 一致性Hash算法3. 应用场景Redis集群方案1. Redis 集群方案原理2. Redis 集群方案的优势3. Java 代码示例:Redis 集群数据定位Redis 集群中的节点通信机制:Gossip 协议Redis 集群的节点通信:Gossip 协议Redis 集群的节点通信流程Red…

SQL注入--联合注入--理论

什么是SQL注入&#xff1f; SQL注入&#xff08;SQL Injection&#xff09;是一种常见的Web安全漏洞。 形成的主要原因是web应用程序在接收相关数据参数时未做好过滤&#xff0c;将其直接带入到数据库中查询&#xff0c;导致攻击者可以拼接执行构造的SQL语句&#xff0c;从而获…

用web前端写出一个高校官网

所实现的效果如链接&#xff1a; http://127.0.0.1:5500/school.html <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>xigongshang</title> <style> * {margin: 0;padding: 0;} a{ text-decoration: none…

slice介绍slice查看器

Android Jetpack架构组件(十)之Slices - 阅读清单 - 腾讯云开发者社区-腾讯云 slice 查看器apk 用adb intall 安装 Releases android/user-interface-samples GitHubMultiple samples showing the best practices in the user interface on Android. - Releases android/u…

有关博客博客系统的测试报告 --- 初次进行项目测试篇

文章目录 前言一、博客系统的项目背景二、博客系统的项目简介1.后端功能1.1 用户管理1.2 博客管理1.3 权限管理 2.前端功能2.1 用户界面 测试计划测试工具、环境设计的测试动作功能测试访问博客登录页面博客首页测试博客详情页博客编辑页 自动化测试自动化测试用例自动化测试脚…

QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现

一、编码问题 在计算机编程中&#xff0c;流&#xff08;Stream&#xff09;是一种抽象的概念&#xff0c;用于表示数据的输入或输出。根据处理数据的不同方式&#xff0c;流可以分为字节流&#xff08;Byte Stream&#xff09;和字符流&#xff08;Character Stream&#xff0…

Hive基础面试-如何理解复用率的

1. 模型的复用率你们是怎么做的&#xff1f; 简单直白的说就是你的模型复用率如何&#xff0c;在业务方是否认可该模型&#xff0c;也是衡量模型建设的一个标准&#xff0c;复用率数&#xff1a;数仓模型涉及的核心是追求模型的复用和共享&#xff0c;引用系数越高&#xff0c;…

如何使用 Python 开发一个简单的文本数据转换为 Excel 工具

目录 一、准备工作 二、理解文本数据格式 三、开发文本数据转换为Excel工具 读取CSV文件 将DataFrame写入Excel文件 处理其他格式的文本数据 读取纯文本文件&#xff1a; 读取TSV文件&#xff1a; 四、完整代码与工具封装 五、使用工具 六、总结 在数据分析和处理的…

知识中台:提升企业知识管理的智能化水平

在数字化转型的浪潮中&#xff0c;企业知识管理的智能化水平成为提升竞争力的关键。HelpLook知识中台通过集成先进的AI技术&#xff0c;为企业提供了一个智能化的知识管理平台。 一、知识管理智能化的重要性 智能化的知识管理不仅能够提高信息检索的效率&#xff0c;还能通过…

MAC借助终端上传jar包到云服务器

前提&#xff1a;保证工程本地已打包完成&#xff1a;图中路径即为项目的target目录下已准备好的jar包 第一步&#xff1a;打开终端&#xff08;先不要连接自己的服务器&#xff09;&#xff0c;输入下面的上传命令&#xff1a; scp /path/to/local/app.jar username192.168.1…

生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件

我们知道MPSOC或者ZYNQ的启动文件BOOT.BIN 通常由三最少三部分组成 1&#xff0c;FSBL 第一阶段引导加载器 2&#xff0c;BIT流文件 3&#xff0c;用户APP文件 用户使用这个三个文件生成BOOT.BIN时候往往用SDK的用户界面&#xff0c;分别选择这三个文件之后生成。其实这种方…

【机器学习】——朴素贝叶斯模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…