docker 部署及命令

一、容器概述

1、为什么要用到容器?

①容器可以屏蔽底层操作系统的差异性,让业务应用不管在哪里都是使用容器的环境运行,从而保证开发测试环境与生产环境的一致性

②容器部署起来非常便捷和迅速,缩短开发测试部署的周期时间

2、常见容器引擎和虚拟化软件

容器引擎:docker、containered、podman、rocket

虚拟化软件:

Windows:VMware Workstation(个人工作站版)、VMware Sphere + ESXI(企业版)、XEN

Linux:KVM (基于linux内核的虚拟机) 、Openstack(基于KVM部署的私有云架构)

二、docker 概述

1、docker是什么

docker是用go语言开发并开源的容器引擎(不是容器),用来运行容器里的应用,是一种轻量级的"虚拟机"。docker也是可用来管理容器和镜像的一种工具。

Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的。

2、容器与虚拟机的区别

|----------------------------------------|---------------------------------|
| 容器 | 虚拟机 |
| 所有容器共享宿主机的内核 | 每个虚拟机都有独立的操作系统和内核 |
| 通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量 | 完全隔离。每个虚拟机都有独立的硬件资源 |
| 秒级启动速度 | 分钟级启动速度 |
| 容器相当于宿主机的进程,性能几乎没有损耗 | 需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问 |
| 单机容量能支持成百上千个容器 | 单机容器只能支持最多几十个虚拟机 |

3、容器在内核中支持2种重要技术

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g,只有当需要修改时才复制一份数据)。

|-----------|---------------------------------------------------------------|
| namespace六项隔离 ||
| namespace | 隔离内容 |
| UTS | 提供了主机名和域名的隔离 |
| IPC | 实现容器与宿主机、容器与容器之间的IPC隔离 |
| PID | 两个不同namespace下的进程没有关系,因此PID也可以相同。内核为所有的PID namespace维护了一个树状结构 |
| Network | 提供了关于网络资源的隔离 |
| Mount | 通过隔离文件系统挂载点隔离文件系统 |
| User | 隔离了用户和用户组 |
| cgroup | 控制进程使用的资源 |

4、docker的三个核心概念

镜像 :是创建容器的基础,是一个只读的模板文件,里面包含运行容器中的应用程序所需要的所有内容(应用程序文件、配置文件、运行库文件、依赖包等)

容器:是用镜像运行的实例,容器可以被创建、启动、停止、删除,每个容器之间默认是相互隔离的

仓库:是用来集中保存镜像的地方,有公有仓库和私有仓库之分

Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker

三、安装部署docker

1、准备环境

systemctl enable --now firewalld.service

setenforce 0

yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖包

2、安装docker

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#设置阿里云镜像源

yum install -y docker-ce docker-ce-cli containerd.io #使用yum安装docker

systemctl enable --now docker.service

安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器和镜像。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

四、docker命令

1、查看 docker 版本信息

docker version

2、docker 详细信息查看

docker info

3、Docker 镜像操作

①搜索镜像

格式:docker search 仓库|镜像关键字

②获取镜像

格式:docker pull 仓库名称:标签

#通常标签代表应用的版本,如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。

③镜像加速下载

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置

bash 复制代码
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://30why0k0.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

④查看下载到本地的所有镜像

docker images

REPOSITORY:镜像属于的仓库;

TAG:镜像的标签信息,标记同一个仓库中的不同镜像;

IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;

CREATED:镜像创建时间;

VIRTUAL SIZE:镜像大小;

⑤根据镜像的唯一标识 ID 号,获取镜像详细信息

格式:docker inspect 镜像ID号

●lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录

●upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层

●MergedDir是表现层,是容器的挂载点

⑥为本地的镜像添加新的标签

格式:docker tag 名称:标签 新名称:新标签

⑦删除镜像

格式:docker rmi 仓库名称:标签 或 docker rmi 镜像ID号 -f

⑧存出镜像:将镜像保存成为本地文件

格式:docker save -o 存储文件名 存储的镜像名或id

⑨载入镜像:将镜像文件导入到镜像库中

格式:docker load < 存出的文件 或者 docker load -i 存出的文件

4、Docker 容器操作

①容器创建(将镜像加载到容器的过程)

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create 选项 镜像

常用选项:

-i:让容器开启标准输入接受用户输入命令

-t:让 Docker 分配一个伪终端,实现登录到容器中

-it :合起来实现和容器交互的作用,运行一个交互式会话 shell

②启动容器

格式:docker start 容器的ID/名称

③停止容器

格式:docker stop|kill 容器的ID/名称

④容器的进入

需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。

格式:docker exec -it 容器ID/名称 /bin/bash

-i 选项表示让容器的交互式输入保持打开;

-t 选项表示让 Docker 分配一个伪终端

⑤将宿主机的文件复制到容器中

格式:docker cp 文件名 容器ID/名称:容器的绝对路径

⑥将容器的文件复制到宿主机中

格式:docker cp 容器ID/名称:容器的绝对路径/文件名 宿主机目录

⑦删除容器

格式:docker rm -f 容器ID/名称

注:正在运行中的容器要先停再删,不停要使用-f选项强行删除,但不建议使用

⑧容器的导出与导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

导出格式:

docker export 容器名|容器ID > 容器模板文件

docker export -o 容器模板文件 容器名|容器ID
导入格式:

docker import 容器模板文件 -- 镜像名:标签 #以镜像的形式进行导入

cat 容器模板文件 | docker import - 镜像名:标签

⑨创建并启动容器

可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。

注意:容器是一个与其中运行的 shell 命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。

docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中 pid = 1 的进程必须是前台进程,否则认为容器已经挂掉。

格式:docker run -d -i -t --name --rm 镜像名:标签 容器启动命令

docker run 的启动过程:

1)检查本地是否有镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器

2)在只读的镜像层上挂载一层可读可写的容器层

3)从docker网桥给容器分配一个虚拟接口和IP

4)使用镜像的默认启动命令或者指定的启动命令启动容器,直到容器中PID=1的主进程退出为止

相关推荐
XIAOHEZIcode1 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207017 小时前
如何搭建本地yum源(上)
运维
武子康18 小时前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化