Docker 是一个开源的应用容器引擎,它最初是用 Go 语言开发的。Docker 允许开发者将应用程序及其依赖、库和环境打包到一个可移植的容器中,这个容器可以在任何支持 Docker 的 Linux 或 Windows 机器上运行,保证了应用在不同环境之间的一致性和可迁移性。
| 容器 | 虚拟机 |
|---|---|
快速启动 | 启动速度相对较慢 |
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量 | 完全隔离。每个虚拟机都有独立的硬件资源 |
容器相当于宿主机的进程,性能几乎没有损耗 | 需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,有一定的性能损耗 |
单机容量能够支持成百上千个容器 | 单机容量只能支持最多几十个虚拟机 |
所有容器共享宿主机内核 | 每个虚拟机都有独立的操作系统和内核 |
Docker,这一革命性的容器化技术,以其简单、轻量且高效的特点,彻底改变了软件开发和部署的方式。理解Docker的三个核心概念——镜像、容器和仓库,是掌握这一技术的基础。
Docker镜像,可以被视为容器的“蓝图”。它是一个静态的文件,包含了创建Docker容器所需的所有指令和代码。镜像是由多层叠加而成的,每层对应于构建过程中的一个指令。这些层是只读的,确保了镜像的可复现性和一致性。用户可以通过编写Dockerfile来定义和构建自己的镜像,Dockerfile是一个包含了一系列构建指令的文本文件。
容器是Docker镜像的运行实例。当您从镜像启动一个容器时,Docker会在镜像的最上层添加一个读写层,用于保存容器运行时的状态更改。容器是高度隔离的,它们拥有自己的文件系统、网络配置和进程空间,这使得容器可以在不影响宿主机或其他容器的情况下运行。容器可以被轻松地启动、停止、删除和重启,它们的生命周期管理是通过Docker提供的工具和API来实现的。
Docker仓库是存储和分发Docker镜像的地方。Docker Hub是Docker官方提供的一个公共仓库,用户可以在这里上传或下载公开的镜像。仓库可以有多个标签,每个标签对应于仓库中的一个镜像版本,这允许用户为同一仓库中的不同版本镜像指定不同的标签。除了公共仓库,Docker还支持私有仓库,这使得企业在内部网络或云服务中存储和管理自己的镜像成为可能。
Docker只支持64位系统
安装 Docker的依赖环境
yum install -y yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装DOCKER最新版本
yum install -y docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker.service
查看docker版本信息
docker version

查看docker基本信息
docker info

列出本地镜像
docker images

搜索镜像
docker search 镜像名称

拉取镜像
docker pull 镜像名称

删除镜像
docker rmi 镜像ID

上图镜像ID一样,但是TAG不一样若我要删除TAG为web4的镜像可以用以下命令
docker rmi nginx:web4

用ID删除会删除所有id为 2ac752d7aeb1的镜像,,效果如下
docker rmi -f 2ac752d7aeb1
如果不加-f会报错Error response from daemon: conflict: unable to delete 2ac752d7aeb1 (must be forced) - image is referenced in multiple repositories
意思是有多个镜像ip为2ac752d7aeb1


docker run 镜像名称
我要用Nginx镜像创建一个容器并且在后台运行 ,容器名为nginx1并且docker上的nginx的80端口在寄主机上的6930端口上命令如下
docker run -d nginx1 -p 6930:80 nginx
#-d后台运行 -p 指定端口号,前为真机后为虚拟机IP
docker ps
docker ps -a 可以查看所有的容器
docker ps 只能看见正在运行的容器

查看容器详情
docker inspect 容器ID
查看容器日志
docker logs 容器ID

停止容器
docker stop 容器ID

启动容器
docker start 容器ID

删除容器
docker rm 容器ID
登录Docker Hub
docker login

推送镜像到仓库
docker push 镜像名称
拉取镜像到仓库
docker pull 镜像名称
docker exec -it 容器ID /bin/bash

访问docker搭建的nginx

将我寄主机器上的index.html文件考入容器中

docker cp 主机路径 容器ID:容器路径
docker cp /opt/index.html 32564ccb17b5:/usr/share/nginx/html

查看Nginx主页

成功
下面这条命令是能将docker容器上的文件拷贝到寄主机上
docker cp 容器ID:容器路径 主机路径
我要将下图文件test1文件从docker 容器中拷贝到寄主机/opt目录下

docker cp 32564ccb17b5:/opt/test1 /opt

查看容器内部进程
docker top 容器ID

查看容器详情
docker inspect 容器ID
备份容器
docker export 32564ccb17b5 > nginx2.tar

cat nginx2.tar |docker import - nginx:2

docker search 仓库名称
docker save -o 文件名 镜像名称

docker load < 文件名