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端。 ``` ```

相关推荐
袁煦丞 cpolar内网穿透实验室2 小时前
可视化管理服务器:cpolar 内网穿透实验室第 725 个成功挑战
运维·服务器·远程工作·内网穿透·cpolar
上海云盾安全满满2 小时前
服务器的攻击与防御方法
运维·服务器
快乐的划水a2 小时前
上下文简析
linux·运维·服务器
HABuo2 小时前
【linux进程控制(一)】进程创建&退出-->fork&退出码详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
2301_765715142 小时前
Linux中组合使用多个命令的技巧与实现
linux·运维·chrome
十六年开源服务商2 小时前
WordPress运维服务中的内容营销策略
java·运维·spring
想唱rap2 小时前
MySQL内置函数
linux·运维·服务器·数据库·c++·mysql
菜萝卜子2 小时前
【Linux】PVE系统创建规范的VM模版
linux·运维·服务器
独自归家的兔2 小时前
K8s 核心概念深度解析:Pod 是什么?
云原生·容器·kubernetes