• [技术干货] docker安装步骤
    前言 Docker Hub 是存放各种镜像模版的地方,其实就是一个最大的公开仓库docker Hub地址,存放了数量庞大的镜像提供用户下载,在国内一般用国内库下载镜像会比较快。 仓库分为公开库(Public)和私有库(private)两种形式,国内的公开库包括阿里云,网易云等。 以下是本篇文章正文内容,下面案例可供参考  一、docker是什么? Docker 是基于Go语言实现的一个开源项目,通过对应组建的封装,分发,部署,运行等生命周期的管理,使用户的应用及其运行环境“一次镜像,处处运行”,其实是一个应用容器,类似于一个虚拟机。  二、安装步骤 1.安装前检查 1.可以使用以下命令查看CentOS版本: lsb_release -a ,如果出现未找到这个命令的话,需要咱们去安装redhat-lsb  lsb_release -a 2.解决方法,输入命令:yum install -y redhat-lsb 输入这个等待安装成功就可以了 yum install -y redhat-lsb 4.如上再次查看就没有问题了,可以查看版本了,命令: lsb_release -a lsb_release -a  2.docker安装 5.在 CentOS 7安装docker要求系统为64位、系统内核版本为 3.10 以上,可以使用以下命令查看:uname -r uname -r  6.查看是否已安装docker列表:yum list installed | grep docker,什么都不提示说明咱们还没有安装 yum list installed | grep docker  7.安装docker:yum -y install docker yum -y install docker  8.启动dock   systemctl start docker dock   systemctl start docker   9.查看服务状态是否启动,如下图就说明启动成功了:systemctl status docker systemctl status docker 以上出来的Active(running)就说明你的docker安装成功,你可以自己安装你自己需要使用的工具了   10.设置开机自动启动命令:systemctl enable docker.service systemctl enable docker.service  总结 提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。 ———————————————— 原文链接:https://blog.csdn.net/ananyou/article/details/130339383 
  • [技术干货] Docker安装及容器安装
    Docker安装及容器安装 一、Docker简单介绍 1、Docker是什么 Docker是基于Go语言实现的云开源项目。  Docker是一个开源的应用容器引擎,是容器技术的一种,采用Go编程语言编写。虽然 Docker把容器技术推向了巅峰,但其实,还有其他容器技术,比如LXC、CoreOS 的RKT等,只是Docker是最知名和运用最广泛的一个  2、Docker能做什么 Docker的主要目标是Build,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。 3、Docker的 优势 更高效地利用系统资源 更快的启动时间 一致的运行环境 持续交付和部署 更轻松的迁移 更轻松的维护和拓展  二、Docker安装 1、环境要求 CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) 8 CentOS 6.5 (64-bit) 或更高的版本 前提条件:  目前,CentOS 仅发行版本中的内核支持 Docker。 Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。 2、虚拟机环境安装 和安装Ubuntu差不多,可以参考这篇安装Ubuntu虚拟机的文章 http://t.csdn.cn/4xg2Q 3、Docker安装 通过uname -r 命令查看当前的内核版本,是否符合Docer环境要求 使用root权限登录虚拟机,通过sudo yum update命令确保yum包是最新的 通过下面的命令卸载系统自带或者安装过的Docker,建议下面两个命令都用一下,卸载干净一些 旧版docker(docker-engine)   yum remove docker \            docker-client \            docker-client-latest \            docker-common \            docker-latest \            docker-latest-logrotate \            docker-logrotate \            docker-selinux \            docker-engine-selinux \            docker-engine 新版docker(docker-ce)也叫社区版  yum remove docker-ce \            docker-ce-cli \            containerd 删除docker的文件  systemctl stop docker rm -rf /etc/systemd/system/docker.service.d rm -rf /etc/systemd/system/docker.service rm -rf /var/lib/docker rm -rf /var/run/docker rm -rf /usr/local/docker rm -rf /etc/docker rm -rf /usr/bin/docker* /usr/bin/containerd* /usr/bin/runc /usr/bin/ctr 安装对应依赖环境  sudo yum install -y yum-utils 映射仓库地址 源地址  sudo yum-config-manager \     --add-repo \     https://download.docker.com/linux/centos/docker-ce.repo  如果安装过慢的话可以用阿里的地址  sudo yum-config-manager \     --add-repo \     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker CE(Docker引擎)  sudo yum install docker-ce docker-ce-cli containerd.io 启动Docker服务 sudo systemctl start docker 查看Docker版本 sudo docker version 设置开机自启动 sudo systemctl enable docker 测试Docker安装是否正常 sudo docker run hello-world 4、阿里云镜像加速配置 打开阿里云官网,登录  http://dev.aliyun.com/search.html 点击控制台,然后点击左上角菜单栏,找到容器镜像服务 点开镜像工具,点击镜像加速器,找到对应的虚拟机 复制第一行的命令,注意不要docker目录下面,建议在root用户目录  sudo mkdir -p /etc/docker 1 然后复制第二行命令,从EOF开始到EOF结束  sudo tee /etc/docker/daemon.json <<-'EOF' {   "registry-mirrors": ["https://45tfghj.mirror.aliyuncs.com"] } EOF 然后复制第三行和第四行命令  sudo systemctl daemon-reload sudo systemctl restart docker 三、容器安装(以MySQL为例) 1、拉取镜像 指定版本  docker pull mysql:5.7 不指定版本(拉取最新的)  docker pull mysql 2、运行MySQL镜像 运行mysql镜像命令  docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 运行报错解决办法  报错提示容器mysql名字已经在使用或者被占用  用docker ps或者docker ps -a命令查看被占用容器名字id 用docker rm -f id号命令结束当前被占用容器名字id,或者换一个名字 报错提示端口被占用  00a68f30ec8cda6fce5614b02274adcf5f6490820918a3a7a991f7130452846b docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (40ea488b4a9220c473104083d967915b71c10e8c2c3ca5d7f85ef2c72bb43207): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.  用netstat -tanlp命令查看当前被占用端口号pid 用kill 占用端口进程的PID命令杀死被占用端口号pid或者更换端口号 3306:3306,是把后面的端口号映射给前面的端口号 注意关闭防火墙  关闭防火墙命令  // 临时关闭防火墙 systemctl stop firewalld   // 禁止开机启动防火墙 systemctl disable firewalld 3、远程连接配置 成功启动MySQL容器后,切换到mysql的conf目录下面  cd mydata/mysql/conf/ 创建my.conf文件  vim my.conf 写入以下配置信息并保存  [client] default-character-set=utf8  [mysql] default-character-set=utf8  [mysqld] init_connect="SET collation_connection = utf8_unicode_ci" init_connect="SET NAMES utf8" character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve 然后重启容器 docker restart 容器ID 其他的容器安装和这个都差不多,运行时出错的解决办法也基本一样,就不多多赘述了 ———————————————— 原文链接:https://blog.csdn.net/weixin_54212148/article/details/130648663 
  • [技术干货] docker部署influxdb教程
    【Docker部署InfluxDB教程】 以下是在CentOS 7上使用Docker部署InfluxDB的简单教程: 安装Docker: 在CentOS 7上安装Docker可以使用以下命令:  sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce sudo systemctl start docker sudo systemctl enable docker 拉取InfluxDB镜像: 使用Docker命令从Docker Hub拉取InfluxDB镜像。  sudo docker pull influxdb 运行InfluxDB容器: 使用以下命令运行InfluxDB容器,并暴露端口用于访问InfluxDB。  sudo docker run -d -p 8086:8086 --name influxdb influxdb 检查容器状态: 使用以下命令检查InfluxDB容器的运行状态。  sudo docker ps 如果看到 influxdb容器正在运行,则表示InfluxDB已经成功部署并在端口8086上监听请求。  访问InfluxDB控制台: 在浏览器中访问 http://服务器IP地址:8086,即可进入InfluxDB的Web控制台。默认用户名和密码为 admin:admin。 创建数据库: 在InfluxDB控制台中,点击左侧的“Data Explorer”,然后点击右上角的“+Create”按钮,创建一个新的数据库。 现在,你已经成功使用Docker部署了InfluxDB。可以通过其提供的API和查询语言来存储和查询数据了。如果你想在生产环境中使用InfluxDB,请注意配置安全性和数据备份等方面的问题。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/133981118 
  • [技术干货] docker容器安装与使用
    1. 什么是docker 首先我们可以好好的看看docker的那个可能的图标,你想象到了什么? ... docker是一个开源的应用容器引擎,有Docker公司(前dotCloud公司)开发,基于Apache2.0开源授权协议发行。该引擎提供了一个轻量、快递的环境,能够运行开发者的程序,并方便高效的将程序从开发者的电脑部署到测试环境,然后再部署到生产环境。 docker的优点:  启动速度快(秒级),由于去除了管理程序的开销,docker容器拥有很高的性能,同一台宿主机可以运行更多的容器,有效的利用了资源 能够为开发,测试和部署提供一致的环境,避免了在开发或测试时一切正常,但在生成环境中却不能运行的问题。 鼓励面向服务架构,Docker 推荐单个容器只运行一个应 用程序或进程,这样就形成了一个分布式的应用程序模型 docker用途 提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境 提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容 组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构 docker与虚拟机的区别: VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用 Docker在宿主机的操作系统上创建Docker引擎,直接通过宿主机的操作系统调用硬件资源,而不是虚拟化操作系统和硬件资源,所以占用资源更少,性能更高。 2. docker的核心组件 1)Docker客户端和服务器,也称为Docker引擎 2)Docker镜像 3)Registry 4)Docker容器 docker引擎 docker是客户端/服务器架构的程序,docker客户端只需向docker服务器或守护进程发送请求,守护进程或服务器完成后返回结果,docker的守护进程有时也称作为docker引擎。用户可以在同一台宿主机上运行Dokcer守护进程和客户端,也可以从本地的docker客户端连接到另一台宿主机上的docker引擎。示意图: docker镜像 镜像是docker容器的基石,用户基于镜像来运行容器的,镜像在docker生命周期中属于“构建阶段”,镜像基于联合文件系统的一种层式结构,由一系列的命令构建出来。可以将镜像理解为容器的“源代码”。镜像体积小,便于分享,存储,更新。 Registry Registry即仓库,Registry分为公共和私有的两种。docker公司运营的公共Registry是docker hub。用户可以自己注册账号,在其中保存自己的镜像。也可以搭建私有的仓库。 容器 镜像处在docker生命周期的“构建”阶段,容器则处在“运行”阶段,如果将镜像理解为一个“类”,则容器可以理解为这个“类”的“运行时实例”,可以被创建,启动,停止,删除。  总结起来容器就是:一个镜像格式,一系列标准操作,一个执行环境。  3. docker的安装 3.1 安装的先决条件 安装docker时需要一些基本的前提条件:  运行64位cpu架构的机器(x86_64, amd64),不支持32位机器 运行linux3.8或更高的内核(可以使用uname -a 命令查看系统内核) 内核必须支持一种合适的存储驱动:Device Messager,AUFS,vfs等,默认为Device Messager。 内核支持cgroup和命名空间 注:cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)  3.2.1 ubuntu安装docker 1.卸载可能存在的旧版本 apt-get remove docker docker-engine docker-ce docker.io 2.更新apt包索引 apt-get update 3.安装以下包以使apt可以通过HTTPS使用存储库(repository) apt-get install -y apt-transport-https ca-certificates curl software-properties-common  4.添加Docker官方的GPG密钥  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 成功后应该显示OK 5.设置stable存储库 add-apt-repository "deb [arch=amd64] Index of linux/ubuntu/ $(lsb_release -cs) stable"  6.再更新一下apt包索引 apt-get update 7.安装最新版本的Docker CE apt-get install -y docker-ce 8.验证  8.1查看docker服务是否启动 systemctl status docker 或如下命令 service docker status 8.2若未启动,则启动docker服务  systemctl start docker 或如下命令service docker start  apt-get update && apt-get install  -y docker.io 这种方式安装的优点是简单,缺点是版本较低(目前是18.09)  3.2.2 CentOS安装docker 推荐 --- 从第三步开始 安装  1)root账户登录,查看内核版本如下  [root@localhost ~]# uname -a Linux localhost.localdomain 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018  x86_64 x86_64 x86_64 GNU/Linux yum包更新到最新 [root@localhost ~]# yum update 已加载插件:fastestmirror Loading mirror speeds from cached hostfile  * base: centos.ustc.edu.cn  ...... 注:如果不执行更新,获取的docker版本太旧  3)安装yum-util, 该包提供yum-config-manager功能  yum install -y yum-utils 4.设置docker源  yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)  yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)  可以任选其一  5) 安装docker, yum install docker-ce-版本号  [root@localhost ~]# yum install docker-ce-18.06.3.ce 已加载插件:fastestmirror Loading mirror speeds from cached hostfile  * base: mirrors.aliyun.com  * extras: mirrors.aliyun.com  * updates: mirrors.aliyun.com 正在解决依赖关系 --> 正在检查事务 ---> 软件包 docker-ce.x86_64.0.18.06.3.ce-3.el7 将被 安装 6)查看docker版本号,验证  [root@localhost ~]# docker version Client:  Version:           18.06.3-ce  API version:       1.38  Go version:        go1.10.3  Git commit:        d7080c1  Built:             Wed Feb 20 02:26:51 2019  OS/Arch:           linux/amd64  Experimental:      false 7)启动docker  systemctl start docker 8.设置开机启动  systemctl enable docker 3.3 配置镜像加速器 默认的情况下docker会从docker hub中查找或下载镜像,在国内会比较慢。可以使用阿里的镜像加速器来提高速度。  具体操作步骤如下:  1)获取加速器地址 首先需要有一个淘宝或支付宝的账号,登录阿里云 https://www.aliyun.com/。 点击“控制台”,进入如下界面: 点击容器镜像服务,就可以获取镜像加速器地址,操作如下图所示:方法2 自己配置 在/etc/docker目录下创建daemon.json配置文件  vim /etc/docker/daemon.json 具体配置文件内容如下:  {     "registry-mirrors":["你的阿里云专属加速器地址"] } 3)重新加载daemon  systemctl daemon-reload 4)重启docker  systemctl restart docker 4. 镜像常用操作 4.1 搜索镜像 docker search 镜像名称 示例:  docker search rabbitmq 4.2 镜像下载  docker pull 镜像名称:标签 如果未指定标签,则默认我latest  示例:  # 未指定标签 docker pull ubuntu #指定标签 docker pull ubuntu:16.04 4.3 查看宿主机中的镜像 docker images 4.3 删除镜像 docker rmi 镜像id或名称 如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像,如需强行删除可以使用-f参数,例如:docker rmi -f ubuntu:16.04  5. 容器常用命令 镜像在docker生命周期中的构建阶段,容器则属于运行阶段,可以将容易理解为镜像的一个运行实例。  5.1 运行容器 首先让我们来尝试启动第一个docker容器,docker run命令提供了docker容器的创建到启动的功能。使用该命令创建和启动容器也是docker的推荐做法。  #创建并启动一个ubuntu容器 sudo docker run -it ubuntu:18.04 /bin/bash # 除了名称外我们还能使用 id # -itd 中的d是 运行后台运行 后边test是镜像名称 我们可以通过名称对这个镜像 进行一些操作也可使用id docker run -itd --name test b6f bash 使用该命令时,如果镜像还没有下载,则docker会首先下载该镜像,然后执行创建并启动容器。具体参数说明如下:  -i 开启容器中的STDIN(标准输入流),能接受命令,可以理解为已交互模式启动容器 -t 为容器分配一个tty终端,即:分配一个命令行窗口, 有了这两个参数新创建的容器才能有一个交互式shell。 /bin/bash 参数告诉docker在容器中启动一个bash shell 可以通过--name 参数为容器命名 如果指定 -d 参数,则说明容器以守护进程形式启动 可以使用 docker help run查看更详细的参数说明 在容器中使用,“cat /etc/issue”可以查看到运行中的容器其实为ubuntu系统。 -i -t参数是我们创建一个交互式容器的最基本的参数,需说明的是所创建的容器是交互式的,而不是一个运行后台服务的容器。  运行上面的命令,docker会为我们创建一个ubuntu的容器,并自动以root身份进入容器,如下图: 下方为没有 d命运 会自动进入镜像  图中的7b8b196818d5为容器的编号。  创建容器还可以使用docker create命令,如:  docker create -it ubuntu:latest 参数与docker run命令相同,与docker run命令不同的是docker create命令创建的容器不会自动启动。  5.2 使用容器 这是一个精简但完整的ubuntu系统,例如执行以下的命令:  root@7b8b196818d5:/# hostname 7b8b196818d5   root@7b8b196818d5:/# ls bin   dev  home  lib64  mnt  proc  run   srv  tmp  var boot  etc  lib   media  opt  root  sbin  sys  usr 但当你收入ip,或ifconfig命令时会发现,无法找到命令:  root@7b8b196818d5:/# ip a bash: ip: command not found   root@7b8b196818d5:/# ifconfig bash: ifconfig: command not found   root@7b8b196818d5:/# whereis ifconfig ifconfig:   #查看环境变量 root@7b8b196818d5:/# env ..... HOSTNAME=7b8b196818d5 PWD=/ HOME=/root TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env OLDPWD=/etc/apt  因为是这些命令还都没有安装,ubuntu镜像是精简版的系统,如果需要使用这些命令需要另外安装net-tools,包括vi,vim等也是需要另外安装的。  5.3 查看运行的容器  保持刚才运行的容器不要退出,另外打开一个命令终端,输入下列命令: 这个需要先退出 镜像 ctrl+d  lisen@ubuntu:~$ sudo docker ps CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 7b8b196818d5        ubuntu:18.04        "/bin/bash"         2 hours ago         Up 2 hours                              cranky_lewin docker ps命令可以查看运行中的容器信息,包括id,镜像,名称等。  注:为什么要保持刚才运行的ubuntu容器不退出?原因是上面创建的是普通的交互式容器,不是运行于后台的服务容器,如果推出则容器自动停止运行。容器退出后可以使用 docker ps -a 命令查看到,-a参数表示查看所有容器,包括已停止的。  5.4 容器的退出 退出时如果想继续运行容器:按顺序按【ctrl+p】,【ctrl+q】  如果不想继续运行:按【ctrl+d】或输入exit  如果不是运行于后台的服务容器,则在容器退出后回自动停止运行,此时通过docker ps命令查看不到容器信息,需要使用docker ps -a命令查看。  5.5 容器的启动与停止 1)停止容器  root@ubuntu:/# docker stop 7b8b 7b8b 2)启动容器  root@ubuntu:/# docker start 7b8b 7b8b 注:7b8b为容器id,容器id可以不输入完全,但需要能唯一确定一个容器。  5.6 复制文件 复制文件可以分为从容器到宿主机的复制,和从宿主机到容器的复制  1)从容器到宿主机的复制, 容器 -> 宿主机  命令格式:docker cp 容器名或ID:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 示例:将test.js从容器里面拷到宿主机的/opt路径下面 //测试复制 在镜像系统中创建一个文件复制  #可通过名称 或 编号  docker cp test:/home/abc.txt /opt 2)从宿主机到容器的复制, 宿主机 -> 容器  命令格式:docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径  示例:如果宿主机已经实现了换源,则可以通过如下命令将宿主机的配置文件拷到容器中,实现ubuntu容器换源  docker cp /opt/bbb.txt ubuntu:/home 5.7 进入容器 命令格式:docker exec -it 容器ID/容器NAME /bin/bash  示例:  root@ubuntu:/# docker exec -it 7b8b /bin/bash root@7b8b196818d5:/# 注意:只能进入运行中的容器。  5.8 查看容器信息 查看容器信息可以进入容器后,使用命令查看,例如:hostname,env等,(如果运行ifconfig,ip addr等命令,则需要先安装),可以在宿主机通过如下格式的命令查看:  root@ubuntu:/# docker exec 7b8b hostname 7b8b196818d5   root@ubuntu:/# docker exec 7b8b env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=7b8b196818d5 HOME=/root 推荐使用docker inspect命令查看容器信息,使用方式如下所示  root@ubuntu:/# docker inspect 7b8b [     {         "Id": "7b8b196818d5d53af160847462c6ab68987d938bb68cd8ea982b229fee76268c",         "Created": "2020-01-31T03:54:16.467988209Z",         "Path": "/bin/bash",  ... ... 7b8b为容器ID  该命令以json的方式返回容器的信息,内容比较多,可以只查询一种一部分,示例如下:  root@ubuntu:/# docker inspect -f {{.Config.Hostname}} 7b8b  7b8b196818d5 注:inspect使用的是go语言模板,详细资料请参考Go语言模板。  进行查询  docker inspect test | grep IP  5.9 容器的删除 命令格式:docker rm 容器ID,(与删除镜像的命令很像,只少个i,镜像删除docker rmi 镜像名)  参数:  -f, --force=false 是否强行终止并删除一个运行中的容器 -1, --link=false :删除容器的连接 ,但保留容器 -v, --volumes=false :删除容器挂载的数据卷 6. 其他(了解) 6.1 如何卸载原先安装的 docker 1.打开Terminal,执行下面命令:  sudo apt-get purge docker-ce 2.删除Docker安装目录  sudo rm -rf /var/lib/docker 3.验证是否删除成功  docker info bash: /usr/bin/docker: No such file or directory 我们可以看到已经无法找到 docker 安装目录,证明 卸载成功  6.2 关于删除容器 方法一:  #显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,  sudo docker ps -a|grep Exited|awk '{print $1}' #查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器  sudo docker rm docker ps -a|grep Exited|awk '{print $1}' 方法二:  #删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了)  sudo docker rm $(sudo docker ps -a -q) 方法三:  #根据容器的状态,删除Exited状态的容器  sudo docker rm $(sudo docker ps -qf status=exited) 方法四:  #Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。  sudo docker container prune (推荐) ———————————————— 原文链接:https://blog.csdn.net/qq_62898618/article/details/128309273 
  • [技术干货] Docker容器技术 详解
    一、概述 (一)docker介绍 1、Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不像虚拟机一样,迁移一台虚拟机及其资源;  2、Docker 是一个开源的应用容器引擎,基于 Go 语言开发。  3、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。  4、Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题  (二)为什么使用Docker 我们知道一款产品从开发到上线,从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题,尤其是当我们的产品多版本迭代之后,不同环境之间的兼容就会成为一个大问题; 这时 Docker 的出现就解决了这一难题,Docker 的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的的复制过来,不用在担心环境不一致导致“开发时可以正常运行,生成环境就会出问题”,“在我的机器上可以正常运行,在别人的机器上就不能运行”的问题了  (三)docker优势 1、运行环境的一致性: Docker 的镜像提供了除了内核之外完整的运行环境,确保了应用运行的一致性;  2、更快速地启动部署: 可以做到秒级,甚至毫秒级的的启动时间。大大节约了开发、测试、部署的时间;  3、更好的隔离性: 每个服务器都是独立运行的、完全隔离的。避免公用的服务器,资源会容易受到其他用户的影响;  4、弹性伸缩、快速扩展: 能够更好的处理集中爆发式的服务器使用压力;  5、迁移更加方便: “带环境安装”;  6、持续交付和部署: 使用 Docker 可以通过定制镜像来实现持续集成,交付,部署;  二、docker的组成 (一)镜像:类似虚拟机镜像 , 是一个特殊的文件系统 1、操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。  2、Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。  (二)容器:类似linux系统环境,运行和隔离应用。是镜像运行时的实体 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。  (三)仓库:集中存放镜像文件的地方。 镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的地方,比如后面我们要学的,Docker Registry就是这样的服务。 三、在操作系统CentOS7.9安装 注意:不要关闭防火墙   (一)配置安装源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  (二)建立元数据缓存 yum  makecache [fast]   (三)安装docker-ce  yum install -y docker-ce  (四)更换国内源仓库 vim /etc/docker/daemon.json  {     "registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ] }   systemctl restart docker 四、docker 信息查看 (一)docker version  (二)docker info   五、镜像相关 (一)组成 index/name:tag          #tag为latest时不用书写  (二)搜索 docker search keyWord   (三)拉取 1、docker pull imageName  2、docker pull alpine     (四)查看 docker images   (五)删除 docker rmi imageName  (六)上传 docker push imageName docker hub登录        docker login  (七)修改POSITORY:TAG(修改后保留原image,且imageID相同) docker tag  oldName(POSITORY:TAG) newName(POSITORY:TAG)   (八)导出 docker save  oldName(POSITORY:TAG)    -o filePath/fileName  (九)导入 docker load -i  filePath/fileName 五、容器相关 (一)启动 1、一次性运行(会直接进入容器中,当exit退出容器时,容器停止运行) docker run -it POSITORY:TAG /bin/bash  2、后台运行(不会直接进入容器,若进入后exit退出,容器依然运行) docker run -itd  POSITORY:TAG /bin/bash (二)查看 docker ps -a  (三)进入(CONTAINER ID 写到不重复即可)  docker exec -it  CONTAINER ID /bin/bash (四)推出 exit (五)删除容器 docker rm -f   容器名称或者ID (六)将容器导出为归档包 docker export  容器名称  -o 归档包名称  (七)将容器导入的归档包导入为镜像 docker import 归档包名称  repository:tag  (八)将容器直接导出为镜像(服务容器导出为镜像采用该方法) docker commit  容器名称或ID repository:tag (九)状态 1、created docker create 2、 up (1)docker start (2)docker run (3)docker restart  3、Exited docker stop         容器运行异常 4、paused docker pause docker  unpause                恢复 (十)查看容器详细信息 docker  inspect  容器名称或者ID  (十一)端口映射 1、-P(大写)                 随机端口映射,默认32768 2、-p(小写)  hostPort:containerPort  3、若发现不能正常进行访问 可能是运行的shell不正确 (1)查看容器详细信息         (2)docker ps -a --no-trunc (3)查看COMMAND                 (4)将COMMAND中的运行脚本跟在docker run命令的最后 (十二)查看容器端口映射 docker  port  容器名称或ID (十三)向容器内拷贝文件 docker cp  文件名  容器名称或ID (十四)查看容器运行进程 docker top  容器名称或ID (十五)查看容器资源使用 docker stats   容器名称或ID (十六)查看容器日志 docker logs   容器名称或ID 1、--details:显示更为详细的日志信息。 2、--follow(-f):跟踪日志输出。 3、--since:显示自某个开始时间的所有日志。 4、--tail:仅列出最新的N条容器日志。 5、--timestamps(-t):显示时间戳。 6、--until:显示到某个截止时间的所有日志。 ———————————————— 原文链接:https://blog.csdn.net/wuds_158/article/details/131523788 
  • [技术干货] Docker 容器基础介绍
    docker start 命令与docker run 命令的区别: start是通过镜像直接运行容器,run是运行指定容器 1. Docker windows版本安装 windows进行相关设置: 点击“设置”—>搜索“Windows功能”—>启用或关闭Windows功能—>勾选Hyper-v,启用后电脑会重启,安装环境配置成功  下载docker安装包,下载完成后,双击安装docker windows版本安装包下载地址 docker安装完成后双击运行,可能会弹出异常窗口,提示"WSL2 installations is incomplete",这是系统中没有安装WSL2内核的原因,打开 https://aka.ms/wsl2kernel, 在打开的页面中有一个"适用于x64计算机的WSL2 Linux内核更新包"链接,点击下载安装 重启Docker Desktop即可正常使用。可在cmd或者PowerShell命令行中使用docker或者docker-compose等相关命令了。 PS: 如果您在安装WSL2的过程中遇到了问题,可能是您的系统版本较低等原因,您可按照 https://aka.ms/wsl2wkernel 页面的相关提示更新系统。该Docker Desktop的安装方法基于Windows10的WSL2,如果您的系统没有或者不能安装WSL2,可能不能使用该方法安装Docker Desktop 此时Docker安装运行成功(显示绿色)  2. 设置Docker镜像加速器 国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务例如: 科大镜像:https://docker.mirrors.ustc.edu.cn/ 网易:https://hub-mirror.c.163.com/ 阿里云:https://<你的ID>.mirror.aliyuncs.com 七牛云加速器:https://reg-mirror.qiniu.com 配置镜像加速器步骤以阿里云为例 注册阿里云账号: https://dev.aliyun.com/ 进入阿里云加速器页面,根据系统版本等信息获取对应的加速器地址: https://cr.console.aliyun.com/#/accelerator 复制对应地址粘贴到Docker–>setting–>docker Engine  //可用示例 {   "builder": {     "gc": {       "defaultKeepStorage": "20GB",       "enabled": true     }   },   "experimental": false,   "features": {     "buildkit": true   },   //镜像加速地址   "registry-mirrors": [     "https://epap466m.mirror.aliyuncs.com",     "https://hub-mirror.c.163.com/"   ] } cmd命令窗口执行: “docker pull centos” 下载linux按照包, 安装运行  3. Docker 其它镜像相关 Docker镜像库官方地址 道客云镜像库(国内比较快) 在使用镜像时可以先去镜像仓库查看是否有需要的镜像,根据系统版本等信息选择下载指定的版本镜像 以Docker安装redis为例 先去镜像仓库搜索查看是否存在  版本选择: 可以通过SortBy自定排序, 其中lastest是最新版本镜像, 直接复制后面的"docker pull redis:latest"命令下载即可 也可以直接在cmd窗口执行"docker search redis" 查看可用版本 此处在cmd窗口执行" docker pull redis:latest" 拉取redis最新镜像 镜像下载完成后可以通过"docker images" 命令查看本地镜像 也可以在Docker可视化平台images页面查看  安装完成后,我们可以使用以下命令来运行 redis 容器 //-p 6379:6379:映射容器服务的 6379 端口到宿主机的 6379 端口。外部可以直接通过宿主机ip:6379 访问到 Redis 的服务 docker run -itd --name redis-test -p 6379:6379 redis 最后我们可以通过 “docker ps” 命令查看容器的运行信息:  docker ps -a # 查看所有容器 docker ps # 查看正在运行的容器 docker rm $(docker ps -a -q) #移除掉所有容器 docker restart container-id # 重启某个容器  接着我们通过 redis-cli 连接测试使用 redis 服务 docker exec -it redis-test /bin/bash 10. 本机连接测试 四. 更新镜像 基于容器更新镜像: 上面修改配置是在容器上修改的不会对镜像有影响,可以对修改后的容器生成新的镜像 docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像名:TAG # 例: # docker commit -m="修改了首页" -a="ws" mytomcat ws/tomcat:v1.0 #使用新镜像运行容器 docker run --name tom -p 8080:8080 -d ws/tomcat:v1 Dockerfile构建镜像,可以理解为用来构建镜像的源码,假设一个服务项目采用Docker容器方式在服务器上运行,就需要构建这个项目的镜像(也就是在Dockerfile文件中编写命令,Docker读取该文件根据命令创建镜像) Dockerfile 的格式要求: "#"代表注释, 第一行有效命令以"FROM"开头,命令大小,通常会单独创建一个文件夹用来存放构建镜像所需要的文件,否则防止Docker扫描到不需要的文件,使用ignore排除 假设构建一个SpringBoot项目镜像,实现步骤 //1.将SpringBoot项目打为jar包 //2.linux服务器上创建构建该项目的文件夹,用来存放构建该项目镜像时需要的文件,jar包等 mkdir dockerfiles //创建dockerfiles文件夹 //3.将打包好的SpringBoot项目jar包上传到创建的文件夹中 //4.该文件夹下创建Dockerfile文件,编写构建镜像指令 vim Dockerfile //注意点,如果不使用该名字,在构建时需要手动指定与当前创建的名字一致 一个基础的的Dockerfile文件 #第一行命令必须是"FROM" #指定基础镜像,本地没有会从dockerHub pull下来 FROM java:8 #作者 MAINTAINER xxx作者名称 # 把可执行jar包复制到基础镜像的执行路径下,"/"后直接是项目名称表示上传到基础镜像的跟目录 ADD 当前项目名称.jar /上传到镜像后的项目名称.jar # 镜像要暴露的端口,如要使用端口,在执行docker run命令时使用-p生效 #端口号要与项目中的一致,可以设置传输协议,默认使用TCP,例如EXPOSE 80/tcp EXPOSE 80 # ENTRYPOINT 表示后续根据当前Dockerfile创建的镜像,根据该镜像创建容器后,默认执行的第一条命令 # 此处第一条命令时可以理解为 java -jar 指定jar项目,"/"后直接是项目.jar表示在基础镜像的根目录下查找该项目 ENTRYPOINT ["java","-jar","/项目名称.jar"]  # 构建,不要忘了pro 后的".",表示上下文 docker build -t 构建的镜像名称 . # 根据当前创建的镜像生成容器 docker run --name 容器名称 -d -p 端口映射,容器端口:镜像(项目)暴露的端口 镜像名称或镜像id #启动容器后,查看容器日志,docker默认对日志进行了整合 docker logs 当前容器名称 Dockerfile常用指令解释 构建镜像需要创建Dockerfile文件,文件中编写构建指令,然后Docker服务读取该文件根据指令进行构建  FROM 指令,在Dockerfile文件中第一行有效指令必须是FROM,表示当前构建的镜像使用的基础镜像,也可以理解为当前构建的镜像基础环境,例如上面构建一个SpringBoot项目的镜像,SpringBoot依赖与java环境,所以需要指定当前构建的项目依赖的基础镜像 #如果当前容器中没有java镜像,会自动下载,":"后是指定基础镜像的版本 FROM java:8 FROM 镜像名称或id:镜像版本号 MAINTAINER : 设置制作当前镜像的作者名称,任意文本字符串(不推荐用后面被标识了过时) LABEL : 可以代替上面设置制作进行作者名称的命令,该命令是给镜像指定各种元数据 LABEL <作者名称>=<aaaa> <key>=<value> <key>=<value>... COPY 与 ADD : 都可以用于从宿主机复制文件到创建的新镜像文件中,区别是使用COPY命令复制文件到进行中不会解压,使用ADD命令复制文件到进行中会自动根据文件名创建目录自动解压(注意点如果使用ADD命令去网络上下载压缩包时不会解压) #COPY 命令: # <src>:要复制的源文件或者目录,可以使用通配符 # <dest>:目标路径,即正在创建的image的文件系统路径;建议<dest>使用绝对路径, #否则COPY指令则以WORKDIR为其起始路径 COPY <src>...<dest> COPY ["<src>",..."<dest>"] 规则: <src> 必须是build上下文中的路径,不能是其父目录中的文件 如果 <src> 是目录,则其内部文件或子目录会被递归复制,但 <src> 目录自身不会被复制 如果指定了多个 <src> ,或在 <src> 中使用了通配符,则 <dest> 必须是一个目录,则必须以/符号结尾 如果 <dest> 不存在,将会被自动创建,包括其父目录路径  #ADD命令用法和COPY指令一样,ADD支持使用TAR文件和URL路径 ADD <src>...<dest> ADD ["<src>",..."<dest>"] 规则: 和COPY规则相同 如果 <src> 为URL并且 <dest> 没有以/结尾,则 <src> 指定的文件将被下载到 <dest> 如果 <src> 是一个本地系统上压缩格式的tar文件,它会展开成一个目录;但是通过URL获取的tar文件不会自动 展开 如果 <src> 有多个,直接或间接使用了通配符指定多个资源,则 <dest> 必须是目录并且以/结尾  WORKDIR : 为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定设定工作目录,后续的操作都是在WORKDIR 设置的目录下完成的,并且例如构建了一个tomcat容器,执行启动容器后,执行"docker exec -it 容器ID或者容器名 /bin/bash" 命令进入指定容器,默认会进入一个目录,但是当使用WORKDIR指定目录后,默认进入的是WORKDIR指定的目录 WORKDIR /目录地址 VOLUME : 创建挂载点,可以挂在宿主机上的卷或者其它容器上的卷,注意点不能指定宿主机目录,使用的是自动生成的 VOLUME <mountpoint> VOLUME ["<mountpoint>"] EXPOSE : 设置容器对外暴露的端口,通过该端口实现与外部通信 #<protocol> 用于指定传输层协议,可以是TCP或者UDP,默认是TCP协议 #EXPOSE可以一次性指定多个端口,例如: EXPOSE 80/tcp 80/udp EXPOSE <port>[/<protocol>] [<port>[/<protocol>]...] ENV 与 ARG 命令 : 用来给镜像定义所需要的环境变量,并且在Dockerfile文件中使用其它命令时用到了该环境变量,例如ENV、ADD、COPY等需要使用通过ENV或ARG定义的环境变量,可以通过调用的方式获取,调用格式:k e y 或者 key或者key或者{variable_name}, ARG与ENV相同,区别在于在使用ARG定义的环境变量时,可以在外部传参数 #ENV 命令:  #第一种格式中, <key> 之后的所有内容都会被视为 <value> 的组成部分,所以一次只能设置一个变量 #第二种格式可以一次设置多个变量,如果 <value> 当中有空格可以使用\进行转义或者对 <value> 加引号进行标识; 另外\也可以用来续行 ENV <key> <value> ENV <key>=<value>...  #ARG命令: #指定一个变量,可以在docker build创建镜像的时候,使用 --build-arg <varname>=<value> 来指定参数 ARG <name>[=<default value>] RUN : 用来指定docker build过程中运行指定的命令,也就是在构建容器时,默认执行的一段代码 #例如通过RUN命令安装vim,容器中默认是不支持vim命令的,假设后续进入容器的操作中想要使用vim命令,可以在该命令,指定在build容器只执行下载安装vim RUN yum install -y vim  第一种格式里面的参数一般是一个shell命令,以 /bin/sh -c 来运行它 第二种格式中的参数是一个JSON格式的数组,当中 <executable> 是要运行的命令,后面是传递给命令的选项或者 参数;但是这种格式不会用 /bin/sh -c 来发起,所以常见的shell操作像变量替换和通配符替换不会进行;如果你运 行的命令依赖shell特性,可以替换成类型以下的格式  RUN <command> RUN ["<executable>","<param1>","<param2>"] RUN ["/bin/bash","-c","<executable>","<param1>"] CMD : 容器启动时运行的命令, RUN和CMD区别: RUN指令运行于镜像文件构建过程中,CMD则运行于基于Dockerfile构建出的新镜像文件启动为一个容器的时候 CMD指令的主要目的在于给启动的容器指定默认要运行的程序,且在运行结束后,容器也将终止;不过,CMD命令可以被docker run的命令行选项给覆盖 Dockerfile中可以存在多个CMD指令,但是只有最后一个会生效  CMD <command> CMD ["<executable>","<param1>","<param2>"] CMD ["<param1>","<param2>"] ENTRYPOINT : 类似于CMD指令功能,用于给容器指定默认运行程序, 和CMD不同的是 ENTRYPOINT启动的程序不会被docker run命令指定的参数所覆盖,而且,这些命令行参数会被当 做参数传递给ENTRYPOINT指定的程序(但是,docker run命令的–entrypoint参数可以覆盖ENTRYPOINT) docker run命令传入的参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后作为其参数使用,同样,Dockerfile中可以存在多个ENTRYPOINT指令,但是只有最后一个会生效 ENTRYPOINT 与 CMD 的区别是: 假设在执行"docker run 其它命令"时,CMD 命令会被run后面添加的命令覆盖掉,ENTRYPOINT 不会,如果两个命令同时存在,谁在最后谁生效  ENTRYPOINT<command> ENTRYPOINT["<executable>","<param1>","<param2>"] ONBUILD : 用来在Dockerfile中定义一个触发器 Dockerfile用来构建镜像文件,镜像文件也可以当成是基础镜像被另外一个Dockerfile用作FROM指令的参数,在后面这个Dockerfile中的FROM指令在构建过程中被执行的时候,会触发基础镜像里面的ONBUILD指令 ONBUILD不能自我嵌套,ONBUILD不会触发FROM和MAINTAINER指令 在ONBUILD指令中使用ADD和COPY要小心,因为新构建过程中的上下文在缺少指定的源文件的时候会失败  ONBUILD <instruction> 构建一个基础的centOS镜像示例 linux下执行"mkdir 存放构建centOS镜像构建所需要的文件目录" 命令创建目录 当前构建的centOS镜像需要使用到Tomcat,JDK等jar,将这两个jar包上传到该目录下 注意点jar包解压前解压后的名称是否一致,如果不一致,在使用ENV配置环境变量时以解压后的为准,可以通过tar zxvf 包名称.jar 解压一下看看 编写Dockerfile文件命令 #1.FROM指令设置构建当前镜像使用的基础镜像 FROM centos:版本 #2.ADD命令解压Tomcat到/usr/local目录下(由于已经将文件上传到了指定的目录下所以ADD命令不需要再次复制了) ADD 上传上来的tomcat包 /usr/local #.ADD命令解压JDK ADD 上传上来的JDK包 /usr/local  #3.ENV 命令配置JAVA_HOME环境变量示例, #也就是设置JAVA_HOME指向上传的JDK(主要上传的JDK包名与解压后的是否一致) ENV JAVA_HOME=/usr/local/解压后的JDK名称 #4.ENV 命令配置CLASSPATH,可以直接通过"$"方式使用上面通过ENV配置的JAVA_HOME, #连起来也就是配置CLASSPATH指向上传的JDK解压后的lib目录 ENV CLASSPATH=.$JAVA_HOME/lib  #5.Env 命令配置tomcat的catalina ENV CATALINA_HOME=/user/local/上传的tomcat包解压后的名字  #6.将配置好的环境变量设置到contOS的path上 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin  #7.使用WORKDIR  WORKDIR $CATALINA_HOME  #8.使用RUN命令,设置一个docker build容器时指定执行的命令 #此处用来安装一个vim,当根据当前镜像创建容器时,默认执行该命令,安装了一个vim指令 RUN yum install -y vim  #9.使用EXPOSE命令设置当前镜像创建容器时对外暴露的端口(可以指定多个,指定连接协议等) EXPOSE 8080  #10.使用VOLUME命令,设置挂载目录,也就是指定容器中的指定目录下的文件会生成到宿主机上的对应的挂载目录 #例如当前: 在上面使用WORKDIR 指令设置了工作目录为CATALINA_HOME,在该目录下有一个webapp目录 #当容器运行时在该目录下创建或修改该目录下的文件,都会将文件的变动设置到当前Docker宿主机的对应挂载目录下 #也就是"Mounts"中的"Source"指向宿主机的目录 VOLUME /webapp   #11.使用ENTRYPOINT命令,设置启动容器时执行的命令,此处设置启动容器时执行该命令启动Tomcat ENTRYPOINT ["catalina.sh","run"] 执行构建命令不要忘记后面的",": docker build -t 构建的镜像名称:版本 . 根据镜像运行容器: docker run --name 容器名称 -d -p 端口映射,容器端口:镜像(项目)暴露的端口 镜像名称或镜像id 例如构建一个SpringBoot项目镜像,在FROM时就可以基于当前自己的centOS进行构建 五. Docker 安装并配置 Centos 安装Centos 参考博客 参考上面Docker安装配置镜像加速器成功后,cmd窗口执行"docker search centos" 命令,或进入docker镜像仓库查询centos镜像版本,获取指定版本进行,执行命令下载镜像"docker pull centos:centos7" 执行"docker images"命令可以查看当前本地保存的镜像,也可以在ui页面查看 在Docker操作页面运行centos  或通过cmd命令行方式运行: 注意Centos 系统默认 ssh 连接端口是 22 ,在一些特定的条件中,22 端口被禁用或者被屏蔽,因而无法使用 22 端口进行 ssh 连接,此时把 22 端口映射为其他端口进行 ssh 连接、访问,参考博客 防止后续重启ssh报错问题 //启动centos容器,并指定容器名称为k8s-master,并指定把docker上centos的50001端口映射到本机50001端口 docker run -it --name k8sMaster -p 50001:22 --privileged=true centos:centos7 /usr/sbin/init 运行后,执行"docker ps"查看当前运行的容器,获取到容器id,也就是"CONTAINER ID"位置数据 执行命令"docker exec -it 容器ID /bin/bash"进入到运行的centos中,或通过ui进入 会弹出另外一个命令行窗口,该窗口就是centos系统  配置 Centos 上面启动并进入到centos系统后,安装ssh服务和网络必须软件,执行命令:  yum install net-tools.x86_64 -y  yum install -y openssh-server 安装过程中可能会报错"Failed to download metadata for repo ‘AppStream’ [CentOS] Failed to set locale, defaulting to C warning message on CentOS Linux when running yum", 需要更新你的 CentOS,你需要改变镜像的 vault.CentOS.org ,它们将被永久存档。或者,您可能想要升级到 CentOS Stream, 执行命令:参考文档,执行以下命令(执行完后后重新执行上面报错的命令) # cd /etc/yum.repos.d/ # sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* # sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* # yum update -y 安装passwd软件(用于设置centos用户密码,便于用Xshell连),执行命令: yum install passwd -y  注意点在安装passwd软件时可能会报"Package passwd-0.79-6.el7.x86_64 already installed and latest version Nothing to do" 表示已经安装了该软件,此时就需要修改密码  设置root用户密码与修改root密码指令::(两种中间都会提示输入两次密码) #如果第一次安装passwod没有报错,执行设置root指令 passwd root #如果第一次安装报错,提示已安装了,执行以下命令 passwd 重启ssh,执行以下命令 systemctl restart sshd 使用Xshell连接登录前首先要获取到本机的ip地址,cmd窗口执行"ipconfig"获取到ipv4地址就是本机ip  注意如果宿主机重启,不设置固定ip的话ip地址可能会变,使用Xshell连接时可能会返回一下错误,需要再次通过ipConfig获取宿主机ip Connecting to ip地址:端口号... Could not connect to '172.26.64.1' (port 50001): Connection failed. CentOS 7 端口与防火墙相关设置 CentOS升级到7之后,使用firewalld代替了原来的iptables,例如以下查看是否开放80端口命令 firewall-cmd --zone=public --add-port=80/tcp --permanent 注意在执行firewall相关命令时可能会报一下错误,表示没有安装firewall, firewall是防火墙 sh: firewall-cmd: command not found Unit firewalld.service could not be found. 安装firewall 防火墙 yum install firewalld  安装后,启动防火墙 systemctl start firewalld 关闭防火墙 systemctl stop firewalld 查看状态 systemctl status firewalld 开机禁用 systemctl disable firewalld 开机启用 systemctl enable firewalld 不中断服务的重新加载 firewall-cmd --reload 查看是否开启80端口 firewall-cmd --query-port=80/tcp 查看开放的端口 firewall-cmd --list-port 添加端口 //格式为:端口/通讯协议 permanent永久生效,没有此参数重启后失效 firewall-cmd --add-port=8080/tcp --permanent ———————————————— 原文链接:https://blog.csdn.net/qq_29799655/article/details/106702219 
  • [技术干货] Docker容器
    什么是 Docker?为什么会有 Docker?Docker 的优势? 为什么会有 Docker? 我们知道一款产品从开发到上线,从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题,尤其是当我们的产品多版本迭代之后,不同环境之间的兼容就会成为一个大问题; 这时 Docker 的出现就解决了这一难题,Docker 的出现使我们开发的软件可以“带环境安装”,即安装的时候,可以把原始环境一模一样的的复制过来,不用在担心环境不一致导致“开发时可以正常运行,生成环境就会出问题”,“在我的机器上可以正常运行,在别人的机器上就不能运行”的问题了  什么是 Docker? Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不向虚拟机一样,迁移一台虚拟机极其资源; Docker 是一个开源的应用容器引擎,基于 Go 语言开发。  Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。  总之:Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题 Docker 优势? 运行环境的一致性:Docker 的镜像提供了除了内核之外完整的运行环境,确保了应用运行的一致性; 更快速地启动部署:可以做到秒级,甚至毫秒级的的启动时间。大大节约了开发、测试、部署的时间; 更好的隔离性:每个服务器都是独立运行的、完全隔离的。避免公用的服务器,资源会容易受到其他用户的影响; 弹性伸缩、快速扩展:能够更好的处理集中爆发式的服务器使用压力; 迁移更加方便:“带环境安装”; 持续交付和部署:使用 Docker 可以通过定制镜像来实现持续集成,交付,部署;  Docker 的组成? ​Docker 是一个 C/S 架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。 镜像:类似虚拟机镜像 , 是一个特殊的文件系统 操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。 容器:类似linux系统环境,运行和隔离应用。是镜像运行时的实体 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。 仓库:集中存放镜像文件的地方。 镜像构建完成后,可以很容易的在当前宿主上运行,但是, 如果需要在其它服务器上使用这个镜像,我们就需要一个集中存储、分发镜像的地方,比如后面我们要学的,Docker Registry就是这样的服务。 Docker 的安装(CentOS7)? ubuntu 安装 docker 看这篇:Ubuntu下安装docker和docker-compose CentOS7 自动安装 docker 看这篇:CentOS下安装docker和docker-compose 以下是 docker 手动安装:  Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。​ 由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS上。 注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境,而且Docker很多补丁不支持更新。 确定你是不是 CentOS7及以上的版本:cat /etc/redhat-release yum 安装 gcc 检查是否安装了gcc、g++:gcc -v,g++ -v 安装gcc、g++:yum -y install gcc,yum -y install gcc-c++ 安装需要的软件包:yum install -y yum-utils device-mapper-persistent-data lvm2 设置镜像仓库 推荐阿里云:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新 yum 软件包索引:yum makecache fast 安装 docker-ce(社区版),企业版收费:yum -y install docker-ce 启动 docker 手动启动:systemctl start docker 开机自启:systemctl enable docker 测试 检查版本:docker version 下载运行HelloWorld:docker run hello-world 配置镜像加速:推荐阿里云 mkdir -p /etc/docker vim /etc/docker/daemon.json { “registry-mirrors”: [“https://8y2y8njn.mirror.aliyuncs.com”] } 重新记载daemon,重启docker systemctl daemon-reload systemctl restart docker 卸载 systemctl stop docker yum -y remove docker-ce rm -rf /var/lib/docker 常用的镜像加速器地址: 官方镜像:https://registry.docker-cn.com 网易镜像:http://hub-mirror.c.163.com 清华大学:https://mirrors.tuna.tsinghua.edu.cn/ 搜狐镜像:http://mirrors.sohu.com/ 阿里镜像:阿里镜像需要登录阿里云控制台获取,每个账号有唯一镜像加速地址。在控制台—>镜像容器服务---->镜像中心:镜像加速服务 下获取。 Docker 的常用命令? Docker Hub 类似与 Maven 仓库,是 Docker 的远程仓库 国内的 Docker 网站 https://www.docker.com  1.启动与停止命令 命令    解释 systemctl start docker    启动 Docker systemctl stop docker    停止docker systemctl restart docker    查看docker状态 systemctl status docker    开机启动 systemctl enable docker    开机启动 docker info    查看docker概要信息 docker --help    查看docker帮助文档 2.镜像相关命令 命令    解释 docker images    查看本地存在的镜像 这些镜像都存储在 Docker 的 /var/lib/docker目录下 docker search 镜像名称    从网络中查找需要的镜像 docker pull 镜像名称    将远程镜像拉取到本地 docker rmi [-f] 镜像ID    (强制)删除本地镜像 docker rmi -f 镜像名1:TAG 镜像名2:TAG    删除多个镜像 docker rmi -f $(docker images -qa)    删除所有镜像 使用: docker images docker search 镜像名字 docker pull 镜像名字  3.容器相关命令 1. 查看容器 命令    解释 docker ps    查看正在运行的容器 docker ps -a    查看所有容器 docker ps -l    查看最后一次运行的容器 docker ps -f status=exited    查看停止的容器 2. 创建与启动容器 docker run  -i:表示运行容器 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。 -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。 -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 –name:为创建的容器命名。  2.1.以交互的方式创建容器 以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器是前台容器。  docker run -it --name=容器名称 镜像名称:标签 /bin/bash 比如:docker run -it --name=mycentos centos:7 /bin/bash docker run:表示创建容器 -it:表示运行容器并进入它的命令行 –name=mycentos:给当前的容器命名 centos:7:使用该镜像创建 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash 2.2.创建后台容器  创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。 创建守护式容器:docker run -id --name=容器名字 centos:7 登录守护式容器:docker exec -it 容器名称 (或者容器ID) /bin/bash 2.3.停止与启动容器 docker stop 容器名称(或者容器ID) docker start 容器名称(或者容器ID) 3. 文件拷贝 将宿主机的文件拷贝的容器的指定目录下 宿主机向容器拷贝:docker cp 需要拷贝的文件或目录 容器名称:容器目录 容器向宿主机拷贝:docker cp 容器名称:容器目录 需要拷贝的文件或目录 例如: docker cp /opt/tomcat8080/conf/web.xml mycentos7_2:/usr/local/  4. 目录挂载 我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。 创建容器并挂载:docker run -id --name=mycentos1 -v 宿主机的目录:容器的目录 centos:7  创建容器并挂载 linux 中的 /usr/local/myhtml 到,容器的 /usr/local/myhtml 目录 docker run -id --name=mycentos1 -v /usr/local/myhtml:/usr/local/myhtml centos:7 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题 docker run -id --privileged=true --name=mycentos1 -v /usr/local/myhtml:/usr/local/myhtml centos:7  5. 查看容器 IP 地址 我们可以通过 docker inspect 容器名称 来查看容器运行时的各种数据 当然我们也可以通过 docker inspect --format='{{属性的键}}' 容器名称 来查看单独某个属性  例如我们单独查看 IP 地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos1 6. 删除容器 docker rm 容器名称 当我们在删除一个正在运行的容器时,会报错;需要先关闭这个容器才可删除 当然我们也可以用 docker rm -f 容器名称 来强制删除一个容器 Docker 的应用容器部署 我们不能直接访问在 Docker 上部署的应用(包括 MySQL),如果我们想要访问我们部署在 Docker 上的应用,那么我们只需要访问 Docker 上部署的应用在宿主机上的映射端口即可,例如:我们在 Docker 上部署了一个 MySQL应用(3306),在宿主机上的映射端口为 33306,我们只需要访问 33306 端口,即可访问 Docker 上的 MySQL;  1.MySQL 部署 拉取镜像 docker pull centos/mysql-57-centos7 创建容器 docker run -di --name=mysql5.7 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7  选项    解释 -p 宿主机端口:容器端口    指定端口映射 -e …    传递环境变量,这里表示 MySQL 的密码为 123456,账户默认为 root 远程链接 MySQL  2.Tomcat 部署 拉取镜像 docker pull tomcat:7-jre7 创建容器 docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7 找一个 web 项目,部署到宿主机的 /usr/local/webapps 目录下,然后进入 docker 容器查看项目有没有成功部署,最后在浏览器中测试看看能不能成功访问 输入默认的用户名之后,我们成功登录,说明项目已经部署成功了 3.Nginx 部署 拉取镜像 docker pull nginx  创建 Nginx 容器 docker run -di --name=mynginx -p 80:80 nginx  测试 4.Redis 部署 拉取镜像 docker pull redis 创建容器 docker run -di --name=myredis -p 6379:6379 redis  用 redis 客户端工具链接测试  迁移与备份 保存容器为镜像:docker commit 容器名称 镜像名称 例如:docker commit mynginx mynginx_i 保存镜像为 tar 文件:docker save –o tar文件名 镜像名 docker save -o mynginx.tar mynginx_i 加载 tar 文件为镜像:docker load -i tar文件名 docker load -i mynginx.tar Dockerfile 制作镜像 前面已经知道了,想要获得一个镜像可以从 Docker 中心仓库拉取,但是如果我们想要自己制作一个镜像,这时就需要 Dockerfile 了;  Docker 实际上就是一个文本文件,我们可以在这个文本文件里输入一些命令或参数,来定制我们需要的镜像,之后 Docker 可以通过读取 Dockerfile 文件的描述来构建镜像;  对于开发人员:可以为开发团队提供一个完全一致的开发环境; 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了; 对于运维人员:在部署时,可以实现应用的无缝移植。 Dockerfile 常用的命令:  命令    作用 FROM image_name:tag    定义了使用哪个基础镜像启动构建流程 MAINTAINER user_name    声明镜像的创建者 ENV key value    设置环境变量 (可以写多条) RUN command    是Dockerfile的核心部分(可以写多条) RUN 后面输入 linux 命令 ADD source_dir/file dest_dir/file    将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 COPY source_dir/file dest_dir/file    和ADD相似,但是如果有压缩文件并不能解压 WORKDIR path_dir    设置工作目录(进入容器之后默认的工作路径) 下面我们以创建一个具有 jdk1.8 的 centos7 系统为例制作一个镜像  创建目录 mkdir –p /usr/local/dockerjdk8  下载 jdk-8u144-linux-x64.tar.gz 并上传到服务器(虚拟机)中的 /usr/local/dockerjdk8 目录 创建 Dockerfile 文件(名字固定为Dockerfile) #依赖的镜像的名称和版本 FROM centos:7 #指定镜像创建者信息 MAINTAINER ayi #设置工作目录,进入容器之后默认的工作目录,即进入 centos7 应用容器之后默认的工作目录为 /usr WORKDIR /usr #RUN yum install -y glibc.i686 制作完镜像之后,用镜像安装的centos7可能会有问题,缺少 glibc.i686,所以这里我们可以安装一下,也可以稍后安装 #RUN 后面是我们在构建镜像时需要执行的命令,下面是创建一个文件夹 RUN mkdir /usr/local/java #ADD 是相对路径jar,把java添加到容器中 ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/ #配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_144 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH  执行命令构建镜像 docker build -t='jdk1.8' . 注意:这里的 . 不要拉下了,“.” 的意思是指定相对目录为当前目录 -t:指定构建的镜像的名称 查看镜像是否构建成功 docker images 最后,运行容器进行测试 执行 java -version 发现报错,那么我们需要安装一下 glibc yum install -y glibc.i686 安装完成之后,就可以了 Docker 私有仓库 Docker 中心仓库中维护着私有仓库的镜像,我们需要将其拉取下来,才能搭建我们自己的私有仓库 拉取私有仓库 docker pull registry  启动私有仓库容器 docker run -di --name=registry -p 5000:5000 registry 这里我们就可以访问我们的私有仓库了 http://192.168.211.144:5000/v2/_catalog,IP 改为你们自己的宿主机 IP 即可  修改 daemon.json, Docker 默认我们的私有仓库是不安全的,所以我们要配置一下,就和之前配置镜像加速一样 vi /etc/docker/daemon.json "insecure-registries":["192.168.211.144:5000"] IP,改为你们自己的宿主机 IP 重启docker 服务 systemctl restart docker 将镜像上传到私有仓库 先将镜像标记为私有仓库的镜像 docker tag 自己的镜像名称 宿主机IP:私有服务容器的端口/jdk1.8 docker tag jdk1.8 192.168.17.132:5000/jdk1.8 5000:是我们之前创建 registry 的时候映射的端口,是宿主机的端口 再次启动私服容器 docker start registry 上传标记的镜像 docker push 192.168.211.144:5000/jdk1.8 从私有仓库拉取镜像 docker pull 192.168.211.144:5000/jdk1.8 ———————————————— 原文链接:https://blog.csdn.net/qq_44704799/article/details/121261709 
  • [技术干货] 如何在Docker中抓包
    Docker 就像是一个轻量级的虚拟机,Docker是一个轻量级的容器,我们可以将环境交给 Docker 来管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上,而不向虚拟机一样,迁移一台虚拟机极其资源; Docker 是一个开源的应用容器引擎,基于 Go 语言开发。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker相较于虚拟机来说具有更加轻量,启动更快,效率更高,可移植性更强等优势,实现了“一次封装,到处运行”,不用在关心环境的不一致问题 【在Docker中抓包】  在Docker容器中抓包可以帮助我们分析网络通信和排查问题。以下是在Docker中抓包的方法: 进入容器: 首先,使用以下命令进入你想要抓包的Docker容器: docker exec -it 容器ID /bin/bash 其中,容器ID是你要进入的容器的ID。  安装抓包工具: 在容器内部,你可以根据需要选择安装相应的抓包工具。例如,使用 tcpdump进行抓包,可以使用以下命令安装:  apt-get update apt-get install -y tcpdump 如果容器中没有网络抓包工具,你需要先安装它们。 抓包: 在容器内部,使用已安装的抓包工具进行抓包。例如,使用 tcpdump抓取所有网络流量: tcpdump -i eth0 -w capture.pcap 这将在容器内抓取所有通过 eth0网卡的网络流量,并将结果保存到 capture.pcap文件中。 退出容器: 抓包完成后,使用 exit命令退出容器: exit 从容器复制抓包文件: 抓包结果保存在容器内,为了在宿主机上查看抓包文件,可以使用以下命令从容器复制文件到宿主机: docker cp 容器ID:/路径/capture.pcap 宿主机目标路径/ 其中,容器ID是容器的ID,路径/capture.pcap是容器中抓包结果的路径和文件名,宿主机目标路径/是你想要复制到的宿主机目标路径。 现在,你已经成功在Docker容器中抓包,并将抓包结果复制到了宿主机。你可以使用Wireshark等工具来分析和查看抓包文件。请注意,在抓包时需要谨慎操作,避免产生大量的抓包数据导致性能问题。 ———————————————— 原文链接:https://blog.csdn.net/tiansyun/article/details/134025618 
  • [技术干货] linux系统系统安装docker方法参考
    方法1、安装系统自带docker engine1)联网状态或离线配置本地yum源情况下,执行如下命令直接安装dockeryum -y install docker2)查看docker版本docker --version3)查看docker状态systemctl status docker注:卸载自带docker则执行dnf remove docker方法2、二进制包安装19.03.10版本docker可以参考cid:link_01)关闭selinux和防火墙(可选)setenforce 0systemctl stop firewalld.service2)获取docker二进制包(根据CPU架构选择对应的二进制包)wget https://download.docker.com/linux/static/stable/aarch64/docker-19.03.10.tgz 【aarch64环境】或wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.10.tgz 【x86_64环境】注:如需安装其他版本可以到https://download.docker.com/linux/static/stable/路径获取对应版本链接,然后wget下载;3)解压docker-19.03.10.tgz得到docker文件夹tar xf docker-19.03.10.tgz4)将docker文件的全部文件拷贝到/user/bin/路径下cp docker/* /usr/bin5)配置docker.service文件vim /usr/lib/systemd/system/docker.service增加如下内容[Unit]Description=Docker Application Container EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=network-online.target[Service]Type=notifyExecStart=/usr/bin/dockerdExecReload=/bin/kill -s HUP $MAINPIDLimitNOFILE=infinityLimitNPROC=infinityTimeoutStartSec=0Delegate=yesKillMode=processRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。6)启动docker并查看docker状态systemctl start docker.servicesystemctl status docker.service7)查看docker版本信息docker version8)运行hello-world程序docker run hello-world
  • [互动交流] 请问 Docker 的管理后台地址端口如何修改?
    就图示的后台管理地址的端口,默认是用了80,但是80我想作为网站的主页默认端口的。
  • [容器类] DOCKER容器,os内存使用率(%)过高,如何分析原因
    DOCKER容器,os内存使用率(%)过高,如何分析原因
  • docker笔记分享
    1.1.1 容器的发展史物理服务器 ----> 虚拟化 ----> 容器物理服务器:​ 优点:CPU性能和IO性能高,计算能力高;​ 缺点:管理维护麻烦,在很多应用场景会造成物理服务器的资源浪费;虚拟化:​ 优点:虚拟化实现资源隔离的方法是利用独立的OS,并利用Hypervisor虚拟化CPU、内存、IO设备等提高了物理服务器的资源利用。和物理服务器相比虚拟机的扩容、维护等会更简单;​ 缺点:因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的,会导致计算能力下降;容器:​ 优点:容器并没有和虚拟机一样通过创建完全独立的操作系统实现环境隔离,它是通过Linux的namespace实现系统环境的隔离、Cgroup实现资源限制、利用镜像实现根目录环境的隔离。这种方式的隔离让容器具备了以下优势:1、占用磁盘空间小;2、启动速度快,以秒计时;3、并发性好,一台宿主机可以启动成千上百个容器;4、资源利用率高;5、更容易迁移;6、更容易维护;7、更容易扩展。​ 缺点:1. 计算能力还是逊色于宿主机1.1.2 容器的三大核心docker是C/S架构的程序,docker客户端向docker服务器端也就是docker的守护进程发送请求,守护进程处理完所有的工作并返回结果,通过docker客户端执行各种命令,然后docker客户端会将这些命令发送给守护进程,守护进程执行的结果还会传回客户端,使我们能通过客户端来查看命令运行的结果。Image(镜像)先了解下什么是镜像:我们都知道,操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:20.04 就包含了完整的一套 Ubuntu 20.04 最小系统的 root 文件系统。Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。分层存储因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。Registry(仓库)docker用仓库来保存用户构建的镜像,仓库分私有和公有两种,docker公司提供一个公有的仓库,叫docker hub。Container(容器)容器通过镜像启动,容器中可以运行客户的一个或多个进程。当一个容器启动时,该镜像会在最顶层加载一个读写文件系统(可写层),在docker中运行的程序,就是在这个层中进行执行的,当docker第一次启动容器时,初始的可写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上。比如,如果想修改一个文件,该文件会从最下面的只读层复制到读写层,该文件的只读版本依然存在,但是被读写的文件副本所隐藏,这就是写时复制。每一个只读镜像层都是只读的,当创建一个新容器时,docker会构建一个镜像栈,在栈的最顶层添加可写层。
  • [互动交流] docker-ce 装完后第二天就打不开了,重装了还是一样的问题
    按照华为开源镜像站安装docker-ce问题如下:
  • [其他问题] docker启动报错
    Failed to start Docker Application Container Engine.
  • [容器类] 2288H-V5服务器在容器中复位标卡
    操作系统是ubuntu16.04,docker版本18.09.7参考《npu-smi命令介绍》在主机侧安装软件加载驱动后能成功复位标卡。文档中相关介绍在主机侧执行结果创建容器在容器中能够查看npu信息容器中也安装了ipmitool,加载模型也没有报错在容器中执行复位标卡的命令时报错​
总条数:476 到第
上滑加载中