docker基础

docker基础

文章目录

容器

  1. 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运 行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服 务器或公有云主机上运行。
  2. 与虚拟机对比,两者都是为应用提供封装和隔离。容器由应用程序本身和依赖(比如应用程序需要的库或其他软件)组成。容器启动速度快、内核共享、进程级别隔离、宿主机直接管理、分层镜像、一台服务器可启动1000+台容器。
  3. 容器使软件具备了超强的可移植能力。例如集装箱的发明。容器意味着环境隔离和可重复性。开发人员只需为应用创建一次运行环境,然后打包成容器便可在其他 机器上运行。另外,容器环境与所在的 Host 环境是隔离的,就像虚拟机一样,但更快更简单。只需要配置好标准的 runtime 环境,服务器就可以运行任何容器。这使得运维人员的工作变得更高效, 一致和可重复。

Docker 的核心组件

  1. Docker 客户端 - Client
  2. Docker 服务器 - Docker daemon
  3. Docker 镜像 - Image
  4. Registry 仓库
  5. Docker 容器 - Container

Docker 内部具体实现

  1. 用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。
  2. Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受 Docker Client的请求
  3. Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个Job的形式的存在。
  4. Job的运行过程中,当需要容器镜像时,则从DockerRegistry中下载镜像,并通过镜像管理驱动 Graph driver将下载镜像以Graph的形式存储。
  5. 当需要为Docker创建网络环境时,通过网络管理驱动Networkdriver创建并配置Docker容器网络环 境。
  6. 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成。
  7. Libcontainer是一项独立的容器管理包,Networkdriver以及Execdriver都是通过Libcontainer来实 现具体对容器进行的操作。

docker安装

安装 Docker Docker 支持几乎所有的 Linux 发行版,也支持 Mac 和 Windows。各操作系统的安装方法可以访问:https://docs.docker.com/engine/installation/

bash 复制代码
#克隆centos-stream-8模板

#修改主机名和ip地址
[root@localhost ~]# hostnamectl set-hostname docker
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual 
[root@localhost ~]# nmcli con up ens160

#卸载旧版本(可选)
[root@docker ~]# yum remove docker-ce

#安装必要工具

# devicemapper 存储驱动已经在 docker 18.09 版本中被废弃,所以在后续的安Docker装中无需安装devicemapper支持。
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 vim      
[root@localhost ~]# yum-config-manager --add-repo 

[root@localhost ~]# yum makecache

#allinone部署

#安装软件
[root@docker ~]# yum install -y docker-ce

#配置服务
[root@docker ~]# systemctl enable docker.service --now

#验证状态
[root@docker ~ 10:08:02]# docker --version
Docker version 26.1.3, build b72abbb

[root@docker ~ 10:08:06]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: dis>
   Active: active (running) since Mon 2026-01-12 10:08:02 CST; 9s ago
     Docs: https://docs.docker.com
 Main PID: 11423 (dockerd)
    Tasks: 10
   Memory: 34.0M
...

配置镜像加速器(华为云)

bash 复制代码
#打开华为云swr容器镜像服务

[root@docker ~]# vi /etc/docker/daemon.json
{
    "registry-mirrors": [ 
"https://4763bb9ecfcd4b229c2653d0d8c88618.mirror.swr.myhuaweicloud.com" ]
}

#重启容器引擎
[root@docker ~]# systemctl restart docker

#确认配置结果
[root@docker ~]# docker info

#运行第一个容器
[root@docker ~]# docker run hello-world

#其过程可以简单的描述为:
#1. 从本地查找hello-wrold镜像,没找到
#2. 从 Docker Hub 下载hello-world镜像。
#3. 启动hello-world容器。 

#清空实验环境

#删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)       
#删除镜像hello-world
[root@docker ~]# docker rmi -f hello-world   

#关机拍摄快照

#运行第二个容器
[root@docker ~]# docker run -d -p 80:80 httpd

#其过程可以简单的描述为:
#1. 从 Docker Hub 下载 httpd 镜像。镜像中已经安装好了 Apache HTTP Server。
#2. 启动 httpd 容器,并将容器的 80 端口映射到 host 的 80 端口。

[root@docker ~]# curl 192.168.108.30

#可以访问容器的 http 服务,第一个容器运行成功,拥有了一个 WEB 服务器。

docker C/S分离部署

  • docker server端配置
bash 复制代码
#克隆两份centos-stream-8模板
#ip 192.168.108.30

[root@localhost ~]# hostnamectl set-hostname docker_server
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.30/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2 autoconnect yes
[root@localhost ~]# nmcli con up ens160

#安装软件
[root@docker_server ~]# yum install -y yum-utils device-mapper-persistent-data 
lvm2 vim      
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@docker_server~]# yum makecache
[root@docker_server ~]# yum install -y docker-ce  
[root@docker_server ~]# systemctl enable docker.service --now
[root@docker_server ~]# vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://4763bb9ecfcd4b229c2653d0d8c88618.mirror.swr.myhuaweicloud.com"]
}

#重启容器引擎
[root@docker_server ~]# systemctl restart docker

#配置服务
[root@docker_server ~]# vim /usr/lib/systemd/system/docker.service
# 在ExecStart参数中最后添加 -H tcp://0.0.0.0:2375,docker默认监听2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 
-H tcp://0.0.0.0:2375
[root@docker_server ~]# systemctl daemon-reload
[root@docker_server ~]# systemctl restart docker.service
[root@docker_server ~]# systemctl stop firewalld

#验证
[root@docker_server ~]# yum install lsof
[root@docker_server ~]# lsof -i :2375
  • docker_client端
bash 复制代码
#ip 192.168.108.31

[root@localhost ~]# hostnamectl set-hostname docker_client
[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.31/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2 autoconnect yes
[root@localhost ~]# nmcli con up ens160

#只安装docker客户端
[root@docker-client ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 vim      
[root@docker-client ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@docker-client~]# yum makecache
[root@docker-client ~]# yum install -y docker-ce-cli

#验证
[root@docker_client ~]# docker run hello-world
#client直接执行报错,没有装服务端

# client端连接server端执行命令
[root@docker-client ~]# docker -H 192.168.108.30 run hello-world

[root@docker-client ~]# docker -H 192.168.108.30 images

#这里也可以切换到Server端查看现象

#client只做管理,image和container存储在server端。

er端执行命令

root@docker-client \~\]# docker -H 192.168.108.30 run hello-world \[root@docker-client \~\]# docker -H 192.168.108.30 images #这里也可以切换到Server端查看现象 #client只做管理,image和container存储在server端。 ``` ```

相关推荐
一叶知秋yyds1 天前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
斯普信云原生组1 天前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
喵了几个咪1 天前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
工具罗某人1 天前
docker compose部署kafka集群搭建
docker·容器·kafka
safestar20121 天前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins
来一颗砂糖橘1 天前
负载均衡的多维深度解析
运维·负载均衡
楠奕1 天前
CentOS7安装GoldenDB单机搭建及常见报错解决方案
linux·运维·服务器
GCTTTTTT1 天前
远程服务器走本地代理
运维·服务器
剑锋所指,所向披靡!1 天前
Linux常用指令(2)
linux·运维·服务器
飞Link1 天前
逆向兼容的桥梁:3to2 自动化降级工具实现全解析
运维·开发语言·python·自动化