首页 > 其他分享 >docker学习

docker学习

时间:2024-08-31 23:48:56浏览次数:4  
标签:容器 学习 docker01 镜像 docker root Docker

#docker学习

1 容器简介

1.1什么是容器

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文 件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和 一致性。

  • 更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。
  • 因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。容器可以确保您的应用拥有必需的配置和文件,使得这些应用能够在从开发到测试、再到生产的整个流程中顺利运行,而不出现任何不良问题。这样可以避免危机,做到皆大欢喜。

虽然这只是简化的示例,但在需要很高的可移植性、可配置性和隔离的情况下,我们可以利用 Linux 容器通过很多 方式解决难题。无论基础架构是在企业内部还是在云端,或者混合使用两者,容器都能满足您的需求。

1.2 容器是虚拟化?

容器可以称之为虚拟化,但也不等同于虚拟化。我们用一种简单方式来思考一下:

虚拟化使得许多操作系统可同时在单个系统上运行。

容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。

这意味着什么?首先,让多个操作系统在单个虚拟机监控程序上运行以实现虚拟化,并不能达成和使用容器同等的 轻量级效果。事实上,在仅拥有容量有限的有限资源时,您需要能够可以进行密集部署的轻量级应用。Linux 容器 可从单个操作系统运行,在所有容器中共享该操作系统,因此应用和服务能够保持轻量级,并行快速运行。

1.3 容器发展简史

2 什么是Docker?

是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源

  • 是在Linux容器里运行应用的开源工具

  • 是一种轻量级的"虚拟机”

  • Docker的容器技术可以在一台主机 上轻松为任何应用创建一个轻量级的、 可移植的、自给自足的容器。

借助 Docker ,您可将容器当做重量轻、模块化的虚拟机使用。同时,您还将获得高度的灵活性,从而实现对容器 的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境。

2.1 Docker如何工作?

Docker 是一种容器化平台,可以将应用程序和它们的依赖项打包成一个轻量级的、可移植的容器,以便在不同的
计算机环境中运行。Docker 的工作原理如下:

  1. Docker使用一个称为Dockerfile的文件来定义容器的配置。Dockerfile中包含了应用程序和依赖项的安装、 环境变量设置、文件系统设置等指令。
  2. Docker使用Dockerfile来创建一个镜像。镜像是一个只读的文件系统,包含了应用程序和依赖项以及容器运 行所需的所有文件和设置。每个镜像都有一个唯一的标识符,称为镜像 ID。
  3. 使用镜像来创建容器。容器是镜像的运行实例,是一个隔离的、可执行的环境。容器中包含了应用程序和依赖 项以及容器运行所需的所有文件和设置。容器可以在任何 Docker 支持的计算机上运行,并且可以随时启动、 停止或删除。
  4. Docker使用一个称为Docker引擎的守护程序来管理容器。Docker引擎可以创建、启动、停止和删除容器, 还可以监视容器的状态并提供日志输出和统计信息。

2.2 Docker技术是否与传统的Linux容器相同?

Docker 技术最初是基于 LXC 技术构建(大多数人都会将这一技术与“传统的” Linux 容器联系在一起),但后来它逐渐摆脱了对这种技术的依赖。

就轻量级虚拟化这一功能来看,LXC 非常有用,但它无法提供出色的开发人员或用户体验。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。

2.3 Docker的目标

Docker的设计宗旨: Build,Ship and Run Any App, Anywhere, 构建,运输,处处运行

docker的主要目标是"Build,Ship and Run any App,Angwhere"

构建:做一个docker镜像

运输:docker pull

运行:启动一个容器

每一个容器,他都有自己的文件系统rootfs.

即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行"的目 的。

这里的组件,既可以是一一个应用,也可以是一套服务,甚至是一个完整的操作系统。

传统的 Linux 容器使用 init 系统来管理多种进程。这意味着,所有应用程序都作为一个整体运行。与此相反, Docker 技术鼓励应用程序各自独立运行其进程,并提供相应工具以实现这一功能。这种精细化运作模式自有其优势。

2.4 容器的特点

容器化越来越受欢迎,因为容器是:

  • 灵活:即使是最复杂的应用也可以集装箱化。

  • 轻量级:容器利用并共享主机内核。

  • 可互换:可以即时部署更新和升级。

  • 便携式:可以在本地构建,部署到云,并在任何地方运行。

  • 可扩展:可以增加并自动分发容器副本。

  • 可堆叠:可以垂直和即时堆叠服务。

2.5 容器核心技术

docker容器本质就是宿主机的个进程,docker容器是通过namespace实现资源隔离,通过cgroup实现资源限制

通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁 盘500g)

2.6 Docker核心概念

  • 镜像

    Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向Docker容器引擎的只读模板。 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时 间,库、环境变量、和配置文件。 Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。 因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。

  • 容器

    Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每--个容器都是相互隔离、互不可 ⻅,以保证平台的安全性。 可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的 应用程序。

  • 仓库

    Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库 (Public) 或者私有
    仓库(Private) 。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

    Docker的镜像、容器、日志等内容全部都默认存储在/var/lib/docker 目录下。

    总结

    容器:

    提供在多台主机上运行应用程序相同的运行环境

    docker:

    是开源的容器引擎,GO语言开发的,是容器里运行应用的工具,是一个轻量级的虚拟机 可以利用docker在多台主机上轻松的创建并运行容器 docker容器可以被看作运行在宿主机上的一个进程,容器共享宿主机的内核, 容器间是通过namespace (命名空间、名称空间)隔离资源,通过cgroups ( 资源配额)去限制资源

    核心概念

    镜像 :运行容器的基础,包含运行应用程序所需的所有内容.

    容器 :是从镜像创建的运行实例

    仓库 :集中保存镜像的地方(公有仓库docker hub,私有仓库harbor )

4 Docker镜像相关操作

4.1 搜索官方仓库镜像

[root@docker01 ~]#  docker search centos

列表说明

参数 说明
NAME 镜像名称
DESCRIPTION 镜像说明
STARS 点赞数量
OFFICIAL 是否是官方的
AUTOMATED 是否是自动构建的

4.2 获取镜像

根据镜像名称拉取镜像

[root@docker01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

查看当前主机镜像列表

[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              080ed0ed8312        39 hours ago        142MB
centos              latest              5d0da3dc9764        18 months ago       231MB

拉第三方镜像方法

 [root@docker01 ~]# docker pull index.tenxcloud.com/tenxcloud/httpd

4.3 镜像导出和导入

#镜像导出
[root@docker01 ~]# docker save centos > docker-centos.tar.gz
#参数说明
save #保存镜像
centos #镜像名称
#镜像导入
[root@docker01 ~]# docker load -i docker-centos.tar.gz
#参数说明
load #镜像导入
-i #从tar存档文件读取

4.4 删除镜像

[root@docker01 ~]# docker  rmi centos:latest
#参数说明
rmi #删除镜像
centos #镜像名称
latest #镜像版本号

4.5 查看镜像的详细信息

[root@docker01 ~]# docker inspect centos

5 容器的日常管理

5.1 容器启动和停止

运行一个最简单的容器

[root@docker01 ~]# docker run nginx

创建容器两步走(不常用)

[root@docker01 ~]# docker create centos:latest  /bin/bash
bb7f32368ecf0492adb59e20032ab2e6cf6a563a0e6751e58930ee5f7aaef204
[root@docker01 ~]# docker start stupefied_nobel
stupefied_nobel

快速启动容器方法

[root@docker01 ~]# docker run  centos:latest  /usr/bin/sleep 20;

容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

查看正在运行容器

[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
94de8f61a48e        nginx               "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   nice_mirzakhani
[root@docker01 ~]# docker container  ls  #不常用可忽略

查看正在运行容器详细信息(包括IP地址)

[root@docker01 ~]# docker inspect docker_name/docker_id
#参数说明
inspect  #查看容器详细信息
docker_name #容器名称
docker_id  #容器id

查看所有容器(运行中及未运行)

[root@docker01 ~]# docker ps -a

停止容器

[root@docker01 ~]# docker stop docker_name/docker_id
[root@docker01 ~]# docker container kill docker_name/docker_id #不常用可忽略
#参数说明
stop  #停止容器
docker_name #容器名称
docker_id  #容器id

5.2 进入容器方法

启动时进入容器

[root@docker01 ~]# docker run -it 
#参数说明
-it 可交互终端 
[root@docker01 ~]# docker run -it nginx:latest /bin/bash 
root@79241093859e:/#

启动后进入容器

#启动一个docker并进入容器(不推荐使用)
[root@docker01 ~]# docker run -it centos:latest
[root@1bf0f43c4d2f /]# ps -ef
UID root root
PID   PPID  C STIME TTY          TIME CMD
  10015:47 pts/000:00:00 /bin/bash
 131015:47 pts/000:00:00 ps -ef
#exec进入容器方法(推荐使用)
[root@docker01 ~]# docker exec -it lucid_williamson /bin/bash
[root@b8bbb2299397 /]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 14:20 pts/0    00:00:00 /bin/bash
root          14       0  0 14:21 pts/1    00:00:00 /bin/bash
root          27      14  0 14:21 pts/1    00:00:00 ps -ef

退出/离开容器

[root@b8bbb2299397 /]# exit
exit

5.3 删除一个或多个容器

#删除一个停止后的容器
[root@docker01 ~]# docker rm docker_name/docker_id
#删除一个运行中的容器
[root@docker01 ~]# docker rm -f docker_name/docker_id
#参数说明
rm #删除容器
-f  #强制删除容器
docker_name #容器名称
docker_id  #容器id
#删除多个容器(所有)!!!谨慎操作
[root@docker01 ~]# docker rm -f `docker ps -a -q` 
[root@docker01 ~]# docker ps -qa | xargs docker rm -f

5.4 启动时进行端口映射

[root@docker01 ~]# docker run -d -p 8888:80  nginx:latest
287bec5c60263166c03e1fc5b0b8262fe76507be3dfae4ce5cd2ee2d1e8a89a9
参数:
run #运行
-d  #放入后台运行
-p #端口映射 
8888 #容器外部端口
80   #容器内部端口

不同指定映射方法

参数 说明
-p hostPort:containerPort 端口映射 -p 8080:80
-p ip:hostPort:containerPort 配置监听地址 -p 10.0.0.100:8080:80
-p ip::containerPort 随机分配端口 -p 10.0.0.100::80
-p hostPort:containerPort:udp 指定协议 -p 8080:80:tcp
-p 81:80 –p 443:443 指定多个

标签:容器,学习,docker01,镜像,docker,root,Docker
From: https://www.cnblogs.com/zgw03/p/18390922

相关文章

  • shell学习
    ⼀、简介1.1Shell环境Shell编程跟java、php编程⼀样,只要有⼀个能编写代码的⽂本编辑器和⼀个能解释执⾏的脚本解释器就可以了。Shell的解释器种类众多,常⻅的有:sh-即BourneShell。sh是Unix标准默认的shell。bash-即BourneAgainShell。bash是Linux标......
  • RH442 - 性能调优学习笔记(十)
    网络调优延迟越大,缓存越大;为什么延迟大呢?因为距离远;为什么距离远延迟要大呢?因为一次可以传输更多的数据,这样可以更快地把数据传输完整。延迟越大,思念越深;为什么延迟大呢?因为距离远;为什么距离远延迟要大呢?因为一次可以表达更多的爱,这样可以更快地把爱意表达完整。所以,越爱越不爱,越不......
  • 【AI System】Ascend NPU 架构 & CANN 平台入门学习
    AscendNPU架构&CANN平台入门学习概述昇腾NPU是专门用于AI训练/推理计算的AI专用处理器,其中的AICore能够在很大程度上提高AI计算的效率。本文将主要介绍ASCENDNPU的硬件架构&工作原理、AICore的计算模式以及异构计算平台CANN等内容。NPU硬件架......
  • Docker
    基本原理和概念Docker是使用Client-Server架构模式,DockerCLient和DockerDaemon之间通过Socket或者RESTfulAPI进行通信。DockerDaemon就是服务端的守护进程,他负责管理Docker的各种资源。DockerClient负责向DockerDaemon发送请求,DockerDaemon接收到请求之后进行处理,然后将结......
  • python学习之路 - PySpark快速入门
    目录一、PySpark实战1、前言介绍2、基础准备a、pySpark库的安装b、构建pySpark执行环境入口对象c、pySpark编程模型3、数据输入a、python数据容器转RDD对象b、读取文件内容转RDD对象4、数据计算a、map算子b、flatMap算子c、reduceByKey算子d、综合案例e、filter算子f......
  • Markdown学习
    学习、实践AI平台返回的内容并回答以下问题1.哪些内容是你掌握的?哪些内容是你没有掌握的?使用AI推荐的工具或者你喜欢的工具实践一下没有掌握的内容。(1)加粗**加粗**加粗(2)斜体*斜体*斜体(3)链接https://www.mosoteach.cn/web/index.php?c=interaction&m=index&clazz_course......
  • Markdown学习
    任务详情你熟悉Markdown格式吗?选择自己熟悉的AI平台,把下面的提示词发给ta:作为计算机技术专家、人工智能技术专家,网络空间安全专家,密码学专家,密码技术专家,请您:深入浅出的讲解一下Mardown,Markdown的详细语法推荐至少两款线上工具,至少两种线下工具讲解Markdown的高级用法,包括......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task2-分段线性曲线
    引入上一篇文章中我们了解了机器学习中最基本的模型线性模型(Linearmodels),由于其过于简单(只能调整其斜率w与截距b)无法反映真实数据中多数折线或曲线情况这种限制称为模型偏差(modelbias)。下文介绍:如何构建更复杂,误差更小的函数解决问题。注:此处的bias与线性模型中的b不同。......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task1-初步了解机器学习
    机器学习概念就是使计算机模拟人类的学习过程,通过分析大量数据,完成任务,处理问题。这个过程简单来说就是,使计算机寻找到一个函数,构建起一个模型,通过数据使模型准确化,便于输出目标结果。机器学习类型机器学习根据其所需完成的任务不同,需要寻找不同类型的函数。类型一:回归(Regr......
  • docker入门
    1、先说说容器吧1)容器到底是啥 简单来说,它就是个小工具,可以把你想跑的程序,库文件啊,配置文件都一起“打包”。然后,我们在任何一个计算机的节点上,都可以使用这个打好的包。有了容器,一个命令就能把你想跑的程序跑起来,做到了一次打包,就可以到处使用。 比如我们可以把整套zabbix环境(ht......