docker的安装与基础使用

news2024/9/24 15:19:43

一.docker简介

1)什么是docker

Docker是一种用于构建、打包和运行应用程序的开源平台。它基于操作系统级虚拟化技术,可以将应用程序和其依赖的库、环境等资源打包到一个可移植的容器中,形成一个轻量级、独立的可执行单元。

开发者在本地编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。

简单的理解,Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱和集装箱之间没有影响。也就是说,Docker平台就是一个软件集装箱化平台,这就意味着我们自己可以构建应用程序,将其依赖关系一起打包到一个容器中,然后这容器就很容易运送到其他的机器上进行运行,而且非常易于装载、复制、移除,非常适合软件弹性架构。 因此,就像船只、火车或卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。

2)为什么要使用docker

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。

首先, Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。

其次, Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个Docker 容器。 容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量 小。

传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而 Docker 只需要启动 10 个隔离的应用即 可。

具体来说使用Docker的主要好处包括:

  • 轻量和快速部署:Docker容器非常轻量,启动和停止容器都非常迅速。开发人员可以快速部署应用程序,减少了配置和依赖管理的麻烦。
  • 跨平台和可移植性:Docker容器可以在任何支持Docker的平台上运行,包括开发环境、测试环境和生产环境。这意味着开发人员可以在不同的环境中保持一致的开发和测试体验。
  • 环境一致性:通过使用Docker容器,可以确保应用程序在不同的环境中具有一致的运行方式,避免了“在我的机器上没问题”的常见问题。
  • 资源隔离和安全性:每个Docker容器都有自己的运行时环境,相互之间隔离,因此应用程序之间不会相互干扰。Docker还提供了诸多安全特性,可以限制容器的访问权限,保护应用程序的安全。
  • 可伸缩性:通过Docker,开发人员可以轻松创建多个容器副本,用于负载均衡和水平扩展,以满足应用程序的需求。

综上所述,使用Docker可以简化应用程序的部署、管理和扩展,提高开发和运维效率,同时带来跨平台和可移植性的好处。

二.docker的基本概念

1. 容器(Container):

        Docker镜像是Docker容器的静态定义,它包含了容器运行所需的程序、库、资源、配置等文件。镜像的分层存储结构使得镜像可以被复用、定制,同时也使得镜像可以更好地管理和存储。容器是基于镜像运行的实体,它具有自己的独立的命名空间、网络配置、进程空间和用户ID空间,因此容器封装的应用比直接在宿主运行更加安全。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。为了保证容器存储层的无状态化和高性能,应该使用数据卷或绑定宿主目录进行文件写入操作。数据卷的生存周期独立于容器,容器删除或重新运行后,数据不会丢失。

即:

  • 容器是基于镜像创建的独立运行环境,它包含了应用程序及其所有依赖项,如所需的库、环境变量等。
  • 容器在多个操作系统层面上实现了资源的隔离,使得应用程序可以在一个统一的环境中运行,并且不会相互干扰。
  • 容器可以快速启动、停止和删除,这使得应用程序的部署和管理变得非常方便。

2. 镜像(Image):

        Docker镜像是一个特殊的文件系统,包含了操作系统完整的root文件系统,其体积往往很大。在设计时,Docker使用Union FS技术将其设计为分层存储的架构,每一层构建完就不会再发生改变。因此,在构建镜像时,需要小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。分层存储的特征使得镜像的复用和定制变得更容易。

即:

  • 镜像是Docker容器的构建块,它包含了应用程序运行所需的一切内容。
  • 镜像是只读的,它可以从底层文件系统和元数据中构建,这使得镜像具有可重复性和可分发性。
  • 镜像可以通过Dockerfile文件定义和构建。Dockerfile是一个文本文件,其中包含了一组指令,用于指导Docker构建过程。
  • 镜像具有层次结构,每个层代表了在构建过程中进行的一项更改。这种分层结构提供了高效的镜像分享和存储方式。

3. 仓库(Repository):

        Docker Registry是一个集中存储镜像文件的地方,类似于我们之前常用的代码仓库。它可以包含多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像。仓库名通常以两段式路径形式出现,前者表示多用户环境下的用户名,后者则是对应的软件名。仓库分为公开仓库和私有仓库两种形式,即Docker Registry公开服务和私有Docker Registry。

即:

  • 仓库是用于存储和管理Docker镜像的地方。它类似于代码版本控制系统中的代码仓库。
  • 公共仓库,如Docker Hub,是一个全球性的服务,提供了大量的公共镜像供用户获取和使用。
  • 私有仓库通常由个人或组织在本地或云端搭建,用于存储和共享私有镜像。这种方式可以确保镜像的安全性和私密性。
  • 仓库可以包含多个仓库镜像标签(Tag),每个标签代表一个特定版本的镜像。标签可以用于区分镜像的不同版本和配置。

3.1.Docker Registry 公开服务

        Docker Registry是一个开放给用户使用的Registry服务,允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。最常使用的公开服务是Docker Hub,它是默认的Registry,拥有大量高质量的官方镜像。

        在国内访问Docker Hub可能会比较慢,因此国内的一些云服务商提供了针对Docker Hub的镜像服务(Registry Mirror),这些镜像服务被称为加速器,可以直接从国内的地址下载Docker Hub的镜像,比直接从Docker Hub下载速度会提高很多。

3.2.私有Docker Registry

        用户可以在本地搭建私有 Docker Registry,也可以使用官方提供的 Docker Registry 镜像作为私有 Registry 服务。

开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,不包含图形界面、镜像维护、用户管理和访问控制等高级功能。在商业化版本 Docker Trusted Registry 中提供了这些高级功能。除了官方的 Docker Registry 和第三方软件实现的 Docker Registry API,还有一些第三方软件提供了用户界面和一些高级功能,如VMWare Harbor和Sonatype Nexus。

三.docker的安装与部署

Docker划分为CE和EE,CE为社区版(免费,支持周期三个月),EE为企业版(强调安全,付费使 用)。

Docker CE每月发布一个Edge版本(17.03,17.04,17.05……),每三个月发布一个Stable版本 (17.03,17.06,17.09……);docker EE和stable版本号保持一致,每个版本提供一年维护。

安装之前需要卸载旧版本docker

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

1)脚本安装

 curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh ./get-docker.sh --dry-run

注:这里不推荐使用脚本安装,因为脚本安装无法选择版本

2)使用yum安装

  •  版本环境为:centos7.9
  • 参照阿里云的安装部署的步骤即可:docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站 (aliyun.com)

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker

校验: 

 3)配置镜像加速器

        国内从Docker Hub拉取镜像有时会遇到困难,此时可以配置镜像加速器。

(1)从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用 加速器地址:https://registry.docker-cn.com 即可。 

(2)中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址 https://docker.mirrors.us tc.edu.cn/ 配置加速器即可。进一步的信息可以访问:http://mirrors.ustc.edu.cn/help/dockerhub.ht ml?highlight=docker

(3)阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://c r.console.aliyun.com/#/accelerator

(4)DaoCloud 加速器:注册 DaoCloud 账户(支持微信登录),然后访问: https://www.daocloud.io/ mirror#accelerator-doc

我这里使用的阿里云镜像加速器,

  • 注册成功后,搜索容器镜像服务
  • 点击立即开通
  • 点击镜像工具里的镜像加速器
  • 根据步骤配置即可

 3.1)有daemon文件

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

 即:是否有daemon文件有的话直接在此文件基础上修改即可

3.2)无daemon文件

##配置daemon文件
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tyms1eoc.mirror.aliyuncs.com"]
}
EOF
##重新加载 systemd 守护进程的配置文件。
systemctl daemon-reload
##重新启动docker服务
systemctl restart docker

4)下载系统镜像(Ubuntu、 centos)

(4.1)搜索官方仓库镜像

       命令: docker search <镜像名称>

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

(4.2)拉取镜像 

命令:docker pull

命令格式:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

docker pull ubuntu:20.04
docker pull centos:7

四.docker的基础使用

1.基于下载的镜像创建两个容器

创建容器:容器名一个为自己名字全拼,一个为首名字字母

1.1创建一个容器,容器名为LL

docker run -d --name LL ubuntu:20.04 

 这个命令会在后台以守护进程的形式运行一个 Ubuntu 20.04 镜像的容器,并将容器命名为 "LL"。

具体而言,`docker run` 命令用于启动一个新的容器,并将其作为后台进程运行。`--name` 参数用于指定容器的名称,`ubuntu:20.04` 表示要使用 Ubuntu 20.04 镜像作为容器的基础镜像,`-d` 参数用于在后台运行容器,而不是前台运行。

 1.2创建一个容器,容器名为L(名称不能为一个字母所以我这里加了个1)

docker run -it --name L1 centos:7 /bin/bash

这个命令会在后台以交互式终端的形式运行一个 CentOS 7  镜像的容器,并将容器命名为 "L1"。

具体而言,`docker run` 命令用于启动一个新的容器,并将其作为后台进程运行。`--name`  参数用于指定容器的名称,`centos:7` 表示要使用 CentOS 7 镜像作为容器的基础镜像,`-it` 参数用于在交互式终端中运行容器,而不是在后台运行。


2.容器的启动、 停止及重启操作

容器的启动、停止和重启操作可以通过以下命令来实现:

1. 启动容器

方法1:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

其中,`OPTIONS` 是一些可选的参数,

 `-d` 参数表示在后台运行容器

`-n` 参数表示指定容器的名称

`-p` 参数表示将容器的端口映射到主机的端口等等

`IMAGE` 表示要使用的镜像

`TAG` 或 `@DIGEST` 表示使用镜像的标签或摘要值

`COMMAND` 表示要在容器中运行的命令或程序

`ARG...` 表示传递给命令或程序的参数列表

方法2:

docker start 容器名

2. 停止容器

要停止一个正在运行的容器,可以使用 `docker stop`  命令。

docker stop 容器名

也可以使用`docker kill ` 命令

docker kill 容器名

 3. 重启容器

要重启一个正在运行的容器,可以使用 `docker restart` 命令。

docker restart 容器名

注意,重启容器时,容器的状态会被清除,并从上次停止的位置开始重新启动。如果容器中有任何数据,请确保将其保存到外部存储中,以免丢失。

3.怎么查看正在运行的容器和所有容器?

  • 要查看当前正在运行的容器,可以使用以下命令:
docker ps

该命令会列出所有正在运行的容器的 ID 和名称,以及它们的状态信息,包括运行状态、创建时间、占用的 CPU 和内存等。

  • 要查看所有已经创建的容器,可以使用以下命令:
docker ps -a

该命令会列出所有已经创建的容器的 ID 和名称,以及它们的状态信息,包括运行状态、创建时间、占用的 CPU 和内存等。

  • 另外,还可以使用 `docker container ls` 命令来列出所有容器,无论它们是否正在运行。该命令会列出所有容器的 ID、名称、镜像名称、创建时间、状态等信息。


4.怎么退出容器: 两种方法分别实现?

方法1:

        使用 `exit` 命令或`ctrl+D`这种办法会退出·容器并停止容器

在容器内部,可以使用 `exit` 命令退出容器。该命令会将容器的进程 ID 发送给父进程,从而使容器停止运行。

exit

2. 使用 `Ctrl+Q+P` 命令

这个命令会退出容器但是不会停止容器,也就是容器还会在后台继续运

5.怎么连接到运行的容器?

要连接到正在运行的容器,可以使用以下命令:

docker exec -it 容器名 /bin/bash

其中,该命令会进入容器内部的 Bash shell,让你可以像在本地机器上一样操作容器。

如果容器中安装了其他应用程序或服务,可以根据需要修改该命令的参数,以便连接到相应的服务。

注意,使用该命令连接到容器后,如果容器中的服务停止运行或容器被删除,你将无法再连接到该容器。因此,在连接到容器之前,请确保容器中的服务正在运行,并且容器不会被意外删除。

6.查看容器或镜像的内部信息?

查看容器的详细信息,可以使用`docker inspect`命令:

docker inspect 容器名

 


7.如何查看所有镜像?

要查看当前主机镜像列表,可以使用以下命令:

docker images

该命令会列出本地所有的镜像,包括本地创建的镜像和从其他 Docker 镜像仓库中拉取的镜像。

如果要查看某个特定的镜像,可以在命令中指定镜像名称或 ID,例如:

docker images --filter "reference=<image_name>"

其中,`<image_name>` 是镜像的名称或 ID。该命令会列出与指定名称或 ID 相关的所有镜像。

五.报错解决

1:镜像加速器配置有问题

[root@localhost docker]# docker pull centos:7
Error response from daemon: Head "https://registry-1.docker.io/v2/library/centos/manifests/7": dial tcp: lookup registry-1.docker.io on 192.168.136.2:53: no such host

 原因分析: Docker 客户端无法连接到 Docker Registry 服务器。

解决办法:

1.查看本地网络连接,可以尝试ping www.baidu.com看是否可以ping通

2.查看daemon文件是否有错

3.DNS解析有问题

可以修改为:8.8.8.8  114.114.114.114

 修改后成功拉取镜像

 

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

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

相关文章

QT TLS initialization failed问题(已解决) QT基础入门【网络编程】openssl

问题: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 这个问题的出现主要是使用了https请求:HTTPS ≈ HTTP + SSL,即有了加密层的HTTP 所以Qt 组件库需要OpenSSL dll 文件支持HTTPS 解决: 1.加入以下两行代码获取QT是否支持opensll以…

【学会动态规划】单词拆分(24)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

向gitee推送代码

目录 一、Gitee创建仓库 二、将刚刚创建的仓库放到虚拟机上 2.1 https 方式克隆仓库 2.2 ssh的方式克隆仓库 三、本地开发&#xff0c;推送 3.1 查看是否有远程库 3.2 推送代码 3.3 查看是否推送成功 一、Gitee创建仓库 二、将刚刚创建的仓库放到虚拟机上 2.1 https 方式…

codesys和HMI通讯

codesys可视化有2种&#xff1a; 网页web // 类似于路由器管理那样&#xff0c;登录网页就能操作 本地HMI // 其他品牌的触摸屏 符号配置&#xff1a; 1 编译需要的变量 2 导出XML文件 3 触摸屏软件加载XML文件

kafka--kafka的基本概念-topic和partition

一、kafka的基本概念-topic和partition 1、topic &#xff08;主题 &#xff09; topic是逻辑概念 以Topic机制来对消息进行分类的&#xff0c;同一类消息属于同一个Topic&#xff0c;你可以将每个topic看成是一个消息队列。 生产者&#xff08;producer&#xff09;将消息发…

我只是用了个“笨”方法,一个月后不再惧怕英文文档

在日常工作中&#xff0c;尤其是程序员时时刻刻都会与英文打交道&#xff0c;虽然我们尽可能的在互联网和中文书籍中寻找我们需要的信息&#xff0c;但是&#xff0c;有时候总是不尽人意。对待翻译过来的文档或者书本可能有些定义依然无法明确理解&#xff0c;回到它原有的场景…

【二叉树前沿篇】树

【二叉树前沿篇】树 1 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是…

Django模型基础

文章目录 一、models字段类型概述属性命名限制使用方式逻辑删除和物理删除常用字段类型 二、常用字段参数常用字段选项(通过字段选项&#xff0c;可以实现对字段的约束) 实践创建模型执行迁移命令 并 创建超级用户登录admin后台添加文件和图片字段定义模型字段和约束及在Admin后…

C#生产流程控制(串行,并行混合执行)

开源框架CsGo https://gitee.com/hamasm/CsGo?_fromgitee_search 文档资料&#xff1a; https://blog.csdn.net/aa2528877987/article/details/132139337 实现效果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37…

大语言模型之四-LlaMA-2从模型到应用

最近开源大语言模型LlaMA-2火出圈&#xff0c;从huggingface的Open LLM Leaderboard开源大语言模型排行榜可以看到LlaMA-2还是非常有潜力的开源商用大语言模型之一&#xff0c;相比InstructGPT&#xff0c;LlaMA-2在数据质量、培训技术、能力评估、安全评估和责任发布方面进行了…

图像处理常见的两种拉流方式

传统算法或者深度学习在进行图像处理之前&#xff0c;总是会首先进行图像的采集&#xff0c;也就是所谓的拉流。解决拉流的方式有两种&#xff0c;一个是直接使用opencv进行取流&#xff0c;另一个是使用ffmpeg进行取流&#xff0c;如下分别介绍这两种方式进行拉流处理。 1、o…

基于深度学习创建-表情符号--附源码

表情符号深度学习概述 如今,我们使用多种表情符号或头像来表达我们的心情或感受。它们充当人类的非语言线索。它们成为情感识别、在线聊天、品牌情感、产品评论等的关键部分。针对表情符号驱动的故事讲述的数据科学研究不断增加。 从图像中检测人类情绪非常流行,这可能是由…

【ROS】参数服务器--理论模型与参数操作(C++)

一、概念介绍 参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 作用&#xff1a;存储一些多节点…

Gradio详细文档——快速部署可视化人工智能应用

前言 Gradio是一个开源的Python库&#xff0c;用于快速构建机器学习和数据科学演示的应用。它可以帮助你快速创建一个简单漂亮的用户界面&#xff0c;以便向客户、合作者、用户或学生展示你的机器学习模型。此外&#xff0c;还可以通过自动共享链接快速部署模型&#xff0c;并获…

消息中间件相关面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱发博客的嗯哼&#xff0c;爱好Java的小菜鸟 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…

VALN-hybrid模式

实验拓扑及要求 一、实验思路 1.R1-R3按要求配置&#xff0c;R2不划分vlan使其全部都可以访问 2.交换机和路由器的交换机直连接口设为hybrid模式且R4-R6不带vlan标签访问路由器 3.交换机和交换机的两个直连接口设为hybrid模式且只允许R4-R6所在vlan标签通过 4.R4-R6只允许其…

野火i.mx 6ull上手

目录 屏幕驱动打印信息 实现触摸屏校验 开发板连接WIFI 连接操作 申请路由器动态IP和ping网络通断 WiFi信息保存位置 常用wifi操作&#xff08;wpa_cli工具&#xff09; NFS网络文件系统共享 虚拟机安装NFS服务器 开发板安装NFS客户端 控制开发板 找出硬件设备所对…

Debian10: 安装nut服务器(UPS)

UPS说明&#xff1a; UPS的作用就不必讲了&#xff0c;我选择是SANTAKTGBOX-850&#xff0c;规格为 850VA/510W&#xff0c;可以满足所需&#xff0c;关键是Debian10自带了驱动可以支持&#xff0c;免去安装驱动&#xff0c;将UPS通过USB线连接服务器即可&#xff0c;如下图所示…

wvp-gb28181-pro较新版本的调整说明

gitee地址 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;负责实现核心信令与设备管理后台部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等…

Git判断本地是否最新

场景需求 需要判断是否有新内容更新,确定有更新之后执行pull操作&#xff0c;然后pull成功之后再将新内容进行复制到其他地方 pgit log -1 --prettyformat:"%H" HEAD -- . "origin/HEAD" rgit rev-parse origin/HEAD if [[ $p $r ]];thenecho "Is La…