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

这篇具有很好参考价值的文章主要介绍了轻松上手Docker:学习如何创建和运行自己的Docker容器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

容器的介绍

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

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

docker创建容器,docker+k8s,docker,容器

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

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

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

Docker的技术架构

docker创建容器,docker+k8s,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)

docker创建容器,docker+k8s,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 axf
   PID TTY      STAT   TIME COMMAND
     1 pts/0    Ss     0:00 /bin/bash
    14 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 Stream 4 GB 1 50GB NAT

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 Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; >
   Active: active (running) since Sun 2023-09-17 17:20:23 CST; 5s ago
     Docs: https://docs.docker.com
 Main PID: 12240 (dockerd)
    Tasks: 7
   Memory: 28.4M
   CGroup: /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 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_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:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
/ # exit

感谢您阅读本文。我希望它能给您带来新的思考和启发,并为您的未来带来积极的影响。如果小伙伴们有任何问题或想法,请在下方留言,我会很乐意与您交流。谢谢各位小伙伴的支持。文章来源地址https://www.toymoban.com/news/detail-756094.html

到了这里,关于轻松上手Docker:学习如何创建和运行自己的Docker容器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 环境配置 | win10上配置Docker,创建容器并运行【图文详解】

    本文利用图文,详解了在win10上如何配置Docker,创建容器并运行,超简单版~ 电脑环境:windows10家庭版 一定要确认好版本:查看自己的电脑版本,以下操作win10家庭版和专业版都可以。 点击右侧的getDocker 即可,可以看到按钮上面对操作系统的要求为win10专业版 或企业版64位,

    2024年02月07日
    浏览(57)
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联

    看了很多资料,说做互联的一个原因是容器内ip不固定,关掉重启后如果有别的容器启动,之前的ip会被占用,所以做互联创建一个网络,让几个容器处于同一个网络,就可以互联还不受关闭再启动ip会改变的影响,但是其实我拿我做的mysql测试,不管是代码里还是sql连接工具

    2024年02月06日
    浏览(55)
  • docker 容器如何查看正在运行容器的端口映射

    1、查看docker容器的版本 2、查看正在运行的容器 3、查看容器的端口映射 总结:到此就完成了查看正在运行容器的端口映射.

    2024年02月12日
    浏览(45)
  • Docker学习路线9:运行容器

    要启动一个新的容器,我们使用 docker run 命令,后跟镜像名称。基本语法如下: 例如,要运行官方的 Nginx 镜像,我们可以使用: 这会启动一个新的容器,并将主机的端口 8080 映射到容器的端口 80。 要列出所有正在运行的容器,请使用 docker ps 命令。要查看所有容器(包括已

    2024年02月16日
    浏览(39)
  • Beats:如何在 Docker 容器中运行 Filebeat

    今天在这篇博客中,我们将学习如何在容器环境中运行 Filebeat。 为了快速了解 Filebeat 是做什么用的: Filebeat用于转发和集中日志数据 它重量轻,小型化,使用的资源更少 它作为代理安装在你的服务器上 它监视来自指定位置的日志文件 它收集日志事件并将它们转发到 Elasc

    2024年02月07日
    浏览(65)
  • 如何更改在Docker中运行容器的配置文件

    参照网上的一些方式,有的要么太麻烦,有的要么没成功。 第一种方法,就是在Docker里安装Vim,首先exec进入你的容器,进行安装(因为容器化隔离了,Linux里的Vim用不了,你得进入目标容器进行安装),按照原来的目录找到文件修改就行,但是我怎么也安装不上,无论是使用

    2024年02月11日
    浏览(40)
  • 如何配置 Docker 容器在系统启动时自动运行

    在使用 Docker 部署应用程序时,您可能希望配置容器在系统启动时自动启动。这可以通过 Systemd 在 Linux 系统上实现。本文将以一个示例命令和服务(以 pandora 为例)为基础,向您展示如何配置 Docker 容器的自动启动。 以下是详细步骤: 在终端中执行以下命令,创建一个新的

    2024年02月12日
    浏览(35)
  • 当docker中容器运行时,如何将目录和宿主机进行挂载

    容器已运行,但还想挂载文件 容器已经运行起来了,突然想给容器的目录进行挂载,通常是在运行容器时加上 -v  命令 进行挂载。运行起来的容器想挂载文件夹可以通过修改容器在宿主机的配置文件进行解决。 在配置文件中加入新的挂载 1.查看容器存放目录 2.进入该目录

    2024年01月25日
    浏览(50)
  • 【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(3)

    欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解

    2024年03月10日
    浏览(64)
  • 【云驻共创】多沙箱容器运行时Kuasar开发上手实践

    【摘要】在云原生技术发蓬勃发展的时代,底层承载应用的容器很重要,然而,单一容器隔离技术已经无法满足各种场景的要求,不同的场景都需要不同的容器形态来承载,从而产生了不同的沙箱技术。本文结合沙箱容器发展的历程,介绍华为云多沙箱容器运行时 Kuasar 项目

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包