你拥有青春的时候,就要感受它,不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知,平庸和低俗。------王尔德
Docker是完整的一套容器管理系统,所以想要搞懂Docker的概念,我们必须先从容器开始说起。什么是容器?
容器技术的核心,由以下几个内核技术组成:
NameSpace—命名空间
作,都不会对真实机造成影响。
容的;例如:在linux系统上,创建一个虚拟机,在真机的/var/lib/ftp中挂载了一个光盘文件,但是在虚拟机的/var/lib/ftp中是没有光盘内容的,这就是MOUNT隔离;
作用于容器;
docker与传统虚拟化的对比:
运行区别(容器的高效性):
[root@liruilong~]#systemctldaemon-reload[root@liruilong~]#systemctlrestartdocker三、获取镜像镜像、容器、仓库什么是镜像镜像是启动容器的核心,在Docker中容器是基于镜像启动的,镜像采用分层设计,使用COW技术
镜像可以从官方镜像仓库下载,也可以自己制作
[root@kube-node1~]$dockersavedocker.io/busybox:latest-o/root/busybox.tar拷贝备份镜像到其他机器上[root@kube-node1~]$scp/root/busybox.tar192.168.1.22:/root/恢复镜像(导入镜像)dockerload-i备份文件名称dockerload-ibusybox.tar四、第一个容器运行容器dockerrun命令dockerrun-参数镜像名称:镜像标签启动命令镜像名称:镜像标签这种形式,可以指定唯一的镜像,防止镜像名相同,内容不同的情况,latest为默认标签,创建镜像时,不指定标签,则为此默认标签+run=创建+启动+进入,dockerrun命令:运行过程中,会先根据镜像来创建容器,然后会启动容器,最后进入容器
连接容器启动进程dockerattach容器id
连接容器,启动新进程dockerexec-it容器id命令
与CMD不同的是,由ENTRYPOINT启动的程序不会被dockerrun命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序。不过,dockerrun命令的--entrypoint选项的参数可覆盖ENTRYPOINT指令指定的程序
配置yum、安装软件
FROMdocker.io/centos:latestRUNrm-f/etc/yum.repos.d/*COPYlocal.repo/etc/yum.repos.d/local.repoRUNyuminstall-ybash-completionnet-toolsiproutepsmisc创建镜像使用Dockerfile工作流程,根据Dockerfile生成新的镜像,build创建新的镜像;-t指定新镜像的名字和标签;.指定Dockerfile文件所在的目录
私有仓库的配置:
docker主机修改配置文件/etc/sysconfig/docker
重启docker服务systemctlrestartdocker
Docker容器不保持任何数据,重要数据请使用外部卷存储(数据持久化),容器可以挂在真实机目录或共享存储为卷
将真实机目录挂载到容器中提供持久化存储,目录不存在就自动创建,目录存在就直接覆盖掉,多个容器可以映射同一个目录,来达到数据共享的目的启动容器时,使用-v参数映射卷dockerrun-it-v真实目录:容器内目录docker.io/centos:latest
默认容器可以访问宿主机,但外部网络的主机不可以访问容器内的资源,解决这个问题的最佳方法是端口绑定,容器可以与宿主机的端口进行绑定,从而把宿主机变成对应的服务。宿主机和容器内部的服务端口绑定以后,用户在访问宿主机的服务端口时,就是在访问容器内部的服务
dockerrun-itd-p80:80docker.io/nginx:latestPodman(podmanager):是一个功能齐全的容器引擎,它是一个简单的无需守护的用来管理镜像、容器的工具。Podman提供了一个与DockerCLI兼容的操作方式,简单地说:aliasdocker=podman。大多数Podman命令都可以普通用户运行,而无需其他额外的权限。图片
指的是针对应用所需的运行环境资源(依赖库/目录/网络/用户……等)进行整体封装的技术。封装好的镜像相比虚拟机的粒度要更细,可移植性强。每个容器采用沙箱机制,相互隔离。
仓库=》镜像=》容器的关系:
图片
#yummoduleinstall-ycontainer-tools//安装容器工具及其模块配置#yuminstall-ypodman-docker//安装docker兼容包(可选)二、访问仓库1)设置默认的仓库地址(全局配置)可以使用官方仓库(比如registry.access.redhat.com)、第三方仓库(比如docker.io),或者私有仓库(比如registry.lab.example.com)。
#podmanloginregistry.lab.example.comUsername:adminPassword:***********LoginSucceeded!3)搜索仓库中的镜像(比如nginx)
#podmansearchnginxINDEXNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDexample.comregistry.lab.example.com/library/nginx三、管理镜像1)下载镜像到本地
#podmanpullregistry.lab.example.com/library/nginx....//容器存储默认工作目录/var/lib/containers/2)查看镜像
#podmanimages//列出本地镜像REPOSITORYTAGIMAGEIDCREATEDSIZEregistry.lab.example.com/nginxlatest4bb46517cac33monthsago137MB#podmanimageinspect4bb4//查看xxxx镜像的详细配置信息....3)导出/备份镜像
#podmansavenginx>/root/nginx.tar4)导入镜像
#podmanload-i/root/nginx.tarnginx-new:latest5)删除镜像
[root@redsystem]#systemctlenablecontainer-mywebCreatedsymlink/etc/systemd/system/multi-user.target.wants/container-myweb.service→/etc/systemd/system/container-myweb.service.5)关闭当前运行的容器
[root@redsystem]#podmanstop52e652e6996bef86c501731115216c84a2f48d1a03f8c1a2cad70d27e281bd642b186)重启主机后,检查是否可以访问此web
可参考mancontainers-registries.conf手册,如果已经在/etc/containers/registries.conf文件全局设置过,这里可以不做。