一、 Docker概述
Docker简介
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
Docker容器技术与虚拟机的区别
相同点:docker容器技术和虚拟机技术,都是虚拟化技术。
不同点:docker有着比虚拟机更少的抽象层。 由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。所以docker效率比虚拟机效率高。达到了秒级启动的地步。
Docker相较于VM的优点
-
比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟。
-
Docker是一个开放的平台,构建、发布和运行分布式应用程序。
-
开发人员不需要关注具体是哪个Linux操作系统。
-
Google、微软(azure)、亚马逊(AWS)、IBM等都支持docker。
-
Docker支持Unix/Linux操作系统,也支持Windows和Mac。
-
一次封装,到处运行
Docker局限性
Docker用于应用程序时是最有用的,但并不包含数据。日志、数据库等通常放在Docker容器外。一个容器的镜像通常都很小,不用存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS、ceph等 ,或者docker -v 命令进行映射磁盘。总之,docker只用于计算,存储交给别人。
Docker通常用于如下场景
-
web应用的自动化打包和发布;
-
自动化测试和持续集成、发布;
-
在服务型环境中部署和调整数据库或其他的后台应用;
-
从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
二、 Docker 架构
Docker 包括三个基本概念
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
三、 Docker安装
使用ansible,复制yum源
bash
[root@ansible ~]# yum install -y docker-ce
编辑配置文件/etc/docker/daemon.json 做好仓库优化
bash
[root@localhost ~]#
cat <<EOF >>/etc/docker/daemon.json
{
"registry-mirrors": [
"https://0vmzj3q6.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://mirror.baidubce.com",
"https://dockerproxy.com",
"https://mirror.iscas.ac.cn",
"https://huecker.io",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru",
"https://vlgh0kqj.mirror.aliyuncs.com"
]
}
EOF
只能本地访问连接 并开机自启
bash
[root@localhost ~]# systemctl daemon-reload
systemctl enable --now docker
查看进程状态
bash
[root@ansible ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-12-01 20:08:58 CST; 10min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 1264 (dockerd)
Tasks: 12
Memory: 110.5M ()
CGroup: /system.slice/docker.service
└─1264 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
12月 01 20:08:57 ansible dockerd[1264]: time="2025-12-01T20:08:57.344303670+08:00" level=info msg="Deleting nftables IPv4 rule>
12月 01 20:08:57 ansible dockerd[1264]: time="2025-12-01T20:08:57.353650106+08:00" level=info msg="Deleting nftables IPv6 rule>
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.230686765+08:00" level=info msg="Loading containers: done."
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.255053382+08:00" level=warning msg="WARNING: Support for cgr>
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.255327296+08:00" level=info msg="Docker daemon" commit=46126>
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.256426145+08:00" level=info msg="Initializing buildkit"
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.293253324+08:00" level=info msg="Completed buildkit initiali>
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.311351983+08:00" level=info msg="Daemon has completed initia>
12月 01 20:08:58 ansible dockerd[1264]: time="2025-12-01T20:08:58.311481164+08:00" level=info msg="API listen on /run/docker.s>
12月 01 20:08:58 ansible systemd[1]: Started Docker Application Container Engine.
查看访问接口
bash
[root@ansible ~]# ps aux | grep docker
root 1264 0.1 2.3 2127184 80636 ? Ssl 20:08 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 2442 0.0 0.2 21988 7936 pts/0 S+ 20:21 0:00 grep --color=auto docker
查看镜像
bash
[root@ansible ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
alpine:latest 4b7ce07002c6 12.8MB 3.8MB
centos:7 be65f488b776 301MB 76.1MB
nginx:latest 553f64aecdc3 225MB 59.8MB U
安装完成。