Docker入门一(Docker介绍、Docker整体结构、Docker安装、镜像、容器、Docker的容器与镜像)

文章目录

  • 一、Docker介绍
    • 1.什么是虚拟化
    • 2.虚拟化模块
    • 3.docker是什么
    • 4.docker平台介绍
    • 5.为什么使用docker
    • 6.docker主要解决的问题
  • 二、docker整体结构
    • 1.Docker引擎介绍(Docker Engine)
    • 2.Docker结构概览介绍
    • 3.Docker底层技术
  • 三、docker安装
    • 1.Docker-CE和Docker-EE版本介绍
    • 2.Centos上安装Docker-CE
    • 3.Ubuntu上安装Docker-CE
    • 4.配置国内源(加速配置)
  • 四、镜像
    • 1.镜像介绍
    • 2.镜像操作
      • 1)常用命令
      • 2)其他命令
    • 3.镜像总结
    • 4.注册并登录到docker远程仓库
  • 五、容器
    • 1.容器介绍
    • 2.容器与虚拟机
    • 3.容器生命周期
    • 4.容器相关命令
      • 1)常用命令
      • 2)docker 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商用的,装在裸机上,可以虚拟化出很多机器-openstack(python开发的,开源的):电信云,华为云 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

  1. Docker 容器虚拟化的好处,通过容器来打包应用、解耦应用和运行平台
  2. 更快的交付和部署
    • 使用 Docker,开发人员可以使用镜像来快速构建一套标准的开发环境
      开发完之后,测试和运维人员可以直接使用完全相同的环境来部署代码
      只要是开发测试过的代码,就可以确保 在生产环境无缝运行
      Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间
  3. 更高效的利用资源
    • 运行 Docker 容器不需要额外的虚拟化管理程序的支持,Docker 是内核级的虚拟化,可以实现更高的性能
      同时对资源的额外需求很低,与传统的虚拟机方式相比,Docker 的性能要提高 1 ~ 2 个数量级
  4. 更轻松的迁移和扩展
    • 使用 Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作
      所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的容器管理

6.docker主要解决的问题

  • 保证程序运行环境的一致性
  • 降低配置开发环境、生产环境的复杂度和成本
  • 实现程序的快速部署和分发

二、docker整体结构

1.Docker引擎介绍(Docker Engine)

  1. Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序
  2. 服务端一个长时间运行的守护进程(Docker Daemon)
  3. REST API一套用于与Docker Daemon通信并指示其执行操作的接口
  4. 客户端命令行接口CLI( Command Line Interface)
  5. CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作
  6. 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架构  ,mysql,redis,c和s要通信,使用的http协议,符合resful规范2 Docker镜像:镜像是基于一堆文件,相当于虚拟机装了操作系统,又装了软件的一堆文件3 Docker容器:镜像运行起来,成为了容器,【当成一台虚拟机上面装了一些软件】- 类和对象的概念- 镜像是类---》生成多个对象4 Registry(注册中心)-镜像从哪里来?-注册中心中拉取下来

3.Docker底层技术

  1. Docker使用Go语言实现

  2. Docker利用linux内核的几个特性来实现功能:

	利用Linux的命名空间(Namespaces)利用Linux控制组(Control Groups)利用Linux的联合文件系统(Union File Systems)这也就意味着Docker只能在linux上运行在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。
  1. 容器格式( Container Format ):
	 Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和生命周期管理。容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer
  1. Namespaces(命名空间):为Docker容器提供操作系统层面的隔离
	 进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络文件系统挂载隔离: 容器拥有自己单独的工作目录内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的
  1. Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离
 控制组能控制应用程序所使用的硬件资源。基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。
  1. 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?spm=1001.2014.3001.5506'然后可以远程链接到虚拟机上的centos,但是需要获取到ip,当然也可以选择直接购买云服务器,购买的云服务器有公网ip'几种链接方式:-finalshell:免费的-xshell :只能win用,收费-命令窗口:git bash创建(git bash里输入ssh root@10.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  # 开机启动docker

3.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 [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"#换成阿里云sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"3.更新并安装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 version
"""

4.配置国内源(加速配置)

	为什么使用加速器?:配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像(docker pull)的过程会很慢,甚至有可能无法下载镜像'配置方式:'方式1(仅对当次有效)docker run centos:7 --registry-mirror=https://docker.mirrors.ustc.edu.cn#修改 /etc/default/docker,加入 DOCKER_OPTS=”镜像地址”,可以有多个 DOCKER_OPTS="--registry-mirror=https://docker.mirrors.ustc.edu.cn"方式2(json 配置文件的方式)(严格的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?spm=a2c4g.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-offical=true 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 -q`

2)其他命令

	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 -H=false

3.镜像总结

在这里插入图片描述

4.注册并登录到docker远程仓库

	1.网站:https://hub.docker.com/'注册登录后,就可以查看我们自己的镜像(repositories),也可以把自己的镜像上传上去,给其他人用'2.上传镜像-登录docker:docker 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 centos'docker run 与 docker create + docker start'docker 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 -q`

2)docker 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             	不绑定STDIN

5.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把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题'''

在这里插入图片描述
在这里插入图片描述


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 --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.73.查看宿主机 3306端口占用情况#  netstat -nlp |grep 3307 查看本机80端口占用情况yum install net-tools -ynetstat -nlp | grep 3306 # 查看后发现,被docker占了'查看windows端口命令  netstat -nao | findstr 3306'4.以后访问宿主机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   有状态,运行过程中产生数据,保存,容器删除,数据就没了-uwsgi+django  无状态的服务

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   	导入时,添加提交信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git——分支详解

目录 Git分支1、开始使用分支1.1、新增分支1.2、更改分支名称1.3、删除分支1.4、切换分支1.5、切换分支时1.6、要切换到哪个分支,首先要有那个分支 2、分支原理2.1、单个分支2.2、多个分支2.3、切换分支时的逻辑1、更新暂存区和工作目录2、变更HEAD的位置 2.4、如果…

GPT-4.5 Turbo详细信息被搜索引擎泄露:有重大改进

3月14日消息,据外电报道,OpenAI 最新人工智能模型 GPT-4.5 Turbo 的详细信息已通过 Bing 和 DuckDuckGo 的搜索引擎索引过早泄露。 GPT-4.5 Turbo 的产品页面在正式发布之前就出现在搜索结果中,引发了人们对 OpenAI 最新型号的特性和功能的猜…

每周一算法:双向深搜

题目描述 达达帮翰翰给女生送礼物,翰翰一共准备了 N N N 个礼物,其中第 i i i 个礼物的重量是 G [ i ] G[i] G[i]。 达达的力气很大,他一次可以搬动重量之和不超过 W W W的任意多个物品。 达达希望一次搬掉尽量重的一些物品,请…

微服务:Sentinel篇

1. 初识Sentinel 1.1. 雪崩问题以及解决方案 1.1.1. 雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此…

静默安装OGG21.3微服务版本FOR ORACLE版本

静默安装OGG21.3微服务版本FOR ORACLE版本 silent install ogg21.3 for oracle 某度找来找去都没有找到一份可靠的静默安装OGG21.3微服务版本的案例,特别难受,为此将自己静默安装的步骤一步步贴出来分享给大家,请指点,谢谢。 至…

Web Speech API的语音识别技术

SpeechSynthesis对象 这是一个实验性技术 目前兼容性如图: pc端几乎兼容,移动端部分不兼容 网页语音 API 的SpeechSynthesis 接口是语音服务的控制接口; 它可以用于获取设备上关于可用的合成声音的信息,开始、暂停语音&#x…

软件杯 深度学习 python opencv 实现人脸年龄性别识别

文章目录 0 前言1 项目课题介绍2 关键技术2.1 卷积神经网络2.2 卷积层2.3 池化层2.4 激活函数:2.5 全连接层 3 使用tensorflow中keras模块实现卷积神经网络4 Keras介绍4.1 Keras深度学习模型4.2 Keras中重要的预定义对象4.3 Keras的网络层构造 5 数据集处理训练5.1 …

从电影《沙丘》说起——对人工智能的思考

从《沙丘》开始说起 之前看《沙丘》电影,里面有一类角色叫门泰特,这类人大脑可以飞快地运算,在电影设定里是替换人工智能、机器运算的存在。男主保罗也是这类型的人,但他可能基因更强大,吸食了香料后,他的…

大数据面试题之SQL题

大数据面试题之SQL题 1.有一个录取学生人数表,记录的是每年录取学生人数和入学学生的学制 以下是表结构: CREATE TABLE admit ( id int(11) NOT NULL AUTO_INCREMENT, year int(255) DEFAULT NULL COMMENT ‘入学年度’, num int(255) DEFAULT NULL COMM…

Day67:WEB攻防-Java安全JNDIRMILDAP五大不安全组件RCE执行不出网

知识点: 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类: GroovyRuntimeExecPr…

Dockerfile 语法详解

Dockerfile 是一种文本文件,用于定义如何构建 Docker 镜像。它包含一系列指令,用于创建镜像的各个层,最终生成一个可运行的容器。 语法格式 Dockerfile 的语法遵循以下格式: INSTRUCTION [ARGUMENTS]其中: INSTRUC…

如何使用机器学习构建自己的推荐系统?

一、说明 在广阔的电子商务领域,众多产品和服务都在争夺我们的注意力,推荐系统的作用变得至关重要。这些智能系统彻底改变了我们在线发现和接触产品的方式,使其成为现代电子商务平台成功的基石。 推荐系统,通常称为推荐引擎或简称…

谈谈对数据库索引的认识

索引的概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 索引的作用 默认情况下,进行条件查询操作,就是遍历表&a…

企业数据流动安全管理软件(深度解析文章)

企业数据重要性不言而喻,而同时数据的流动和共享也带来了安全风险,如何确保企业数据在流动过程中的安全性,也成为了企业需要面临的重要问题。 企业数据流动安全管理软件的主要功能是监控和管理企业数据的流动过程。 它能够对企业内部的数据…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

vb.net+zxing.net随机彩色二维码、条形码

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode 效果图: 思路:先生成1个单位的二维码,然后再通过像素填充颜色,颜色数组要通过洗牌算法 洗牌算法 Dim shuffledCards As New List(…

牛客NC278 删除链表中重复的结点【中等 链表 Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef 这题有一次面试某团的第一道题 思考 链表的基本操作参考答案Java import java.util.*; /*public class ListNode {int val;ListNode next null;ListNode(int val) {this.v…

【Linux杂货铺】进程的基本概念

目录 🌈前言🌈 📁进程的概念 📂描述进程-PCB 📂 查看进程 📂 查看正在运行的程序 📂杀死进程 📂通过系统调用获取进程标识符 📂通过系统调用创建进程 &#x1f…

初阶结构体

在这篇文章中我们只讲一些结构体的一些基础的知识,后续会继续补充关于结构体的高阶知识。 1.结构体声明 1.1结构体的基本知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构可以用来描述复杂对象,在…

day10-SpringBootWeb案例-1

一、准备工作 1 需求&环境搭建 步骤: 准备数据库表(dept、emp)创建 springboot 工程,引入对应的起步依赖(web、mybatis、mysql 驱动、lombok)配置文件 application.properties 中引入 mybatis 的配置信息,准备对应…