Docker实战

news/发布时间2024/9/20 5:55:25

目录

  • docker简介
  • docker体系架构与基本概念
  • 安装docker
    • 使用APT方式安装Docker
    • 使用二进制文件方式安装(可自行尝试)
  • Docker镜像
    • 什么是Docker镜像
      • 使用 Docker 默认的镜像存储路径
      • 自定义 Docker 的镜像存储路径(不推荐,故不做演示,可自行尝试)
    • 使用命令行工具管理 Docker 的镜像
    • 构建自己的镜像
      • 使用“docker commit”命令构建镜像
      • 使用Dockerfile文件构建镜像
        • 什么是Dockerfile
        • 创建一个简单的Dockerfile文件

docker简介

  Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
  1.DockerClient客户端
  2.Docker Daemon守护进程
  3.Docker Image镜像
  4.DockerContainer容器
  5.镜像仓库

docker体系架构与基本概念

  Docker 实现了应用代码和底层运行环境之间的耦合。它可以将一个复杂系统中的各个模块进行容器化,同时提供了复杂均衡和失败迁移功能。应用的容器化,满足了敏捷开发、动态迁移、标准化的要求,从而大大提高了效率。

  Docker 客户端和 Docker 守护进程可以运行在同样的系统上,也可以运行在不同的系统上。用户可以将一个 Docker 客户端连接到远程 Docker 守护进程中。Docker 客户端和守护进程,通过sockets 或 RESTFul API 进行沟通。

在这里插入图片描述
Docker 体系架构中的组成部分及其功能特性

组成部分功能特征
Docker 客户端通常指 Docker 提供的命令行工具,是 Docker 最基本的用户接口。用户通过 Docker 客户端提交 Docker 指令,Docker 守护进程接收并执行该指令。Docker 也有图形化的客户端工具。
Docker 守护进程在 Docker 宿主机上运行 Docker ,实际上运行的是 Docker 守护进程。用户并不直接和 Docker 守护京承交互,而是通过 Docker 客户端的命令和它进行交互。
Docker 镜像一个 Docker 镜像是一个只读的模板。
Docker 容器通过 Docker 镜像可以创建 Docker 容器。 Docker 的容器可以保存任何东西,而这些东西是运行一个应用所必须的。可以把 Docker 看成是一个虚拟机。 Docker 容器可以被运行、开启、停止、移动和删除。每一个容器都是一个分离的、安全的应用平台。 Docker 容器是 Docker 的运行组件。
Docker 镜像仓库Docker 的镜像仓库用于保存 Docker 镜像,它可以是公共的存储地方,也可以是私有的存储地方。

安装docker

宿主机系统:Ubuntu 22.04
Docker版本:24.0.5

使用APT方式安装Docker

sudo apt-get update
sudo apt search docker
sudo apt-get install docker.io
sudo docker --version
或者
sudo docker info
或者
systemctl status docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

使用二进制文件方式安装(可自行尝试)

至此 docker 已经安装完成

Docker镜像

什么是Docker镜像

   Docker 的镜像是一个模板,或者说是一个只读文件。在该模板长包含应用和应用运行时所需要的以来环境。 Docker 的镜像采用的是分层的文件系统,每一次对镜像的修改将以“读写层”的形式增加到原来的只读文件的木板上。
   Docker 默认的镜像的存储路径是“/var/lib/docker”,也可以自定义其他路径。

使用 Docker 默认的镜像存储路径

通过下面的命令可以得知 Docker 镜像的存储路径。

sudo docker info | grep "Docker Root Dir"

在这里插入图片描述
从镜像仓库中搜索一个符合的镜像

sudo docker search mysql

在这里插入图片描述
拉取该镜像

sudo docker pull mysql

在这里插入图片描述
查看镜像

sudo docker images

刚刚现在的MySQL镜像
切换到root用户,即可看到我们刚刚下载的MySQL镜像

sudo su -
cd /var/lib/docker/image/overlay2/imagedb/content/sha256

在这里插入图片描述

自定义 Docker 的镜像存储路径(不推荐,故不做演示,可自行尝试)

# 创建新的镜像存储路径“/data/docker/images”,该路径用于保存Docker的镜像文件
sudo midkr -p /data/docker/images
# 创建Docker守护进程的配置文件
cd /etc/docker
sudo touch daemon.josn
# 配置内容如下:
{"graph":"/data/docker/images"
}
# 重新加载docker服务,并重启docker
systemctl daemon-reload
systemctl restart docker

使用命令行工具管理 Docker 的镜像

命令说明
docker build命令可以用来使用 Dockerfile 创建镜像。
docker search [IMAGE NAME]在拉取镜像之前,可以通过该命令搜索符合的镜像
docker images列出本机上所有镜像。该命令行可以使用通配符,以找到符合条件的一系列镜像
docker inspect [IMAGE NAME] /[CONTAINER ID]通过docker images 命令只能查看镜像的基本信息,而通过 docker inspect 命令则可以查看镜像或者容器的详细信息
docker import用于从归档文件中创建镜像。
docker pull [IMAGE NAME]将镜像来取到本地。镜像名必须包含命名空间喝仓库名。如果在一个仓库中存在多个镜像,则必须指定TAG,即指定版本信息,否则使用默认的TAG “latest”
docker push [IMAGE NAME]将本地的镜像上传到镜像仓库中
docker rmi [IMAGE NAME] /[IMAGE ID]将不需要的镜像删除。如果删除多个镜像,则需要使用空格将他们隔开;可以使用参数-f强制删除镜像
docker tag用于给镜像打标签。
docker save -o, --output将归档文件输出到的文件。
docker load用于从 tar 归档文件或者标准输入流载入镜像。

将镜像归档
在这里插入图片描述
将归档文件重新加载为镜像,加载完以后需要重新命名。
在这里插入图片描述

镜像重命名
在这里插入图片描述

删除镜像
在这里插入图片描述

构建自己的镜像

要构建自己的镜像又两种方式:1.使用“docker commit”命令;2.使用Dockerfile文件。

使用“docker commit”命令构建镜像

“docker commit” 命令是基于一个容器来创建镜像。
在这里插入图片描述
在这里插入图片描述
  这是执行完 “docker commit” 命令以后,本地镜像列表的对比。使用 “docker commit” 命令构建镜像比较简单,也比较直观。但是再实际环境中并不会这样使用,因为:只有生成镜像的人才知道执行过什么命令、怎么生成的镜像,而别人根本无从得知。这就是一种“黑箱”操作,不利于镜像的维护,也不能实现复用。

使用Dockerfile文件构建镜像

什么是Dockerfile

  Dockerfile 是一个文本文件,其中包含了一条条的指令,每一条指令都用于构建镜像中的一层。Dockerfile 文件可以使用“docker build”命令进行编译。在编译过程中,每一条指令的内容描述了该层应该如何进行构建。当我们需要定制自己额外的需求时,只需要再Dockerfile文件的基础上添加或者修改指令,重新生成新的镜像即可。

创建一个简单的Dockerfile文件

创建一个Dockerfile文件,在该文件中输入一下命令。

FROM nginx
RUN echo '<h1>This is a Demo HTML</h1>' > /usr/share/nginx/html/index.html

当前目录下执行

sudo docker build -f ./Dockerfile -t test:1.0.1  .
# 其中-f:指定Dockerfile;-t:为镜像打标签;
sudo docker images

构建过程
在这里插入图片描述
查看镜像
在这里插入图片描述
使用新生成的镜像创建容器。

sudo docker run -d -p 8899:80 [IMAGE ID]
# 其中-d:打印容器id;-p:映射端口号

在这里插入图片描述
使用浏览器访问宿主机的8899端口,可以看到如图所示:
在这里插入图片描述
停止容器

sudo docker stop [CONTAINER ID]

在这里插入图片描述
删除容器

sudo docker rm [CONTAINER ID]

在这里插入图片描述

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

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

相关文章

git之分支管理

一.理解分支 我们看下面这张图片&#xff1a; 在版本回退⾥&#xff0c;你已经知道&#xff0c;每次提交&#xff0c;Git都把它们串成⼀条时间线&#xff0c;这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前&#xff0c;只有⼀条时间线&#xff0c;在Git⾥&#xff0c;这个分⽀…

Leetcode : 215. 数组中的第 K 个最大元素

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路&#xff1a;最开始排序算法&…

Python多功能课堂点名器、抽签工具

一、问题缘起 去年&#xff0c;ChatGPT浪潮袭来&#xff0c;我懂简单的Python基础语法&#xff0c;又有一些点子&#xff0c;于是借助于人工智能问答工具&#xff0c;一步一步地制作了一个点名器&#xff0c;也可以用于抽签。当时&#xff0c;我已经设计好页面和基础的功能&am…

Windows虚拟主机如何开启网页debug模式

前不久&#xff0c;有客户咨询想要知道如何开启网页debug模式,以便后期他网站出现异常可以自行排查。这边了解到他当前使用的是Hostease 的Windows 虚拟主机&#xff0c;而开启网页debug模式的操作步骤如下&#xff1a; 1.Hostease的Windows虚拟主机都是带Plesk面板的,因此需要…

什么是物联网网关?

随着物联网的发展&#xff0c;企业发现自己面临着集成多种设备和协议的挑战&#xff0c;其中许多设备和协议具有不同的功率和连接要求。这种组合还可能包括遗留技术。物联网网关正在成为构建强大物联网和在边缘计算场景中提供计算能力的重要组成部分。 物联网网关执行哪些功能&…

spring Boot快速入门

快速入门为主主要届介绍java web接口API的编写 java编辑器首选IntelliJ IDEA 官方链接&#xff1a;https://www.jetbrains.com/idea/ IEDA 前言 实例项目主要是web端API接口的使用&#xff0c;项目使用mysql数据库&#xff0c;把从数据库中的数据的查询出来后通过接口json数…

数据结构day4

实现创建单向循环链表、创建结点、判空、输出、头插、按位置插入、尾删、按位置删除 loop_list.c #include "loop_list.h" loop_p create_head() {loop_p L(loop_p)malloc(sizeof(loop_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->le…

网络原理 - HTTP/HTTPS(5)

HTTPS HTTPS也是一个应用层协议.在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的. 这就导致了在传输过程中出现了一些被篡改的情况. 臭名昭著的"运营商劫持" 下载一个天天动听. 未被劫持的效果,点击下载按钮,就会弹出天天动听的…

解决鸿蒙模拟器卡顿的问题

缘起 最近在学习鸿蒙的时候&#xff0c;发现模拟器非常卡&#xff0c;不要说体验到鸿蒙的丝滑&#xff0c;甚至到严重影响使用的程度。 根据我开发Android的经验和在论坛翻了一圈&#xff0c;最终总结出了以下几个方案。 创建模拟器 1、在DevEco Virtual Device Configurat…

JOISC2022 复制粘贴(区间DP,字符串hash)

题目描述 题面 分析 这道题考场没有任何头绪&#xff0c;赛后也是看了许多题解才明白状态设计和转移的一步步思考过程。 首先我们需要想到 无论是屏幕上的字符串&#xff0c;还是剪切板上的字符串&#xff0c;在任何时候都必须是目标串的子串。这个非常好像&#xff0c;如果不…

自动驾驶消息传输机制-LCM

需要用到LCM消息通讯&#xff0c;遂研究下。 这里写目录标题 1 LCM简介2. LCM源码分析3 LCM C教程与实例3.1 安装配置及介绍3.2 创建类型定义3.3 初始化LCM3.4 发布publish一个消息3.5 订阅和接收一个消息3.6 LCM进程间通讯3.7 注意事项&#xff1f;3.7.1 当数据结构定义的是数…

期货开户保证金保障市场正常运转

期货保证金是什么&#xff1f;在期货市场上&#xff0c;采取保证金交易制度&#xff0c;投资者只需按期货合约的价值&#xff0c;交一定比率少量资金即可参与期货合约买卖交易&#xff0c;这种资金就是期货保证金。期货保证金&#xff08;以下简称保证金〕按性质与作用的不同。…

php基础学习之错误处理(其二)

在实际应用中&#xff0c;开发者当然不希望把自己开发的程序的错误暴露给用户&#xff0c;一方面会动摇客户对己方的信心&#xff0c;另一方面容易被攻击者抓住漏洞实施攻击&#xff0c;同时开发者本身需要及时收集错误&#xff0c;因此需要合理的设置错误显示与记录错误日志 一…

YOLOv5-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOT…

微信小程序本地开发

微信小程序本地开发时不需要在小程序后台配置服务器域名直接在小程序项目中填写后端在本机的IP地址和端口号 如图&#xff08;第一步&#xff09; 填写地址后发现报错&#xff0c;url不是合法域名&#xff0c;则在详情设置不校验合法域名 如图&#xff08;第二歩&#xff09;…

深度学习500问——Chapter01:数学基础

文章目录 前言 1.1 向量和矩阵 1.1.1 标量、向量、矩阵、张量之间的联系 1.1.2 张量与矩阵的区别 1.1.3 矩阵和向量相乘结果 1.1.4 向量和矩阵的范数归纳 1.1.5 如何判断一个矩阵为正定 1.2 导数和偏导数 1.2.1 导数偏导计算 1.2.2 导数和偏导数有什么区别 1.3 特征值和特征向量…

贪心算法(算法竞赛、蓝桥杯)--修理牛棚

1、B站视频链接&#xff1a;A27 贪心算法 P1209 [USACO1.3] 修理牛棚_哔哩哔哩_bilibili 题目链接&#xff1a;[USACO1.3] 修理牛棚 Barn Repair - 洛谷 #include <bits/stdc.h> using namespace std; const int N205; int m,s,c,ans; int a[N];//牛的位置标号 int d[N…

创建型设计模式 - 建造者设计模式 - JAVA

建造者设计模式 一. 简介二. 使用场景分析三. 代码案例3.1 创建ComputerBuilder 类3.2 修改子类3.3 修改工厂3.4 测试 四. 建造者模式案例 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都…

简述:回车\n、换行\r、回车键(Enter)

在Windows中&#xff1a; ‘\r’ (回车)&#xff1a;将光标回到当前行的行首(而不会换到下一行)&#xff0c;之后的输出会把之前的输出覆盖。\n (换行)&#xff1a;将光标换到当前位置的下一位置&#xff0c;而不会回到行首。 不同系统的文本行尾有不同&#xff08;最c蛋的就是…
推荐文章