轻松上手Docker:学习如何创建和运行自己的Docker容器

news/2024/12/23 5:50:49/

文章目录

  • 轻松上手Docker:学习如何创建和运行自己的Docker容器
    • 容器的介绍
    • Docker的技术架构
    • 容器的工作机制(Docker)
    • 容器的关键技术 - Namespace
      • Namespace隔离说明
    • 容器的关键技术 - Cgroup
    • Docker环境搭建
      • 1)安装基础软件包
      • 2)下载docker-ce repo文件
      • 3)安装
      • 4)启动
      • 5)配置镜像加速器
    • Docker基本操作
    • 尝试运行一个容器

轻松上手Docker:学习如何创建和运行自己的Docker容器

容器的介绍

容器化技术,它是一种虚拟化技术,用于在计算机系统中隔离和运行应用程序。容器将应用程序及其所有依赖项打包到一个独立的、可移植的环境中,使其能够在不同的计算机或操作系统上运行。

容器的特点:隔离性、轻量级、可移植性、弹性伸缩、生态系统。

在这里插入图片描述

目前最流行的容器化技术是Docker,它提供了一个开放的平台,用于构建、分发和运行容器。除了Docker,还有其他容器化技术,如Kubernetes、Podman、Containerd等。

容器的精髓在于镜像,而docker是容器镜像标准的制定者,因此,学习容器是绕不开docker的。

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器

Docker的技术架构

在这里插入图片描述

  1. Docker 客户端(Client): Docker 客户端是用户与 Docker 交互的命令行工具或图形界面工具。用户可以使用 Docker 客户端发送命令和指令,例如构建镜像、创建容器、启动容器等。Docker 客户端与 Docker 主机进行通信,通过 API 接口或者 Docker 配置文件进行交互。常见的 Docker 客户端包括 Docker CLI(命令行界面)和 Docker Dashboard(图形用户界面)。
  2. Docker 主机(Docker Host): Docker 主机是安装和运行 Docker 引擎的物理或虚拟机器。它负责管理容器的创建、启动、停止和销毁等生命周期操作。Docker 主机上运行着 Docker 引擎,它接收来自 Docker 客户端的指令,并执行相应的操作。Docker 主机上可以同时运行多个容器,并提供了资源隔离、网络管理和存储管理等功能。
  3. 镜像仓库(Registry): 镜像仓库是用于存储和分发 Docker 镜像的中央仓库。镜像仓库允许用户上传、下载和共享镜像。当用户在 Docker 主机上创建镜像时,可以选择将镜像推送到镜像仓库中,以便其他人可以使用这个镜像。Docker Hub 是官方提供的公共镜像仓库,用户可以从中获取各种常用的镜像。除了 Docker Hub,还有一些私有和第三方的镜像仓库可供选择,例如 Harbor、Azure Container Registry 等。

在整个架构中,Docker 客户端与 Docker 主机通过 API 接口进行通信,Docker 主机负责管理容器的运行和资源隔离。镜像仓库则是存储和分享镜像的中央仓库,用户可以从中拉取镜像或将自己创建的镜像推送至其中。这样,Docker 技术架构实现了应用程序的打包、分发和部署,提供了一种便捷、可移植和可扩展的容器化环境。

容器的工作机制(Docker)

在这里插入图片描述

  1. Docker 客户端(Docker Client):Docker 客户端是用户与 Docker 交互的命令行工具或 GUI 工具。它向 Docker 引擎发送指令,如拉取镜像、创建容器、启动容器等。
  2. Docker 引擎(Docker Engine):Docker 引擎是 Docker 的核心组件,负责管理容器的生命周期,包括创建、启动、停止、删除等操作。它还提供了一组 API 接口和命令行工具,供用户与 Docker 进行交互。
  3. 容器(Container):容器是从容器镜像创建的运行实例。它是一个独立的、隔离的执行环境,其中应用程序可以在其中运行。容器具有自己的文件系统、网络和进程空间,但与主机系统是隔离的。

Docker 客户端和 Docker 引擎是分离的两个组件,Docker 客户端发送指令给 Docker 引擎,Docker 引擎执行指令并管理容器的生命周期。容器则是从容器镜像创建的运行实例,它具有隔离性、资源管理和网络管理等特性,使得应用程序可以在一个独立且可移植的环境中运行。

容器的关键技术 - Namespace

Namespace是Linux内核对系统资源进行隔离和虚拟化的特性,这些系统资源包括:

PID :PID 命名空间提供了进程 ID 的隔离。

User:User 命名空间提供了用户和用户组的隔离。

UTS:UTS 命名空间提供了主机名和域名的隔离。

IPC:IPC 命名空间提供了进程间通信(IPC)资源的隔离,如共享内存、信号量和消息队列等。

Net:Net 命名空间提供了网络资源的隔离,包括网络接口、IP 地址、路由表和网络命名空间等。

Mnt:Mnt 命名空间提供了文件系统挂载点的隔离。

Namespace隔离说明

以交互模式启动一个centos容器,并在其中运行/bin/bash程序。执行ps命令查看到“/bin/bash”是PID=1的进程,即docker将其隔离于宿主机中的其他进程

[root@localhost ~]# docker run -it centos /bin/bash
[root@24b87937f13d /]# ps axfPID TTY      STAT   TIME COMMAND1 pts/0    Ss     0:00 /bin/bash14 pts/0    R+     0:00 ps axf

打开另一个终端,使用docker inspect查看容器进程在宿主机上的真实PID。实际上,该容器上运行的”/bin/bash”在宿主机上是PID=96745的进程

[root@localhost ~]# docker inspect 24b87937f13d | grep Pid"Pid": 96745,"PidMode": "","PidsLimit": 0,

容器的关键技术 - Cgroup

Cgroups:Linux Control Group

  • 作用:限制一个进程组对系统资源的使用上限,包括CPU、内存、Block I/O等

  • Cgroups还能设置进程优先级,对进程进行挂起和恢复等操作

  • 原理:将一组进程放在一个Cgroup中,通过给这个Cgroup分配指定的可用资源,达到控制这一组进程可用资源的目的

  • 实现:在Linux中,Cgroups以文件和目录的方式组织在操作系统的/sys/fs/Cgroup路径下。该路径中所有的资源种类均可被Cgroup限制

Docker环境搭建

操作系统内存处理器硬盘网络
Centos 8 Stream4 GB150GBNAT

1)安装基础软件包

[root@docker ~]# yum install -y vim net-tools bash-completion yum-utils# 或者退出重新登录,为了自动补全
[root@docker ~]# bash 

2)下载docker-ce repo文件

[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# ls
CentOS-Stream-AppStream.repo
CentOS-Stream-BaseOS.repo
CentOS-Stream-Debuginfo.repo
CentOS-Stream-Extras-common.repo
CentOS-Stream-Extras.repo
CentOS-Stream-HighAvailability.repo
CentOS-Stream-Media.repo
CentOS-Stream-NFV.repo
CentOS-Stream-PowerTools.repo
CentOS-Stream-RealTime.repo
CentOS-Stream-ResilientStorage.repo
CentOS-Stream-Sources.repo
docker-ce.repo

3)安装

# 查看docker版本 
[root@docker ~]# yum list docker-ce --showduplicates | sort -r   # 默认安装最新版
[root@docker ~]# yum install -y docker-ce 
# 安装指定版本
[root@docker ~]# yum install -y docker-ce-20.10.22 docker-ce-cli-20.10.22

4)启动

# 查看docker版本
[root@docker ~]# docker -v
Docker version 24.0.6, build ed223bc#开启docker服务、开机自启、查看状态
[root@docker ~]# systemctl enable docker.service 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@docker ~]# systemctl start docker.service 
[root@docker ~]# systemctl status docker.service 
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; >Active: active (running) since Sun 2023-09-17 17:20:23 CST; 5s agoDocs: https://docs.docker.comMain PID: 12240 (dockerd)Tasks: 7Memory: 28.4MCGroup: /system.slice/docker.service└─12240 /usr/bin/dockerd -H fd:// --containerd=/run/conta>Sep 17 17:20:22 docker systemd[1]: Starting Docker Application Conta>
Sep 17 17:20:22 docker dockerd[12240]: time="2023-09-17T17:20:22.760>
Sep 17 17:20:22 docker dockerd[12240]: time="2023-09-17T17:20:22.770>
Sep 17 17:20:23 docker dockerd[12240]: time="2023-09-17T17:20:23.159>
Sep 17 17:20:23 docker dockerd[12240]: time="2023-09-17T17:20:23.241>
Sep 17 17:20:23 docker dockerd[12240]: time="2023-09-17T17:20:23.250>
Sep 17 17:20:23 docker dockerd[12240]: time="2023-09-17T17:20:23.250>
Sep 17 17:20:23 docker dockerd[12240]: time="2023-09-17T17:20:23.263>
Sep 17 17:20:23 docker systemd[1]: Started Docker Application Contai>

5)配置镜像加速器

以阿里云镜像加速器为例

[root@docker ~]# mkdir -p /etc/docker
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://as5wzlk8.mirror.aliyuncs.com"]
}
EOF
{"registry-mirrors": ["https://as5wzlk8.mirror.aliyuncs.com"]
}
[root@docker ~]# cat /etc/docker/daemon.json
{"registry-mirrors": ["https://as5wzlk8.mirror.aliyuncs.com"]
}# 重新加载配置文件
[root@docker ~]# systemctl daemon-reload 
# 重新启动docker服务
[root@docker ~]# systemctl restart docker.service # 标准的完整名称 服务器              仓库/分类 镜像   版本
registry.cn-hangzhou.aliyuncs.com/cloudcs/centos:latest
# 版本默认情况下,如果不指定,那么默认为 latest

Docker基本操作

# 镜像的下载
[root@docker ~]# docker pull mysql
# 镜像重命名
[root@docker ~]# docker tag mysql:latest mysql:666
# 镜像的删除
[root@docker ~]# docker rmi mysql:latest
# 镜像历史信息
[root@docker ~]# docker history mysql:latest
# 镜像保存
[root@docker ~]# docker save mysql alpine > /tmp/all.tar
# 镜像导入
[root@docker ~]# docker load -i /tmp/all.tar

尝试运行一个容器

[root@docker ~]# docker run -tid --name d1 --restart always alpine
44936d56248d3c9657e502168ea91098b2caa69a065a7d712dd4d3048b3f508d# 查看正在运行容器
[root@docker ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND     CREATED          STATUS          PORTS     NAMES
44936d56248d   alpine    "/bin/sh"   26 seconds ago   Up 25 seconds             d1# 进入容器
[root@docker ~]# docker exec -ti d1 /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
/ # exit

感谢您阅读本文。我希望它能给您带来新的思考和启发,并为您的未来带来积极的影响。如果小伙伴们有任何问题或想法,请在下方留言,我会很乐意与您交流。谢谢各位小伙伴的支持。


http://www.ppmy.cn/news/1128192.html

相关文章

AutoDL初体验

AutoDL初体验 真的很给力&#xff01; 相同的配置&#xff0c;在华为云上价格令人望而却步&#xff0c;AutoDL真的良心价&#xff01; 搞了个4090体验一下&#xff0c;一小时只要两块五&#xff08;主要是&#xff0c;之前没有GPU&#xff0c;好多想玩的LLM开源项目都体验不了&…

数据一致性:核心概念与实现策略

在当今的信息时代&#xff0c;数据已经成为了企业的核心资产之一。然而&#xff0c;随着数据量的不断增长和应用场景的不断扩大&#xff0c;如何保证数据的一致性成为了一个重要的挑战。数据一致性不仅关系到系统的正确性和可靠性&#xff0c;也直接影响到用户的体验和企业的业…

安装python-ldap

执行如下命令安装python-ldap python -m pip install python-ldap报错如下&#xff1a; note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for python-ldap Failed to build python-ldap ERROR: Could n…

一个链接分享自制的产品图册

​在商业中我们都需要一本产品册展现自家的产品特点&#xff0c;方便更多的人群挑选产品。但是纸质版的消费量最大&#xff0c;还不好存放和管理。不妨试试制作一本电子版的产品图册&#xff0c;无论是新手还是有经验者都能轻松上手 接下来给大家分享这款网站---FLBOOK在线制作…

ES语法以及ajax相关操作

ajax ajax一个前后台配合的技术&#xff0c;它可以让javascript发送http请求&#xff0c;与后台通信&#xff0c;获取数据和信息。ajax技术的原理是实例化xmlhttp对象&#xff0c;使用此对象与后台通信。jquery将它封装成了一个函数$.ajax()&#xff0c;我们可以直接用这个函数…

XXE 漏洞及案例实战

文章目录 XXE 漏洞1. 基础概念1.1 XML基础概念1.2 XML与HTML的主要差异1.3 xml示例 2. 演示案例2.1 pikachu靶场XML2.1.1 文件读取2.1.2 内网探针或者攻击内网应用&#xff08;触发漏洞地址&#xff09;2.1.4 RCE2.1.5 引入外部实体DTD2.1.6 无回显读取文件 3. XXE 绕过3.1 dat…

C语言 cortex-A7核 UART总线 实验

一、C 1&#xff09;uart4.h #ifndef __UART4_H__ #define __UART4_H__ #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h&quo…

大数据快速入门开发环境篇:CentOS 7安装配置Hadoop大数据框架开发环境

注意&#xff1a;在开始安装之前&#xff0c;请确保您的CentOS 7系统已经正确安装和配置了Java。Hadoop需要Java来运行。 目录 一、下载与配置Hadoop框架&#xff1a;1.1、下载与环境变量设置1.2、XML配置文件Hadoop设置1.3、格式化HDFS 二、Hadoop 3.x版本中hdfs命令的问题解…