一文把握Docker底子

[复制链接]
发表于 2025-10-31 00:20:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本篇文章是根据B站视频教程:docker 所做的条记
Docker引入

我们写的代码会打仗到好几个环境:开辟环境、测试环境以及生产环境,假如按照下图的流程走,那么就很有大概由于环境差异而产生一些bug,好比开辟环境用的是jdk8,而在测试环境用的是jdk7,就有大概出现同样的代码在开辟环境可以正常运行,而在测试环境运行大概会出现bug。

为了办来由于环境差异而产生的标题,就不光是单纯的把代码举行打包,而是把代码和对应的环境一起举行迁移,也就是把代码和环境放在一个容器内,然后把这个容器发送到测试、生产等环境,如许就不会由于环境差异而产生标题(专业点说就是办理了软件跨环境迁移标题),本篇文章所说的docker就是容器化技能的一种。
容器化技能是一种将‌应用步调及其依靠项打包成独立的、可移植的容器,以便在差异的环境中快速摆设和运行的技能‌。这种技能通过将单个利用体系的资源分别到独立的组中,有效均衡资源使用需求,提拔资源使用率和业务摆设服从。(泉源于百度)

 Docker 概述

docker是一种容器化技能,办理软件跨环境迁移标题


  • Docker 是一个开源的应用容器引擎
  • Docker 可以让开辟者打包他们的应用以及依靠包到一个轻量级、可移植的容器中,然后发布到任何盛行的 Linux 呆板上
  • 容器是完全使用沙箱机制,即每个容器之间相互隔离,互不干扰
  • 容器性能开销极低
Docker 安装

Docker可以运行在MAC、Windows、CentOS、UBUNTU等利用体系上,现基于CentOS 7 安装 Docker。docker官网:https://www.docker.com
依次实行以下下令:
   # 1、yum 包更新到最新
  yum update
  # 2、安装须要的软件包, yum-util 提供yum-config-manager功能,别的两个是devicemapper驱动依靠的
  yum install -y yum-utils device-mapper-persistent-data lvm2
  # 3、 设置yum源
  yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  # 4、 安装docker,出现输入的界面都按 y
  yum install -y docker-ce
  # 5、 检察docker版本,验证是否验证乐成
  docker -v
  Docker 架构

架构图如下



  • docker客户端:通过客户端把要利用的docker下令发送给守卫历程daemon实行,docker客户端在安装docker时就有了
  • local host:本田主机,这里指本机的centos7,由于是在centos7上安装docker的
  • remote host:长途主机,大概说服务器
  •  daemon(守卫历程):安装完docker之后,docker集会守卫历程的情势存在,守卫历程就是在配景运行的一种历程,守卫历程有了以后就分析docker启动安装乐成了,在守卫历程里,大概说docker里,有两部门内容:镜像和容器,
  • 镜像(Image):Docker 镜像(Image),就相称于是 一个 root 文件体系。好比官方镜像ubuntu:16.04 就包罗了完备的一套 Ubuntu16.04 最小体系的 root 文件体系。镜像生存在堆栈中,假如想要某个镜像而当地没有,就可以去堆栈里获取
  • 容器(Container):镜像(Image)和容器(Contain er)的关系,就像是面向对象步调筹划中的类和对象一 样,镜像是静态的界说,容器是镜像运行时的实体。容器可以被创建、启动、制止、删除、停息等。
  •  堆栈(Repository):用于生存镜像。堆栈分两种:官方堆栈(Docker hub)和私家的堆栈(private registry),由于官方的堆栈在国外,访问速率较慢,就可以在当地搭建自己的堆栈,也可以说是当地堆栈和长途堆栈
设置 Docker 镜像加速器

默认环境下,未来从docker hub(https://hub.docker.com/)上下载 docker镜像,太慢。一样平常都会设置镜像加速器,好比阿里云、 网易云、腾讯云等,具体利用的百度一下吧,大概看视频也可以
Docker下令

服务干系的下令

也可以说是利用守卫历程的下令,开启、关闭等。


  • 启动docker服务:systemctl start docker
  • 制止docker服务:systemctl stop docker
  • 重启docker服务:systemctl restart docker
  • 检察docker服务状态:systemctl status docker
  • 开机启动docker服务:systemctl enable docker
镜像干系的下令



  • 检察镜像: 检察当地全部的镜像
   docker images
  docker images -q  # 检察所用镜像的id
  

  • 搜刮镜像:从官方hub堆栈中查找须要的镜像,以是须要通过网络举行
   docker search 镜像名称
  好比搜刮Redis镜像:docker search redis
  

  • 拉取镜像:从Docker堆栈下载镜像到当地,镜像名称格式为名称:版本号,假如版本号不指定则是最新的版本。假如不知道镜像版本,可以去dockerhub搜刮对应镜像检察。
   docker pull 镜像名称
  docker pull 镜像名称:版本号
  

  • 删除镜像:删除当地镜像
   docker rmi 镜像id  #根据镜像id删除指定当地镜像
  docker rmi 镜像名称:版本号  #根据镜像名称和版本号删除指定当地镜像
  docker rmi `docker images -q`` #删除全部当地镜像,注意 docker images -q须要用tab键上的顿号包起来;docker images -q返回全部镜像的id
  容器干系下令



  • 检察容器
   docker ps  #检察正在运行的容器
  docker ps -a  #检察全部容器
  

  • 创建并启动容器
   docker run 参数  --name=容器名称  镜像名称:版本号  进入容器后的初始化指令
  注意,name前面是两个减号,等号可以用空格取代
  好比下面的指令就是创建并运行一个名为c1,镜像为centos7的容器,且进入容器后实行下令/bin/bash,类似于打开一个shell脚本的东西
  docker  run  -it  --name=cl  centos:7 /bin/bash
  要想退出容器的终端,输入exit回车即可,退出后容器就会关闭
  
  上面的使用参数 -it 创建的容器一实行就会启动并进入容器,退出容器后容器就会关闭,而假如使用参数-id创建容器,就不会进入容器,而是让容器在配景运行,退出容器后也不会关闭容器,好比以下创建一个名为c2的配景运行的容器:
  docker  run  -id  --name=c2  centos:7
  假如想进入容器c2,可以实行下令
  docker exec  -it  c2  /bin/bash
  /bin/bash也可以不加,默认初始也是实行这个下令的
  
常用参数如下:
  • -i:保持容器运行。通常与 -t 同时使用。参加it这两个参数后,容器创建后主动进入容器中,退出容器后,容器主动关闭。
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
  • -d:以守卫(配景)模式运行容器。创建一个容器在配景运行,须要使用docker exec 进入容器。退出后,容器不会关闭。
  • -it 创建的容器一样平常称为交互式容器,-id 创建的容器一样平常称为守卫式容器
  • --name:为创建的容器定名
  

  • 进入容器:docker exec 参数(参数选项同上)容器名称  #退出容器,容器不会关闭
   进入一个容器就有点类似于打开了容器对应的软件,好比进入了上面根据镜像centos7创建容器c1,就相称于打开了一个Linux体系,可以在内里实行各种Linux下令
  

  • 制止容器:docker stop 容器名称
  • 启动容器:docker start 容器名称
  • 删除容器:docker rm 容器名称大概容器id  
   删除全部容器和删除全部镜像同理:
  docker qs -aq  # 检察全部容器的id
  docker rm `docker qs -aq`  # tab键上的顿号
  注意:假如容器是运行状态则删除失败,须要制止容器才气删除
  

  • 检察容器信息:docker inspect 容器名称
Docker 容器的数据卷

概念及作用

思量下面三个标题:


  • Docker 容器删除后,在容器中产生的数据会随之烧毁,但假如是由于出现错误而不得不删除容器,这种环境下就很大概是须要保存原先容器里的数据的,也就是须要对容器数据举行长期化存储,当容器突然堕落时不会丢失数据,该怎么办?
  • Docker 容器和外部呆板不可以直接交换文件,也就是举行数据交互,当有这种需求时怎么办?
  • 容器和容器之间想要举行数据交互有怎么办?
数据卷就是办理上面的标题的。它的概念如下:


  • 数据卷是宿主机中的一个目次或文件
  • 当容器目次和数据卷目次绑定后,对方的修改会立刻同步。就是说容器绑定的谁人目次有所厘革时,对应的数据卷会主动同步更新,反过来,数据卷目次有厘革时,对应的容器里的目次也会主动同步更新
  • 一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷

数据卷作用:


  • 容器数据长期化:数据卷就是宿主机上的一个文件夹,而且和容器的某个文件夹举行绑定,它们之间无论哪一个发生厘革另一方都能主动同步更新,以是宿主机上的数据卷相称于容器数据的备份,当容器出现错误时,可以重新创建一个新的容器并使用数据卷举行数据规复。
  • 外部呆板和容器间接通讯:容器和外部主机不能直接通讯,但是宿主机和外部呆板可以举行通讯,以是容器和外部呆板可以借助宿主机上的数据卷举行间接通讯。
  • 容器之间数据交换:容器和容器之间也不能直接通讯,同样的可以借助数据卷举行间接通讯。
设置数据卷

也就是将宿主机的指定目次和容器里的指定目次举行绑定,在创建启动容器时,使用 –v 参数 设置数据卷,如下:
   docker run 参数 --name=容器名  -v  宿主机目次(或文件):容器里的目次(或文件)  镜像名称:版本号
  比方:docker run -it --name=c1 -v /root/data:/root/date_container centos:7
  假如须要挂载多个数据卷,继续加-v即可:
  docker run -it --name=c1 -v /root/a:/root/ca  -v /root/a2:/root/ca2 centos:7
  注意事项:
  1. 宿主机和容器目次或文件必须是绝对路径
  2. 假如目次不存在,会主动创建
  3. 可以挂载多个数据卷
  数据卷容器

顾名思义,它是一个容器,而且和数据卷有关。
多容器举行数据交换有以下两种方式:


  • 多个容器挂载同一个数据卷:就是将多个容器与同一个数据卷举行绑定,这种方式在要求简单的环境下没标题,但是不恰当复杂的环境。就是说当有多个容器须要举行复杂数据交互时,就未便于利用
  • 数据卷容器:就是用一个专门的容器去绑定一个数据卷,然后其他须要通讯的容器去绑定这个数据卷容器,也就间接的绑定了数据卷。如下图,容器c3绑定了一个数据卷data,然后容器c1和c2绑定c3,如许c1、c2和c3之间就能相互通讯,纵然c3出现标题挂掉了,c1和c2也还能举行通讯,由于实际上它们已经和数据卷data举行绑定了

设置数据卷容器

也就是上图c1、c2和c3举行绑定的过程
1. 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
   docker run -it--name=c3 -v /volume centos:7 /bin/bash
  注意:/volume这个是容器目次,名字是可以自界说的,这里宿主机目次没写,docker就会主动分配一个宿主机目次当做数据卷,这可以通过docker inspect c3 下令检察c3容器的信息,在信息的Mounts里可以看到目次信息
  2. 创建启动 c1、c2 容器,使用 –-volumes-from 参数 设置数据卷
   docker run -it --name=cl --volumes-from c3 centos:7 /bin/bash
  docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
  
  实行完上面两行下令之后,c1和c3,c2和c3就绑定起来了,在c1和c2里都可以看到有一个名为volume目次,也就是说c1、c2和c3都有一个目次volume,且volume已经和一个数据卷举行绑定,以是三个容器之间可以相互通讯。
  哪怕c3出现标题挂了,剩下的c1和c2也能通讯,由于它们都有与数据卷绑定的目次volume
  Docker 应用摆设

所谓的应用摆设着实就是在docker容器里安装应用软件,好比安装MySQL、Redis、Tomcat等。在Linux或Windows上安装这些软件总的来说还是贫困的,反正我最怕安装各种软件和环境了,每次不顺遂的时间总能出现各种标题!但是在docker容器里安装还是很简单的,而且安装步调都一样,实用于安装全部应用,是我这种菜鸟的福音!
在docker容器里摆设应用,大概说安装一个软件,有以下几步:

  • 搜刮要安装应用的镜像
  • 拉取要安装应用的镜像
  • 创建容器
  • 利用容器中的应用
摆设之前,先提出一个标题:在容器里安装好MySQL之后,外部呆板的MySQL客户端并不能直接访问容器里的MySQL,而要想外部mysql客户端能利用Docker容器中的MySQL Server,须要举行端口映射。
容器内的网络服务和外部呆板不能直接通讯,外部呆板和宿主机可以直接通讯,宿主机和容器可以直接通讯,以是当容器中的网络服务须要被外部呆板访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部呆板访问宿主机的该端口,从而间接访问容器的服务,这种利用称为:端口映射

以摆设MySQL为例,按以下步调走:


  • 搜刮mysql镜像:docker search mysql
  • 拉取mysql镜像:docker pull mysql:5.6
  • 创建容器,设置端口映射、目次映射
   # 在/root目次下创建mysql目任命于存储mysql数据信息
  mkdir ~/mysql
  cd ~/mysql
  # 现在已经进入了宿主机的/root/mysql目次中,接下来创建容器,设置端口映射、目次映射
  docker run -id \   # 此处\和下面的\表现下令还没输入完,换一行继续输入
  -p 3307:3306 \    # 端口映射,宿主机的3307端口和容器的3306端口举行映射,着实宿主机也应该设置3306端口的,但是这里为了好区分,就设置了3307
  --name=c_mysql \   # 容器名称
  -v $PWD/conf:/etc/mysql/conf.d \   # 设置数据卷,冒号前边的是宿主机的目次,冒号后边的是容器的目次,这里设置的数据卷是mysql的设置文件,当须要修改mysql的设置时,可以直接在宿主机的conf里修改,容器里的donf.f会主动同步更新
  -v $PWD/logs:/logs \   # 设置数据卷,同理,前边是宿主机目次,后边是容器的,这里的数据卷用于存放日志日志
  -v $PWD/data:/var/lib/mysql \   # 设置数据卷,这里存放的是mysql的数据,假如新建一个mysql容器想要规复从前的mysql数据,就可以用宿主机的data来规复
  -e MYSQL_ROOT_PASSWORD=123456 \   # e表现的是env,环境的意思, MYSQL_ROOT_PASSWORD是mysql的一个环境变量,表现的是root用户的暗码,这里设置为123456
  mysql:5.6  # mysql对应版本的镜像
  注意:
  (1)上面的加粗部门是下令部门,#后边的是表明
  (2)pwd下令用于获取当前绝对路径,上面的$PWD也是同样作用,可以简化路径的长度,前面在根目次下创建并进入了一个mysql目次,以是当前所在路径为/root/mysql,以是$PWD/conf就表现/root/mysql/conf,其他的也同理
  

  • 进入容器,利用mysql
   # 进入mysql容器
  docker exec –it c_mysql /bin/bash
  # 登录mysql
  mysql  -uroot  -p123456
  # 进入了mysql的终端,可以实行各种mysql下令了
  # .....
  

  • 使用外部呆板毗连容器中的mysql:在外部呆板毗连容器中的mysql,直接填写宿主机的IP和端口,输入账号暗码即可,如下图

Dockerfile

docker 镜像原理

思索:


  • 1、Docker 镜像本质是什么?
  • 2、Docker 中一个centos镜像为什么只有200MB,而一个 centos利用体系的iso文件要几个G?
  • 3、Docker 中一个tomcat镜像为什么有500MB,而一个 tomcat安装包只有70多MB?
先来说Linux文件体系,它由bootfs和rootfs两部门构成:


  • bootfs:包罗bootloader(引导加载步调)和 kernel(内核)
  • rootfs: root文件体系,包罗的就是典范 Linux 体系中的/dev, /proc,/bin,/etc等尺度目次和文件
简单来说,bootfs是Linux的焦点源代码,且是免费开源的,然后很多厂商在bootfs的底子上举行改动扩展,形成差异版本的Linux然后发行,就是收费的Linux发行版,好比centos、乌邦图、红帽子等。差异的linux发行版,bootfs根本一样,而rootfs差异。
现在来解答前面的三个标题:


  • 1、Docker 镜像本质肯定是文件,在Linux里,齐备都是文件。
  • 2、现在我们的宿主机是centos7,在我们启动捏造机运行centos的时间,就已经把内核代码也就是bootfs加载到内存里了,当我们在宿主机上创建并运行一个centos的容器时,容器也是须要依靠bootfs内核代码运行启动的,但是我们发现容器的启动速率就很快,比我们启动捏造机快多了,而且下载的centos镜像也很小,这是由于启动centos容器时,它不再须要将内核代码加载进内存,而是用的宿主机的bootfs。上面说了,差异的Linux发行版的bootfs是一样的,以是容器里的centos可以复用宿主机里的bootfs,下载centos镜像的时间也不消再下载bootfs,这就是第二个标题的答案。但是假如想在Linux里安装运行一个Windows的docker就不可以,由于Windows的内核和Linux的内核不一样,docker就不能复用宿主机的内核。

  • 3、现在假设宿主机上除了一个centos的镜像和容器,现在要下载安装一个Tomcat,由于Tomcat依靠于jdk,docker就会查抄有没有jdk,假如没有,就先下载jdk,而jdk又依靠于底子镜像,假如没有底子镜像就先下载底子镜像,然后再下载jdk,末了再下载Tomcat,以是看起来我们只是下载了Tomcat的镜像,但是实际上下载的是底子镜像、jdk镜像和Tomcat镜像三个,这也就是为什么Tomcat镜像比Tomcat安装包更大,就是第三个标题的答案。别的,它们一层一层叠加,如许是有利益的,好比安装完了Tomcat,现在要安装nginx,nginx的底子镜像版本和Tomcat的一样(假设都是centos7的),前面已经下载Tomcat的时间,底子镜像也已经下载和加载好了,以是现在安装nginx时,不会再去下载对应版本的底子镜像了,直接和Tomcat用同一个就行,假如反面要安装的其他镜像也须要用到这个底子镜像,也不会再去下载,直接复用的同一个底子镜像就行,这就是叠加的利益。

现在来体系官方的说一下docker镜像原理:
Docker 镜像本质是一个分层文件体系。Docker镜像是由特别的文件体系叠加而成,最底端是 bootfs,并使用宿主机的bootfs,第二层是 root文件体系rootfs,称为base image,然后再往上可以叠加其他的镜像文件。
叠加的利用称为同一文件体系。同一文件体系(Union File System)技能可以或许将差异的层整合成一个文件体系,为这些层提供了一个同一的视角 ,如许就匿伏了多层的存在,在用户的角度看来,只存在 一个文件体系。好比上面的Tomcat是包罗了三层镜像的,但是用户只看到一个Tomcat镜像。
一个镜像可以放在另一个镜像的上面。位于下面的镜像称为父镜像,最底部的镜像成为底子镜像。
上面发Tomcat、jdk、底子镜像都是只读镜像,也就是不可以修改,由于改了别人就无法复用了,也很大概改错出现标题。当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件体系作为容器,也就是说,假如肯定要对只读镜像做修改的话,好比要对Tomcat镜像做修改,就通过Tomcat镜像启动一个Tomcat容器,然后在这个容器里做修改(容器也是一个文件体系),修改完容器之后弄成一个新的镜像,这个新镜像就是做了修改的Tomcat镜像。
Docker 镜像制作

有两种方式:


  • 容器转为镜像:紧张是为了把修改后的容器生存下来,提供给别人使用,好比上面说的假如有修改Tomcat镜像的需求,就须要在Tomcat容器里修改,把修改后的Tomcat容器(假设为A)转成镜像,假如别人也有使用修改后的Tomcat的需求,就可以用这个容器转成的镜像再创建一个容器,就可以得到一个和A一样的修改后的Tomcat容器
   # 容器转成镜像
  # 转成的镜像里不包罗容器里通过数据卷挂载的目次部门
  docker commit 容器id 镜像名称:版本号
  # 镜像不能直接传输发送,须要将镜像转成压缩文件,压缩文件就可以通过各种方式举行传输
  # 参数o是output的意思
  docker save -o 压缩文件名称 镜像名称:版本号
  # 拿到压缩文件,可以通过以下下令还原成镜像
  # 参数i是input的意思
  docker 1oad -i 压缩文件名称
  

  • dockerfile:就是一个制作docker镜像的文件,它是一个文本文件,包罗了一条条的指令,每一条指令基于底子镜像,终极构建出一个新的镜像。对于开辟职员:可以为开辟团队提供一个完全划一的开辟环境;对于测试职员:可以直接拿开辟时所构建的镜像大概通过Dockerfile文件构建一个新的镜像开始工作了;对于运维职员:在摆设时,可以实现应用的无缝移植。也就是说,通过dockerfile文件,可以制止开辟、测试和运维环境差异的标题
   可以去Dochub网址:https://hub.docker.com  看其他镜像的dockerfile怎么写的,参考一下别人的写法
  B站视频练习:dockerfile 应用案例
  dockerfile关键字:
关键字作用备注
FROM
指定父镜像
指定dockerfile基于谁人image构建
MAINTAINER
作者信息
用来标明这个dockerfile谁写的
LABEL
标签
用来标明dockerfile的标签 可以使用Label取代Maintainer 终极都是在docker image根本信息中可以检察
RUN
实行下令
实行一段下令 默认是/bin/sh 格式: RUN command 大概 RUN ["command" , "param1","param2"]
CMD
容器启动下令
提供启动容器时间的默认下令 和ENTRYPOINT共同使用.格式 CMD command param1 param2 大概 CMD ["command" , "param1","param2"]
ENTRYPOINT
入口
一样平常在制作一些实行就关闭的容器中会使用
COPY
复制文件
build的时间复制文件到image中
ADD
添加文件
build的时间添加文件到image中 不光仅范围于当前build上下文 可以泉源于长途服务
ENV
环境变量
指定build时间的环境变量 可以在启动的容器的时间 通过-e覆盖 格式ENV name=value
ARG
构建参数
构建参数 只在构建的时间使用的参数 假如有ENV 那么ENV的类似名字的值始终覆盖arg的参数
VOLUME
界说外部可以挂载的数据卷
指定build的image那些目次可以启动的时间挂载到文件体系中 启动容器的时间使用 -v 绑定 格式 VOLUME ["目次"]
EXPOSE
袒露端口
界说容器运行的时间监听的端口 启动容器的使用-p来绑定袒露端口 格式: EXPOSE 8080 大概 EXPOSE 8080/udp
WORKDIR
工作目次
指定容器内部的工作目次 假如没有创建则主动创建 假如指定/ 使用的是绝对所在 假如不是/开头那么是在上一条workdir的路径的相对路径
USER
指定实行用户
指定build大概启动的时间 用户 在RUN CMD ENTRYPONT实行的时间的用户
HEALTHCHECK
康健查抄
指定监测当前容器的康健监测的下令 根本上没用 由于很多时间 应用自己有康健监测机制
ONBUILD
触发器
当存在ONBUILD关键字的镜像作为底子镜像的时间 当实行FROM完成之后 会实行 ONBUILD的下令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL
发送信号量到宿主机
该STOPSIGNAL指令设置将发送到容器的体系调用信号以退出。
SHELL
指定实行脚本的shell
指定RUN CMD ENTRYPOINT 实行下令的时间 使用的shell
Docker 服务编排

视频:docker服务编排
根本概念

微服务架构的应用体系中一样平常包罗多少个微服务,每个微服务一样平常都会摆设多个实例,假如每个微服务都要手动启停 ,维护的工作量会很大。


  • 要从Dockerfile build image 大概去dockerhub拉取image
  • 要创建多个container
  • 要管理这些container(启动制止删除)
而服务编排就是按照肯定的业务规则批量管理容器
服务编排工具-Docker Compose

Docker Compose是一个编排多容器分布式摆设的工具,提供下令集管理容器化应用的完备开辟周期,包罗服务构建 ,启动和制止。使用步调如下:

  • 使用 Dockerfile 界说运行环境镜像
  • 使用 docker-compose.yml 界说构成应用的各服务
  • 运行 docker-compose up 启动应用
Docker Compose安装使用如下(视频教程Docker Compose使用):


  • 安装Docker Compose
   # Compose现在已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,须要先安装Docker。下面以编译好的二进制包方式安装在Linux体系中。
  curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  # 设置文件可实行权限
  chmod +x /usr/local/bin/docker-compose
  # 检察版本信息
  docker-compose -version
  

  • 卸载Docker Compose
   # 二进制包方式安装的,删除二进制文件即可
  rm /usr/local/bin/docker-compose
  

  • 使用docker compose编排nginx+springboot项目
   1. 创建docker-compose目次
  mkdir ~/docker-compose
  cd ~/docker-compose
  2. 编写 docker-compose.yml 文件
  version: '3'
  services:
    nginx:
     image: nginx
     ports:
      - 80:80
     links:
      - app
     volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    app:
      image: app
      expose:
        - "8080"
  3. 创建./nginx/conf.d目次
  mkdir -p ./nginx/conf.d
  4. 在./nginx/conf.d目次下 编写itheima.conf文件
  server {
      listen 80;
      access_log off;
      location / {
          proxy_pass http://app:8080;
      }
  }
  5. 在~/docker-compose 目次下 使用docker-compose 启动容器
  docker-compose up
  6. 测试访问
  http://192.168.149.135/hello
  Docker 私有堆栈

Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的堆栈,我们可以从上面拉取镜像 到当地,也可以把我们自己的镜像推奉上去。但是,偶尔候我们的服务器无法访问互联网,大概你不盼望将自己的镜 像放到公网当中,那么我们就须要搭建自己的私有堆栈来存储和管理自己的镜像。


  • 私有堆栈搭建
   # 1、拉取私有堆栈镜像
  docker pull registry
  # 2、启动私有堆栈容器
  docker run -id --name=registry -p 5000:5000 registry
  # 3、打开欣赏器 输入所在http://私有堆栈服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表现私有堆栈 搭建乐成
  # 4、修改daemon.json  
  vim /etc/docker/daemon.json    
  # 在上述文件中添加一个值为insecure-registries的key,生存退出。此步用于让 docker 信托私有堆栈所在;注意将私有堆栈服务器ip修改为自己私有堆栈服务器真实ip
  {"insecure-registries":["私有堆栈服务器ip:5000"]}
  # 5、重启docker 服务
  systemctl restart docker
  docker start registry
  

  • 将镜像上传至私有堆栈(以上传centos7镜像为例)
   # 1、标志镜像为私有堆栈的镜像    
  docker tag centos:7 私有堆栈服务器IP:5000/centos:7
  # 2、上传标志的镜像    
  docker push 私有堆栈服务器IP:5000/centos:7
  

  • 从私有堆栈拉取镜像(以拉取centos7镜像为例)
   #拉取镜像
  docker pull 私有堆栈服务器ip:5000/centos:7
  docker 和捏造机的比力
视频:docker和捏造机的比力


  • 容器就是将软件打包成尺度化单元,以用于开辟、交付和摆设。
  • 容器镜像是轻量的、可实行的独立软件包 ,包罗软件运行所需的全部内容:代码、运行时环境、体系工具、 体系库和设置。
  • 容器化软件在任何环境中都可以或许始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于镌汰团队间在类似底子办法上运行差异软 件时的辩说。
类似:容器和捏造机具有相似的资源隔离和分配上风
差异:


  • 容器捏造化的是利用体系,捏造机捏造化的是硬件。
  • 传统捏造机可以运行差异的利用体系,容器只能运行同一范例利用体系

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表