泰州网站建设制作,上海哪个网站最好用,网站推广的短视频推广,wordpress恢复备份文章目录 一、Docker介绍1.什么是虚拟化2.虚拟化模块3.docker是什么4.docker平台介绍5.为什么使用docker6.docker主要解决的问题 二、docker整体结构1.Docker引擎介绍#xff08;Docker Engine#xff09;2.Docker结构概览介绍3.Docker底层技术 三、docker安装1.Docker-CE和D… 文章目录 一、Docker介绍1.什么是虚拟化2.虚拟化模块3.docker是什么4.docker平台介绍5.为什么使用docker6.docker主要解决的问题 二、docker整体结构1.Docker引擎介绍Docker Engine2.Docker结构概览介绍3.Docker底层技术 三、docker安装1.Docker-CE和Docker-EE版本介绍2.Centos上安装Docker-CE3.Ubuntu上安装Docker-CE4.配置国内源(加速配置) 四、镜像1.镜像介绍2.镜像操作1常用命令2其他命令 3.镜像总结4.注册并登录到docker远程仓库 五、容器1.容器介绍2.容器与虚拟机3.容器生命周期4.容器相关命令1常用命令2docker stop和docker kill的区别3其他命令 5.docker run命令-v参数做目录映射6.docker run命令-p参数做端口映射7.注意项8.文件拷贝9.容器总结 六、Docker的容器与镜像1.容器与镜像的关系2.容器操作 一、Docker介绍
1.什么是虚拟化 在计算机中虚拟化英语Virtualization是一种资源管理技术是将计算机的各种实体资源如服务器、网络、内存及存储等予以抽象、转换后呈现出来打破实体结构间的不可切割的障碍使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。 在实际的生产环境中虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用透明化底层物理硬件从而最大化的利用物理硬件 对资源充分利用。 虚拟化技术种类很多例如软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。 2.虚拟化模块 -kvm开源的免费的 Kernel-based Virtual Machine的简称是一个开源的系统虚拟化模块自Linux 2.6.20之后集成在Linux的各个主要发行版本中-exsi:vmware商用的装在裸机上可以虚拟化出很多机器-openstackpython开发的开源的电信云华为云 openstack 管理云平台,对虚拟化的机器进行管理(创建、销毁、增加等)-阿里云自研阿里飞天阿里自研的类似于openstack云服务器之前在上面买云服务器的操作-docker容器技术-k8s多机容器管理容器编排3.docker是什么 Docker 是一个开源项目诞生于 2013 年初最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会遵从了 Apache 2.0 协议项目代码在 GitHub 上进行维护。 Docker 项目的目标是实现【轻量级的操作系统虚拟化解决方案】。 Docker 的基础是 Linux 容器LXC等技术。 在 LXC 的基础上 Docker 进行了进一步的封装让用户不需要去关心容器的管理使得操作更为简便。用户操作 Docker 的【容器就像操作一个快速轻量级的虚拟机】一样简单。 Docker是开发运行和部署应用程序的开放管理平台开发人员能利用docker 开发和运行应用程序运维人员能利用docker 部署和管理应用程序4.docker平台介绍
Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力这个隔离的环境被称为容器。由于容器的隔离性和安全性因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器互不干预。Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期 使用容器来开发应用程序及其支持组件 容器成为分发和测试你的应用程序的单元 准备好后将您的应用程序部署到生产环境中作为容器或协调服务。无论您的生产环境是本地数据中心云提供商还是两者的混合这都是一样的。 5.为什么使用docker
Docker 容器虚拟化的好处,通过容器来打包应用、解耦应用和运行平台更快的交付和部署 使用 Docker开发人员可以使用镜像来快速构建一套标准的开发环境 开发完之后测试和运维人员可以直接使用完全相同的环境来部署代码 只要是开发测试过的代码就可以确保 在生产环境无缝运行 Docker 可以快速创建和删除容器实现快速迭代节约开发、测试及部署的时间 更高效的利用资源 运行 Docker 容器不需要额外的虚拟化管理程序的支持Docker 是内核级的虚拟化可以实现更高的性能 同时对资源的额外需求很低与传统的虚拟机方式相比Docker 的性能要提高 1 ~ 2 个数量级 更轻松的迁移和扩展 使用 Dockerfile只需要小小的配置修改就可以替代以往大量的更新工作 所有的修改都以增量的方式被分发和更新从而实现自动化并且高效的容器管理
6.docker主要解决的问题
保证程序运行环境的一致性降低配置开发环境、生产环境的复杂度和成本实现程序的快速部署和分发 二、docker整体结构
1.Docker引擎介绍Docker Engine
Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序服务端一个长时间运行的守护进程(Docker Daemon)REST API一套用于与Docker Daemon通信并指示其执行操作的接口客户端命令行接口CLI( Command Line Interface)CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷) 2.Docker结构概览介绍 1.Docker客户端(Docker Client)- Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时- 对应的就会在服务端产生对应的作用并把结果返回给客户端。Docker Client除了连接本地服务端- 通过更改或指定DOCKER_HOST连接远程服务端。2.Docker服务端(Docker Server)- Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects)- 如镜像、容器、网络、数据卷等3.Docker Registries注册中心- 俗称Docker仓库专门用于存储镜像的云服务环境.- Docker Hub就是一个公有的存放镜像的地方类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。- 当我们构建好自己的镜像之后需要存放在仓库中当我们需要启动一个镜像时 可以在仓库中下载下来4.Docker 对象(Docker Objects)- 镜像(Image)一个Docker的可执行文件其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。* Docker 镜像Image就相当于是一个 root 文件系统比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统- 容器(Container)镜像被运行起来后的实例。* 镜像Image和容器Container的关系就像是面向对象程序设计中的类和实例一样镜像是静 态的定义容器是镜像运行时的实体- 网络外部或者容器间如何互相访问的网络方式如host模式、bridge模式。- 数据卷容器与宿主机之间、容器与容器之间共享存储方式类似虚拟机与主机之间的共享文件目录。 1 docker 是cs架构 mysqlredisc和s要通信使用的http协议符合resful规范2 Docker镜像镜像是基于一堆文件相当于虚拟机装了操作系统又装了软件的一堆文件3 Docker容器镜像运行起来成为了容器【当成一台虚拟机上面装了一些软件】- 类和对象的概念- 镜像是类---》生成多个对象4 Registry注册中心-镜像从哪里来-注册中心中拉取下来3.Docker底层技术 Docker使用Go语言实现 Docker利用linux内核的几个特性来实现功能: 利用Linux的命名空间(Namespaces)利用Linux控制组(Control Groups)利用Linux的联合文件系统(Union File Systems)这也就意味着Docker只能在linux上运行在windows、MacOS上运行Docker其实本质上是借助了虚拟化技术然后在linux虚拟机上运行的Docker程序。容器格式 Container Format Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和生命周期管理。容器格式(Container Format)有多种其中Docker目前使用的容器格式被称为libcontainerNamespaces命名空间为Docker容器提供操作系统层面的隔离 进程号隔离每一个容器内运行的第一个进程进程号总是从1开始起算网络隔离容器的网络与宿主机或其他容器的网络是隔离的、分开的也就是相当于两个网络进程间通隔离容器中的进程与宿主机或其他容器中的进程是互相不可见的通信需要借助网络文件系统挂载隔离: 容器拥有自己单独的工作目录内核以及系统版本号隔离容器查看内核版本号或者系统版本号时查看的是容器的而非宿主机的Control Groups控制组-cgroups为Docker容器提供硬件层面的隔离 控制组能控制应用程序所使用的硬件资源。基于该性质控制组帮助docker引擎将硬件资源共享给容器使用并且加以约束和限制。如控制容器所使用的内存大小。Union File Systems联合文件系统–UnionFS利用分层(layer)思想管理镜像和容器
三、docker安装
1.Docker-CE和Docker-EE版本介绍 -Docker-CE指Docker社区版由社区维护和提供技术支持为免费版本适合个人开发人员和小团队使用。-Docker-EE指Docker企业版为收费版本由售后团队和技术团队提供技术支持专为企业开发和IT团队而设计。-相比Docker-EE增加一些额外功能更重要的是提供了更安全的保障。-此外Docker的发布版本分为Stable稳定版和Edge测试版区别在于前者是按季度发布的稳定版(发布慢)后者是按月发布的边缘版(发布快)。-通常情况下Docker-CE足以满足我们的需求。主要针对Docker-CE进行学习。版本情况 自从区分docker-ce和docker-ee之后docker最初始的版本是17.03也就是17年发布的所有17是老版本和新版本的分水岭
系统支持情况
2.Centos上安装Docker-CE 可以在虚拟机上创建centos7.9的系统具体创建查看有些博主写的详细博文https://blog.csdn.net/qq_45743985/article/details/121152504?spm1001.2014.3001.5506然后可以远程链接到虚拟机上的centos但是需要获取到ip当然也可以选择直接购买云服务器购买的云服务器有公网ip几种链接方式-finalshell免费的-xshell 只能win用收费-命令窗口git bash创建(git bash里输入ssh root10.0.0.xxx root是用户符号后面是IP地址然后需要输入密码链接即可)当然也可以不远程链接操作可以直接在虚拟机centos上面直接操作也是一样Docker官方建议在Ubuntu中安装因为Docker是基于Ubuntu发布的而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。0.yum 包更新到最新yum update卸载老版本docker:yum remove docker docker-common docker-selinux docker-engine rm -rf /var/lib/docker1.安装必要的系统工具依赖yum install -y yum-utils device-mapper-persistent-data lvm22.添加源信息(把yum源设置为阿里云)yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.检查添加源是否设置成功cat /etc/yum.repos.d/docker-ce.repo 4.安装Docker-CEyum install docker-ce -y5.验证是否安装成功dockerdocker -v6.运行docker-cesystemctl status docker # 查看docker软件运行状态systemctl start docker # 启动dockersystemctl restart docker # 重启dockersystemctl stop docker # 停止dockerdocker info # 查看Docker信息docker --help # 查看docker帮助文档systemctl enable docker # 开机启动docker3.Ubuntu上安装Docker-CE
系统要求Ubuntu 14.04及其以上版本1.安装必要工具sudo apt-get updatesudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common
2.安装GPG证书curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -换成阿里云curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
2.1 写入软件源信息#官方sudo add-apt-repository deb [archamd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable#换成阿里云sudo add-apt-repository deb [archamd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable3.更新并安装docker-cesudo apt-get -y install docker-ce
4.开启docker服务systemctl status docker
5.卸载sudo apt-get remove docker docker-engine docker.io containerd runc安装成功后使用docker version查看如果出现权限禁止需要切换到root用户执行su输入密码docker version4.配置国内源(加速配置) 为什么使用加速器:配置Docker加速器将会提升在国内获取Docker官方镜像的速度否则后面下载镜像docker pull的过程会很慢甚至有可能无法下载镜像配置方式方式1仅对当次有效docker run centos:7 --registry-mirrorhttps://docker.mirrors.ustc.edu.cn#修改 /etc/default/docker加入 DOCKER_OPTS”镜像地址”可以有多个 DOCKER_OPTS--registry-mirrorhttps://docker.mirrors.ustc.edu.cn方式2json 配置文件的方式严格的json格式不符合格式会报错vi /etc/docker/daemon.json {registry-mirrors: [https://docker.mirrors.ustc.edu.cn]}几个速度比较快的镜像地址Docker 官方中国区: https://registry.docker-cn.com网易: http://hub-mirror.c.163.com中科大: https://docker.mirrors.ustc.edu.cn方式3阿里云方式同方式2只是阿里云分配的私有地址自己用自己的参考教程https://help.aliyun.com/document_detail/60750.html?spma2c4g.11186623.6.545.OY7haWvi /etc/docker/daemon.json {registry-mirrors: [xxxxxxxxxxxxx] }这里的key就是阿里云镜像加速器地址# 按 esc# 输入 :wq 敲回车# 保存退出systemctl daemon-reload # 重新加载docker配置systemctl restart docker # 重启docker四、镜像
1.镜像介绍 镜像是一个Docker的可执行文件 其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。 通过镜像可以创建一个或多个容器 2.镜像操作
1常用命令 1.镜像搜索docker search# 作用搜索Docker Hub(镜像仓库)上的镜像# 命令格式docker search [OPTIONS] TERM# 命令参数(OPTIONS)-f, --filter filter 根据提供的格式筛选结果--format string 利用Go语言的format格式化输出结果--limit int 展示最大的结果数默认25个--no-trunc 内容全部显示# 命令演示docker search -f is-officaltrue ubuntudocker search ubuntu2.镜像查看docker images/docker image ls # 两个命令结果相同# 作用列出本地镜像# 命令格式docker images [OPTIONS] [REPOSITORY[:TAG]] 或者 docker image ls [OPTIONS] [REPOSITORY[:TAG]]# 命令参数(OPTIONS) -a, --all 展示所有镜像 (默认隐藏底层的镜像)--no-trunc 不缩略显示-q, --quiet 只显示镜像ID# 命令演示docker imagesdocker images centos:latest3.镜像下载docker pull# 作用下载远程仓库如Docker Hub中的镜像# 命令格式docker pull [OPTIONS] NAME[:TAG|DIGEST]# 命令参数(OPTIONS)-a, --all-tags 下载所有符合给定tag的镜像# 命令演示指定标签 tagdocker pull ubuntudocker pull centos # centos版本号 如果不指定默认下载最新版:latestdocker pull centos:centos7 # 指定版本号就下载指定的4.镜像删除docker rmi/docker image rm# 作用将本地的一个或多个镜像删除# 命令格式docker rmi [OPTIONS] IMAGE [IMAGE...]或者 docker image rm [OPTIONS] IMAGE [IMAGE...]# 命令参数(OPTIONS) -f, --force 强制删除# 命令演示docker rmi e934 452a # 删除多个用空格隔开docker rmi xxx(镜像id) -f # 强制删除正在运行的镜像一次性删除所有镜像docker rmi docker images -q2其他命令 5.镜像保存备份docker save# 作用将本地的一个或多个镜像打包保存成本地tar文件(输出到STDOUT)# 命令格式docker save [OPTIONS] IMAGE [IMAGE...]# 命令参数(OPTIONS) -o, --output string 指定写入的文件名和路径# 命令演示docker save -o linux_images.tar centos ubuntu6.镜像备份导入docker load# 作用将save命令打包的镜像导入本地镜像库中# 命令格式docker load [OPTIONS]# 命令参数(OPTIONS) -i, --input string 指定要打入的文件如没有指定默认是STDIN-q, --quiet 不打印导入过程信息# 命令演示docker load -i linux_images.tardocker load -i linux_images.tar -q7.镜像重命名 – docker tag# 作用对本地镜像的NAME、TAG进行重命名并新产生一个命名后镜像# 命令格式docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]# 命令参数(OPTIONS) 无# 命令演示docker tag e934 centos-newname:newtag8.镜像详细信息docker image inspect/docker inspect# 作用查看本地一个或多个镜像的详细信息# 命令格式docker image inspect [OPTIONS] IMAGE [IMAGE...]或者 docker inspect [OPTIONS] IMAGE [IMAGE...]# 命令参数(OPTIONS) -f, --format string 利用特定Go语言的format格式输出结果# 命令演示docker image inspect -f {{json .id}} centosdocker image inspect -f {{json .Created}} centosdocker image inspect9.镜像历史信息docker history# 作用查看本地一个镜像的历史(历史分层)信息# 命令格式docker history [OPTIONS] IMAGE# 命令参数(OPTIONS)-H, --human 将创建时间、大小进行优化打印(默认为true)-q, --quiet 只显示镜像ID--no-trunc 不缩略显示# 命令演示docker history ubuntudocker history ubuntu -Hfalse3.镜像总结 4.注册并登录到docker远程仓库 1.网站https://hub.docker.com/注册登录后就可以查看我们自己的镜像(repositories)也可以把自己的镜像上传上去给其他人用2.上传镜像-登录dockerdocker login-给镜像打标签docker tag 本地镜像名:标签 你的名字/镜像名字:标签例如docker tag centos:centos7 0jchen/centos7:latest3.上传到远程仓库docker push 0jchen/centos7:latest4.从远程仓库拉下镜像docker pull centos7:latest五、容器
1.容器介绍 容器Container容器是一种轻量级、可移植、并将应用程序进行的打包的技术使应用程序可以在几乎任何地方以相同的方式运行 Docker将镜像文件运行起来后产生的对象就是容器。容器相当于是镜像运行起来的一个实例。 容器具备一定的生命周期。另外可以借助docker ps命令查看运行的容器如同在linux上利用ps命令查看运行着的进程那样。 2.容器与虚拟机 作为一种轻量级的虚拟化方式Docker 在运行应用上跟传统的虚拟机的方式相比具有如下显著优势 Docker 容器启动很快启动和停止可以实现秒级相比传统的虚拟机方式分钟级要快速很多Docker 容器对系统资源需求很少一台主机上可以同时运行数千个 Docker 容器Docker 通过类似 git 设计理念的操作来方便用户获取、分发和更新应用镜像存储复用增量更新Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制可以提高工作效率并标准化流程 3.容器生命周期
虚拟机的生命周期
容器的生命周期
4.容器相关命令
1常用命令
1. 容器创建: docker create# 作用利用镜像创建出一个Created 状态的待启动容器# 命令格式docker create [OPTIONS] IMAGE [COMMAND] [ARG...]# 命令参数(OPTIONS)查看更多-t, --tty 分配一个伪TTY也就是分配虚拟终端-i, --interactive 即使没有连接也要保持STDIN打开--name 为容器起名如果没有指定将会随机产生一个名称# 命令参数COMMAND\ARG:COMMAND 表示容器启动后需要在容器中执行的命令如ps、ls 等命令ARG 表示执行 COMMAND 时需要提供的一些参数如ps 命令的 aux、ls命令的-a等等# 命令演示docker create centosdocker create --name centos7 centos ps -A (如果不带--name[--name后面跟着就是设置的名字]容器名字就不设置会随机生成)docker create -it --name centos7 centos /bin/bashdocker ps -a2. 容器启动: docker start# 作用将一个或多个处于创建状态或关闭状态的容器启动起来# 命令格式docker start [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS)-a, --attach 将当前shell的 STDOUT/STDERR 连接到容器上-i, --interactive 将当前shell的 STDIN连接到容器上 # 命令演示docker ps -a 查看所有容器状态包含已停止容器docker start b97b3fcfab77 (容器id号)docker start centos7 (容器名称)容器要运行内部必须有个前台进程阻塞否则容器就会停掉 /bin/bash
3. 容器创建并启动: docker run # 如果本地有对应的镜像就使用本地镜像创建启动没有则从仓库去下载latest# 作用利用镜像创建并启动一个容器# 命令格式docker run [OPTIONS] IMAGE [COMMAND] [ARG...]# 命令参数(OPTIONS)查看更多-t, --tty 分配一个伪TTY也就是分配虚拟终端-i, --interactive 即使没有连接也要保持STDIN打开--name 为容器起名如果没有指定将会随机产生一个名称-d, --detach 在后台运行容器并打印出容器ID--rm 当容器退出运行后自动删除容器-docker run 参数-i 表示运行容器-d 以守护式容器在后台运行用这个参数创建出来的容器命令行还在宿主机上没有进入到容器内部-t 表示容器启动后会进入容器命令行。加入这参数后容器创建就能登录进去。即分配一个伪终端。--name 指定容器名字如果不指定会随机一个名字-p 表示端口映射前者是宿主机端口后者是容器内的映射端口。可以使用多个-p做多个端口映射-v 表示目录映射关系前者是宿主机目录后者是容器的目录可以使用多个v做多个目录或文件映射。注意最好做目录映射在宿主机上做修改然后共享到容器上# 命令参数COMMAND\ARG:COMMAND 表示容器启动后需要在容器中执行的命令如ps、ls 等命令ARG 表示执行 COMMAND 时需要提供的一些参数如ps 命令的 aux、ls命令的-a等等# 命令演示守护式方式创建容器docker run -id --name 容器名字 镜像:标签 # (不带--name默认随机自动生成容器名字最好带上取名)docker run -id --name centos7 centos:centos7 (创建并运行容器命令行在宿主机上)docker run -it --name centos7 centos:centos7 创建并运行容器命令行在容器内部退出容器 exit 只要一退出容器就停止交互式方式创建容器docker run -it --name容器名称 镜像名称:标签 /bin/bash退出容器 exit 可组合使用docker run -d centosdocker run --rm -d centosdocker run 与 docker create docker startdocker run 相当于 docker create docker start –a 前台模式docker run -d 相当于 docker create docker start 后台模式4. 容器内执行新命令: docker exec# 作用在进入容器中立刻运行一个命令# 命令格式docker exec [OPTIONS] CONTAINER COMMAND [ARG...]# 命令参数(OPTIONS) -d, --detach 后台运行命令-i, --interactive 即使没连接容器也将当前的STDIN绑定上-t, --tty 分配一个虚拟终端-w, --workdir string 指定在容器中的工作目录-e, --env list 设置容器中运行时的环境变量# 命令演示docker exec -it 容器名称/容器id /bin/bash # 新开了一个bash进程-it进入到容器内的命令行中-id还在宿主机内当进入后退出容器exit容器也不会停止因为是新开的一个bash进程停止的是新开的bash进程创建容器时运行的bash进程还在docker exec -it 容器名称/容器id ls # 进入容器后执行ls命令其他命令同样操作5. 容器关闭: docker stop# 作用关闭一个或多个处于暂停状态或者运行状态的容器# 命令格式docker stop [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS)-t, --time int 关闭前等待的时间单位秒(默认 10s) # 命令演示docker stop -t 1 容器id/容器名称docker stop 容器id/容器名称6. 容器终止: docker kill# 作用强制并立即关闭一个或多个处于暂停状态或者运行状态的容器# 命令格式docker kill [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS)-s, --signal string 指定发送给容器的关闭信号 (默认“KILL”信号) # 命令演示docker kill 容器名称/容器id7. 容器重启: docker restart# 作用重启一个或多个处于运行状态、暂停状态、关闭状态或者新建状态的容器该命令相当于stop和start命令的结合# 命令格式docker restart [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS)-t, --time int 重启前等待的时间单位秒(默认 10s) 实则是关闭前等待的时间8. 容器删除: docker centos7 rm# 作用删除一个或多个容器# 命令格式docker container rm [OPTIONS] CONTAINER [CONTAINER...]或者 docker rm [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS)-f, --force 强行删除容器(会使用 SIGKILL信号) -v, --volumes 同时删除绑定在容器上的数据卷 # 命令演示docker rm 容器id/容器名docker rm -f 容器id/容器名 # 强制删除正在运行的容器一次性删除所有容器docker rm docker ps -a -q2docker stop和docker kill的区别
docker stop和docker kill的区别
# 一 前提知识点1 Linux其中两种终止进程的信号是SIGTERM和SIGKILL2 SIGKILL信号无条件终止进程信号。进程接收到该信号会立即终止不进行清理和暂存工作。该信号不能被忽略、处理和阻塞它向系统管理员提供了可以杀死任何进程的方法。3 SIGTERM信号程序终结信号可以由kill命令产生。与SIGKILL不同的是SIGTERM信号可以被阻塞和终止以便程序在退出前可以保存工作或清理临时文件等。
# 二 docker stop 会先发出SIGTERM信号给进程告诉进程即将会被关闭。在-t指定的等待时间过了之后将会立即发出SIGKILL信号直接关闭容器。
# 三 docker kill 直接发出SIGKILL信号关闭容器。但也可以通过-s参数修改发出的信号。
# 四 因此会发现在docker stop的等过过程中如果终止docker stop的执行容器最终没有被关闭。而docker kill几乎是立刻发生无法撤销。
# 五 此外还有些异常原因也会导致容器被关闭比如docker daemon重启、容器内部进程运行发生错误等等“异常原因”。 3其他命令
9. 容器暂停: docker pause# 作用暂停一个或多个处于运行状态的容器# 命令格式docker pause CONTAINER [CONTAINER...]# 命令参数(OPTIONS)无# 命令演示docker ps -a # 查看容器状态包含已停止容器docker pause centos7/容器iddocker ps -a # 容器是Pause状态10. 容器取消暂停: docker unpause# 作用取消一个或多个处于暂停状态的容器恢复运行# 命令格式docker unpause CONTAINER [CONTAINER...]# 命令参数(OPTIONS)无 # 命令演示docker unpause centos7/容器iddocker ps -a # 处于运行状态11. 容器详细信息: docker inspect 容器名/容器id# 作用查看本地一个或多个容器的详细信息# 命令格式docker container inspect [OPTIONS] CONTAINER [CONTAINER...]或者 docker inspect [OPTIONS] CONTAINER [CONTAINER...]# 命令参数(OPTIONS) -f, --format string 利用特定Go语言的format格式输出结果-s, --size 显示总大小# 命令演示docker inspect -f {{json .State.Status}} 容器id/容器名docker inspect python3.912. 容器日志信息: docker logs# 作用查看容器的日志信息# 命令格式docker logs [OPTIONS] CONTAINER# 命令参数(OPTIONS) --details 显示日志的额外信息-f, --follow 动态跟踪显示日志信息--since string 只显示某事时间节点之后的 --tail string 显示倒数的行数(默认全部)-t, --timestamps 显示timestamps时间--until string 只显示某事时间节点之前的# 注意容器日志中记录的是容器主进程的输出STDOUT\STDERR13. 容器重命名: docker rename# 作用修改容器的名称# 命令格式docker rename CONTAINER NEW_NAME# 命令参数(OPTIONS) 无14. 容器连接: docker attach# 作用将当前终端的STDIN、STDOUT、STDERR绑定到正在运行的容器的主进程上实现连接# 命令格式docker attach [OPTIONS] CONTAINER# 命令参数(OPTIONS) --no-stdin 不绑定STDIN5.docker run命令-v参数做目录映射 我们可以在创建容器的时候将宿主机的目录与容器内的目录进行映射这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。 docker run命令-v参数做目录映射创建容器 添加-v参数 后边为 宿主机目录:容器目录以一个案例演示:-运行出一个 centos77 容器不进入 做目录映射-把宿主机的 /root/jack文件夹 映射到 容器内部的 /jack文件夹 /xx 在容器根路径创建- -v可以写多个可以是文件或文件夹1.cd # 回家 前提你是root用户2.pwd # 可以看到/root3.mkdir jack # 在root目录下创建一个文件夹4.运行一个容器做目录映射,但是不直接进入容器内docker run -id --name centos77 -v /root/jack:/jack centos:centos75.docker exec -it centos77也可以填容器id /bin/bash # 以在容器内执行命令方式进入容器6.ls # 这样就可以在容器根路径看到在宿主机root路径下创建的jack文件夹了这样就做好了目录映射7.在容器内部的jack文件夹下创建一个1.txt并写入hello world!8.退出容器在宿主机/root/jack文件夹中查看是否存在1.txt以及输入的内容cat 1.txt # 查看文件内容做了目录映射容器和宿主机直接是相互影响的在容器内部修改文件也会影响到外部宿主机文件在外部修改文件也会影响到容器内部做目录映射好处后期咱们部署django项目1 有个django容器做好映射代码放在宿主机上即可以后更新了代码只要重启容器代码就是最新了2 运行mysql容器---》mysql配置文件数据data目录放在宿主机上做好映射如果 mysql容器---》表数据放到容器中---》如果删了容器---》数据库全没了表数据放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在......注意如果你共享的是多级的目录可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了我们需要添加参数 --privilegedtrue 来解决挂载的目录没有权限的问题6.docker run命令-p参数做端口映射 在docker run创建并运行容器的时候可以通过-p指定端口映射规则。. docker run命令-p参数做端口映射创建容器 添加-p参数 后边为 宿主机端口:容器端口以一个案例演示:-容器中启动一个mysql5.7 --》容器中的3306监听宿主机3306没人监听做端口映射后宿主机的3306就被docker的这个容器监听了1.启动一个容器mysql5.7的root密码是12342.启动mysql容器 -p 宿主机端口:容器端口以后台守护进程运行mysql容器mysql的root用户密码是1234宿主机和容器做了端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD1234 mysql:5.73.查看宿主机 3306端口占用情况# netstat -nlp |grep 3307 查看本机80端口占用情况yum install net-tools -ynetstat -nlp | grep 3306 # 查看后发现被docker占了查看windows端口命令 netstat -nao | findstr 33064.以后访问宿主机3306端口就等于访问容器的3306端口5.win机器可以远程链接docker容器中的mysql5.7了方式一cmd窗口链接mysql -h192.168.174.xxx -P 3306 -uroot -p输入密码即可方式二Navicat可视化软件链接输入链接名、主机、端口、用户名、密码链接即可方式三python链接6.在本地链接的mysql中创建数据库然后去宿主机中的容器中mysql5.7登录查看是否存在此数据库docker exec -it mysql5.7 /bin/bash # 进入容器内部mysql -uroot -p # 进入mysqlshow databases; # 查看所有数据库7.注意项 有很多镜像底层都是debian系统因此在进入到容器内部安装模块的时候需要用到apt-get命令 例如python、mysql等镜像都是底层的操作系统是debian所以安装模块的时候就不用直接使用yum install xxx安装了需要使用apt-get install xxx来安装另外在安装软件之前最好更新一下apt-get updateapt-get install iputils-ping # ping模块8.文件拷贝 虽然上面已经说过做目录映射但是有的时候就是想不做目录映射然后吧宿主机的文件直接拷贝到容器内又想把容器内部文件拷贝到宿主机上这个时候就需要用到文件拷贝docker cp 文件拷贝(在宿主机上执行)容器的文件copy到宿主机上不是在容器内执行docker cp 容器名称/容器id:容器目录 需要拷贝的文件或目录docker cp 0a96331:/1.txt /root/jack/1.txt宿主机的文件copy到容器中docker cp 需要拷贝的文件或目录 容器名称/容器id:容器目录docker cp /root/jack/1.txt 0a96339:/1.txt补充docker无状态的服务在容器中尽量运行无状态的服务-mysql reids 有状态运行过程中产生数据保存容器删除数据就没了-uwsgidjango 无状态的服务9.容器总结 六、Docker的容器与镜像
1.容器与镜像的关系 2.容器操作 1.容器提交 – docker commit# 作用根据容器生成一个新的镜像# 命令格式docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]# 命令参数(OPTIONS)-a, --author string 作者-c, --change list 为创建的镜像加入Dockerfile命令-m, --message string 提交信息类似git commit -m-p, --pause 提交时暂停容器 (default true)# 命令演示docker run --rm -dti centos bashdocker exec -d 容器id号 yum -y install net-toolsdocker commit -m install net-tools 容器id号 centos-net-tools:lastestdocker imagesdocker history centos-net-tools2.容器导出 – docker export# 作用将容器当前的文件系统导出成一个tar文件# 命令格式docker export [OPTIONS] CONTAINER# 命令参数(OPTIONS)-o, --output string 指定写入的文件默认是STDOUT3.容器打包的导入 – docker import# 作用从一个tar文件中导入内容创建一个镜像# 命令格式docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]# 命令参数(OPTIONS)-c, --change list 为创建的镜像加入Dockerfile命令-m, --message string 导入时添加提交信息