Docker入门(基础篇)

news2025/1/16 11:33:07

Docker入门

  • Docker相关概念
    • 为什么需要Docker
    • Docker的理念
    • 容器与虚拟机的比较
  • Docker的安装与使用
    • 安装Docker
    • docker 的三要素
    • Docker常用命令

Docker相关概念

为什么需要Docker

在这里插入图片描述

为什么会出现Docker了?现在我们假设你在开发一个项目,你使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,你的项目还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。请问?您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。Docker就完美解决了这个移植环境引起的环境问题就好像是从搬家到搬楼。就好像是我们再一个地方住了很久突然找到了工作需要搬过去那么到了那里这个环境肯定是不一样的,再搬的过程当中难免会出现这个问题。Docker的出现就解决了这个问题就好像有一个很大的航空母舰把你所住的那一层楼连根拔起然后放到航空母舰上运到你工作的地方这样就不会有问题了。哈哈哈哈哈只是举个例子

Docker的理念

Docker 的理念是这个集装箱、标准化、隔离.
Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。不会因为环境的变化而导致写好的程序无法部署起来

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

如果用一句话话来概括Docker的理念那么可以是:一次镜像,处处运行。从搬家到搬楼。说直白点就是我们将编写好的程序+运行环境+配置文+特殊引导第三方组件等等打成一个包这个包我们叫做镜像文件。也就是一次镜像处处运行从搬家到搬楼。这就是Docker最重要的理念.
Docker解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。

容器与虚拟机的比较

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
但是这个因此也带来了这个缺点,其缺点主要有以下几点:

  • 占用资源多
  • 启动慢
  • 冗余步骤

针对以上问题
Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写为 LXC)
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

在这里插入图片描述
下面我们比较一下这个容器和虚拟机的区别

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
  • 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

Docker的安装与使用

安装Docker

下面演示的是再Centos7下安装这个Docker的方法,其他操作系统各位铁子可以自行百度。首先如果已经装了这个Docker可以使用以下命令进行卸载

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

执行完成之后我们可以开始使用yum安装这个docker了。首先我们先安装这个依赖包

sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2

下载完成之后就可以开始安装这个Docker了。
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令

$ sudo yum install docker

当然在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。安装完成后,运行下面的命令,验证是否安装成功:

docker version
or
docker info

如果返回docker的相关信息那么就说明这个安装成功。下面我们将docker启动起来

$ sudo systemctl enable docker
$ sudo systemctl start docker

下面我们简单的使用一下这个docker.就以我们学习过程当中最基础的hello-word为例简单使用一下这个docker.
由于服务器日常崩溃了, docker 出了点问题,所以以下案例的演示是基于 Kali Linux 环境下进行的。
我们通过最简单的 image 文件 hello world,感受一下 Docker 的魅力吧!
我们直接运行下面的命令,将名为 hello-world 的 image 文件从仓库抓取到本地。

docker pull hello-world

拉取成功之后我们就可以再这个本地看到这个镜像了。我们可以使用docker images进行查看

docker images

在这里插入图片描述
现在,我们可以运行 hello-world 这个 image 文件

docker run hello-world

结果如下:
在这里插入图片描述
如果看到这个就说明我们的docker已经安装好了。恭喜你安装成功当然再安装的过程当中各位铁子可能出现各自环境问题各位铁子可以自行百度。

docker 的三要素

在这里插入图片描述

docker 的基本组成.docker主要由这个镜像、容器和仓库组成.下面我们来解释一下这三个东西分别是什么意思首先我们先来看看这个镜像指的是什么意思。
1.定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
2.作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
3.特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用。

容器
下面我们再来看看这个容器的意思
1.定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖
2.作用 : 运行程序员开发的应用程序的
3.特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。

仓库:
定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用。

总结:
说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库。

Docker常用命令

1.启动类命令

1.启动docker: systemctl start docker
2.停止docker: systemctl stop docker
3.重启docker: systemctl restart docker
4.查看docker状态: systemctl status docker
5.开机启动: systemctl enable docker
6.查看docker概要信息: docker info

7.查看docker总体帮助文档: docker --help
8.查看docker命令帮助文档: docker 具体命令 --help

由于上面的命令都比较的简单所以了再这里博主就简单的演示一个命令即可。不这个一一的演示
在这里插入图片描述
如果当我们忘了之后我们就可以使用docker help 进行查看。和Linux当中的man有点类似

2.镜像命令

docker images

下面我们使用这个命令看看这个效果如何
在这里插入图片描述
下面我们来解释一下上面这些东西的含义

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签版本号
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库源可以有多个 TAG版本,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像
下面我们来看看这个命令的选项字段的含义

  • ·-a :列出本地所有的镜像(含历史映像层)
  • ·-q :只显示镜像ID。

下面我们来演示一下
在这里插入图片描述
·docker search 某个XXX镜像名字。下面我们以这个redis为例

docker search redis
在这里插入图片描述
下面我们说一下这个命令的参数部分:
·–limit : 只列出N个镜像,默认25个。下面我们同样使用redis来做这个实验
docker search --limit 5 redis
在这里插入图片描述
·docker pull 某个XXX镜像名字。·下载镜像使用这个命令主要有下面这两种方式

docker pull 镜像名字
docker pull ·镜像名字[:TAG]

注意如果我们没有加这个TAG那么默认就是最新的。这个由于再上面已经使用过了再这里就不再演示了

查看镜像/容器/数据卷所占的空间

docker system df 

在这里插入图片描述
删除某个镜像文件
我们可以使用docker pull 将镜像拉取到本地那么我们当然也可以删除再本地的这个镜像文件我们可以使用这个

docker rmi 镜像ID
docker rmi -f 镜像ID

在这里插入图片描述
当然如果我们需要删除这个多个镜像的时候我们只需要载这个 rmi 后面依次跟着就可以了。

当然如果我们需要删除这个所有的镜像我们可以使用这个命令但是这个命令一定要谨慎使用

docker rmi $(docker images -aq)

3.容器命令

·有镜像才能创建容器, 这是根本前提(下载一个CentOS或者ubuntu镜像演示)。再这里我们以这个ubuntun为例来举这个例子

docker pull ubuntu
docker run ubuntu //但是这样没有这个命令行我们需要给我们返回一个终端进行操作

·新建+启动容器
·docker run [OPTIONS] IMAGE [COMMAND] [ARG…] 当然这里有一些选项下面我们一个一个来看

OPTIONS说明(常用):有些是一个减号,有些是两个减号

1.–name=“容器新名字” 为容器指定一个名称;
2. -d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
3. -i:以交互模式运行容器,通常与 -t 同时使用;
4. -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; 也即启动交互式容器(前台有伪终端, 等待交互);
5. -P: 随机端口映射,大写P
6.-p: 指定端口映射,小写p

下面我们来演示一下上面这些命令

docker run -it --name="ksy" ubuntu

在这里插入图片描述
我们发现这样会给我们返回一个终端。其他i代表的是这个interavtive 而其中的 t代表的意思是这个teminal终端的意思
此时我们可以使用这个docker ps 进行查看
在这里插入图片描述
如果我们想要退出这个给我们返回的这个终端我们可以使用这个exit命令

·列出当前所有正在运行的容器

docker ps 

由于这个命令非常的简单所有了再这里我直接列出这条命令和其选项字段

-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号

下面简单的演示一下
在这里插入图片描述
·退出容器
退出容器我们有两种方式。他们分别是这个

exit
ctr+p+q

再这里需要注意的是:run进去容器,ctrl+p+q退出,容器不停止.

容器的启动和停止
·启动已停止运行的容器

·docker start 容器ID或者容器名

重启容器

      docker restart 容器ID或者容器名

·停止容器

·docker stop 容器ID或者容器名

·强制停止容器

docker kill 容器ID或容器名

·删除已停止的容器注意如果容器正在运行需要加上 -f 选项进行删除

·docker rm 容器ID

·一次性删除多个容器实例

docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

再这里说一下这个
有镜像才能创建容器,这是根本前提(下载一个Redis6.0.8镜像演示)。·启动守护式容器(后台服务器)。

在大部分的场景下,我们希望 docker 的服务是在后台运行的, 我们可以过 -d 指定容器的后台运行模式。·模式docker run -d 容器名。所谓的后台运行我们希望这个他再后台默默运行
在这里插入图片描述
注意有些镜像必须使用这个 -it进行前台的这种形式进行这个交互否则会出现这个docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行,
常见就是命令行模式,表示我还有交互操作,别中断。

查看这个容器里面的日志

docker logs 容器ID

这个命令非常的简单再这里就不再演示了。铁子们可以自行测试

重新进入容器即进入正在运行的容器并以命令行交互

docker exec -it 容器id
docker attach 容器id

这两个的区别主要是这个docker exec -it 会创建一个新的进程当我们使用exit 之后容器不会停止。
而这个docker attach 进去容器之后使用exit 之后会将容器停止这是我们不想看到的。

从容器里面拷贝文件到主机里面
·docker cp 容器ID:容器内路径 目的主机路径
下面我们来演示一下
在这里插入图片描述

导入容器和导出容器
·export 导出容器的内容留作为一个tar归档文件[对应import命令]
·import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
·案例。
·docker export 容器ID > 文件名.tar。
·cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

前端显示分页详解(一)

我们在浏览页面的时候,是不是经常看到网页经常是以页面的形式给我们展现出来的,我们以淘宝的页面为例(如下图),那这样按照页面呈现有什么好处呢?这篇文章让我们来深入探究了解这其中的奥秘。 优点&#xff…

分享10个比B站更刺激的网站,千万别轻易点开

作为一个码龄8年程序员,到现在还能保持着浓密的头发和健壮的身体,全靠这10个网站让我健(偷)康(偷)生(摸)活(鱼),今天就把我收藏夹里的网站无私分享…

@Windows server 2022 搭建 AD 域服务器

文章目录1.AD(Active Directory)Windows Server环境准备2.配置AD环境3.添加角色和功能4.配置域控服务器5.配置 AD 域 OU 和用户6.Client计算机加入域控管理7.使用AD账号测试登录客户端1.AD(Active Directory)Windows Server环境准备 主机名称IP角色AD_Server192.168.1.221AD服…

Omnet+Sumo+Veins安装配置总结(Windows 10按照配置成功)

** 写在前面 ** 博主是一枚车联网小白,该博客只是完整记录了博主安装配置(Veins 4.7.1SUMO 0.30.0OMNeT 5.4.1)环境的过程,电脑是win10操作系统,期间主要参考官网给的教程和网上其他大佬的文档。 第一步&#xff1a…

数图互通高校房产管理——货币化补贴管理

数图互通房产管理系统在这方面做得比较全面; 1、货币化补贴 住房补贴主要分为按月补贴、一次性补贴、差额补贴、级差补贴和职务职称变动补贴,系统可自动计算补发金额及之后每月的应发补贴金额。系统可导出学校每月的住房补贴发放明细表,可以…

毕业设计-基于大数据的移动图书馆个性化推荐系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)

本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余,我决定把这本书精彩的部分摘录出来与大家分享。 写在前面 算法这个词听起来很深奥,其实不然。它只是解决某个问题的一套流程。 准备一碗麦片的流程也可以说是一种算法&#xff0…

谷歌将于2023年初在Android 13上推出隐私沙盒测试版

©网络研究院 互联网巨头谷歌表示,计划从明年年初开始,在运行Android 13的移动设备上推出安卓隐私沙盒测试版。 该公司表示:“隐私沙盒测试版将面向希望测试广告相关API作为其解决方案一部分的广告技术和应用开发者开放。” 为此,开发者…

解密 MySQL 的主备一致

MySQL 实现主备一致肯定是 binlog。毫不夸张的说,MySQL 能够成为现在最流行的开源数据库,binlog 功不可没。 MySQL主备的基本原理 ​ 主备流程图备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长…

漏洞深度分析|Pgadmin 命令执行漏洞

项目介绍 PostgreSQL是世界上第四大流行的开源数据库管理系统,它在各种规模的应用程序中得到了广泛的使用。而管理数据库的传统方法是使用命令行界面(CLI)工具。 PostgreSQL的图形化用户界面(GUI)工具则可以帮助用户对数据库实现更好的管理、操纵、以及可视化其数…

这些方法助你打好年终收官战

一、减少推文中的链接数量 研究表明,没有链接的推文更容易产生粉丝互动。所以你不必在每条推文中都包含链接。链接的精妙在于精而不在于杂。所以如果你限制包含链接的推文数量,你会发现你推文的粉丝参与度会增加。 少量的链接更有利于和粉丝建立信任&a…

【从零开始学习深度学习】27.卷积神经网络之VGG11模型介绍及其Pytorch实现【含完整代码】

目录1. VGG块介绍2. 构造VGG网络模型3. 获取Fashion-MNIST数据并用VGG-11训练模型4.总结AlexNet在LeNet的基础上增加了3个卷积层。但AlexNet对卷积窗口、输出通道数和构造顺序均做了大量的调整。虽然AlexNet模型表明深度卷积神经网络可以取得出色的结果,但并没有提供…

C++ Reference: Standard C++ Library reference: Containers: map: map: emplace

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/emplace/ 公有成员函数 <map> std::map::emplace template <class... Args> pair<iterator,bool> emplace (Args&&... args);构造并插入元素 如果元素的键是唯一的&#xff0c;…

【沙拉查词】沙拉查词配置教程——如何实现截图OCR翻译、截图翻译?

一、问题背景 2022年12月16日&#xff0c;沙拉查词仍然没有截图翻译的功能。 这个功能&#xff0c;在百度翻译上虽然能够实现&#xff0c;但是要额外下一个软件和挂在后台&#xff0c;总是觉得麻烦。 二、解决方法 如果你是一个quicker软件使用者&#xff0c;那么通过添加「…

python中的字典详解

目录 一.思考 二.字典定义 注意 三.字典数据的获取 注意 字典的嵌套 四.字典常用操作 1.新增、更新元素 2.删除元素 3.清空字典 4.获取全部Key 5.利用Key遍历字典 五.字典总结 六.字典实例 一.思考 为什么需要字典? 生活中的字典我们可以根据【字】来找到对应的【含…

QT-Linux安装

1、在虚拟机Ubuntu的环境安装好之后&#xff0c;详细看&#xff1a; QT Linux环境搭建——VM虚拟机和Ubuntu的安装_sgmcy的博客-CSDN博客 下面就可以直接安装linux环境下的QT了 2、唯一要注意的一点是&#xff0c;之前安装虚拟机的时候&#xff0c;磁盘空间一定要大一点&…

第十四届蓝桥杯集训——JavaC组第十四篇——嵌套循环

第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套 目录 第十四届蓝桥杯集训——JavaC组第十四篇——循环嵌套 循环嵌套是逻辑程序中的方法 对应嵌套的循环复杂度 嵌套循环示例&#xff1a; 名词解析&#xff1a; 笛卡尔积 循序命名 循环嵌套是逻辑程序中的方法 循环嵌…

“无人区”行驶8年,李诞的脱口秀路在何方?

刚从《脱口秀大会5》的舞台上下来的李诞&#xff0c;给自己找了份“新工作”——脱口秀直播带货。 12月10日晚&#xff0c;李诞入淘。讲段子、玩梗手到擒来&#xff0c;李诞将自己风趣幽默的脱口秀风格沿用到了这场“来个彩诞”直播首秀中&#xff0c;给交个朋友贡献了超3200万…

5.单点登录(Vue2.x)

概况 百度百科 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 关键词 token、session、cooki…

Java基础之《netty(13)—任务队列taskQueue》

一、任务队列 1、用户程序自定义的普通任务 2、用户自定义定时任务 3、非当前Reactor线程调用Channel的各种方法 例如在推送系统的业务线程里面&#xff0c;根据用户的标识&#xff0c;找到对应的Channel引用&#xff0c;然后调用Write类方法向该用户推送消息&#xff0c;就…