Docker的使用

Docker的使用

定义

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc).

Docker架构

  • 镜像(Image):Docker 镜像(Image
    ),就相当于是一个 root 文件系统。类似于一个软件安装包。

  • 容器:镜像的实例,通过镜像创建容器后,就可以在容器中安装各种软件以及配置各种文件。

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

  • 举例说明

    原理就相当于电脑使用window镜像安装一个系统,安装好之后,整个系统就是一个大容器,可以在这个系统中再次下载其他软件的镜像,来进行软件的安装。

作用

在这里插入图片描述

用于解决软件跨环境迁徙,引起的环境冲突不适等问题。

配置 Docker 镜像加速器

url链接

使用命令说明

对于镜像与容器的操作,无论是使用容器获取镜像的名称,还是使用容器或镜像的id,都可以正常完成操作,但是当出现多个id相同,或多个名字相同的容器或镜像的时候,需要选择性使用。

Docker 进程相关命令

  • 启动docker服务

    systemctl start docker

  • 停止docker服务

    systemctl stop docker

  • 重启docker服务
    systemctl restart docker

  • 查看docker服务状态

    systemctl status docker

  • 设置docker开机自启动

    systemctl enable docker

Docker 镜像相关命令

  • 查看镜像

    docker images 查看本地所有镜像

    docker images -q 查看所有镜像的id

  • 搜索镜像

    docker search 镜像名

  • 下载(拉取镜像)

    docker pull 镜像名:版本 如果不指定版本,则默认下载最新版本。版本号可以去docker hub 搜索对应镜像查看。

  • 删除镜像

    docker rmi 镜像id/镜像名称 删除单个镜像

    docker rmi 'docker images -q' 删除所有镜像

Docker 容器相关命令

容器是运行在内存中的。

  • 查看容器

    docker ps 查看正在运行的容器

    docker ps -a 查看所有容器,包括正在运行与停止的。

  • 创建启动容器

    docker run -it --name=容器名 镜像名:镜像版本 /bin/bash

    docker run -id --name=容器名 镜像名:镜像版本 /bin/bash

    参数说明

    1. -i:

      保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。

    2. -t:

      为容器重新分配一个伪输入终端,通常与 -i 同时使用。

    3. -d:

      以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。

    4. -it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器

    5. –name:为创建的容器命名

    6. /bin/bash:

      /bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash。

  • 进入容器

    使用后台模式创建运行容器后,要进入容器时需要执行的命令。

    docker exec -it 容器名 /bin/bash

    -it表示启动容器,并分配一个输出伪终端;退出容器后,容器依然保持运行.

  • 退出容器

    在进入容器终端后执行退出命令

    exit

  • 启动容器

    docker start 容器名

  • 停止容器

    docker stop 容器名

  • 删除容器

    docker rm 容器名/容器id

  • 查看容器信息

    docker inspcet 容器名

  • 创建容器,映射端口和挂载数据卷(注意,挂载数据卷的时候必须使用绝对路径)

docker run -id --name=容器名 -v 宿主机目录:容器目录 -p 宿主机端口:容器服务端口 镜像名:镜像版本

  • 拷贝宿主机的文件到容器中

    docker cp 宿主机文件路径 容器名:容器目标路径

  • 拷贝容器中的文件到宿主机中

    docker cp 容器名:容器文件路径 宿主机路径

容器的数据卷

数据卷的概念
  1. 数据卷是宿主机中的一个目录或文件
  2. 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  3. 一个数据卷可以被多个容器同时挂载
  4. 一个容器也可以被挂载多个数据卷
数据卷的作用
  1. 容器数据持久化,防止容器因意外宕机,而造成的数据丢失等。
  2. 通过建立数据卷,实现外部机器和容器间接通信(数据的双向绑定)
  3. 通过建立数据卷,实现多个容器挂载同一数据卷,间接实现容器之间数据交换。
配置数据卷

在这里插入图片描述

  • 在创建启动容器时,使用 –v 参数 设置数据卷

    docker run -it --name=容器名 -v 宿主机目录:容器目录 镜像名:镜像版本 /bin/bash

  • 注意事项

    1. 目录必须是绝对路径
    2. 如果目录不存在,会自动创建
    3. 可以挂载多个数据卷
数据卷容器
  • 要实现多容器进行数据交换的方法

    1. 多个容器挂载同一个数据卷
    2. 数据卷容器
  • 图示

    在这里插入图片描述

  • 配置数据卷容器

    1. 创建启动容器卷,使用 -v参数,配置一个容器与宿主机的数据卷

      docker run -it --name=容器名 -v 宿主机目录:容器目录 镜像名:镜像版本 /bin/bash

    2. 创建其他容器,使用--volumes-from参数,使用与宿主机挂载了数据卷的容器

      docker run -it --name=容器名 --volumes-from 与宿主机挂载数据卷的容器名 镜像名:镜像版本 /bin/bash

    3. 配置总结

      创建一个容器,与宿主机挂载一个目录,让其他容器继承自该容器( --volume-from )。

应用部署

在进行应用部署的时候需要注意的几个点。

  1. 容器内的网络服务和外部机器不能直接通信。

  2. 外部机器和宿主机可以直接通信

  3. 宿主机和容器可以直接通信

  4. 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的该端口,从而间接访问容器的服务。这种操作称为:端口映射

  5. 图示

    在这里插入图片描述

部署步骤总结
部署步骤总结
  1. 搜索镜像

    docker search 镜像名

  2. 拉取镜像

    docker pull 镜像名:镜像版本

  3. 创建容器,设置端口映射、目录映射

    docker run -id --name=容器名 -v 宿主机目录:容器目录  -p 宿主机端口:容器服务端口 镜像名:镜像版本
    

具体应用配置博文链接:https://blog.csdn.net/qq_41256238/article/details/108180628

Docker镜像原理

在这里插入图片描述

  • Docker镜像是由特殊的文件系统叠加而成,最底端是 bootfs,并使用宿主机的bootfs。
  • 第二层是 root文件系统rootfs,称为base image(基础镜像),然后再往上可以叠加其他的镜像文件
  • 这样的技术称为统一文件系统技术,技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统;提高了镜像的复用性。

镜像的制作

容器转为镜像
  • 将容器转为镜像

    docker commit 容器名称/容器id 自命令镜像名称:镜像版本

  • 将镜像打包成压缩文件

    docker save -o 压缩文件名.tar 镜像名称:镜像id

  • 将压缩文件加载为镜像

    docker load -i 压缩文件名

使用dockerFile制作镜像
  1. dockerFile的概念

    • dockerFile是个文本文件,里面包含了一条条的指令,算是一个指令的集合。
    • 每一条指令构建一层镜像,基于基础镜像,最终构建出一个新的镜像
    • 参考网址:https://hub.docker.com
  2. 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
  3. 制作自定义centos镜像示例

    • 编写dockerfile文件(名字可以更改)

      FROM centos:7 #指定引用的基础镜像
      MAINTAINER yhf <1243443888@qq.com> #指定该新镜像的作者及邮箱
      RUN yum install -y vim	#镜像运行时执行的linux命令
      WORKDIR /usr # 指定该镜像的工作目录,没有会自动创建
      CMD /bin/bash #提供启动容器时候的默认命令
      
    • 使用命令,根据编写好的dockerfile文件,创建镜像

      docker build -f 编写的dockerfile文件路径 -t 自定义镜像名称:镜像版本 .

      参数解释:

      ​ -f:表示指定doekrfile文件

      ​ -t:设置新镜像名称和版本

服务编排

  • 微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大。
  • 所以我们就需要跟服务进行编排,规定每个服务的启动顺序,执行顺序等
  • 服务编排: 按照一定的业务规则批量管理容器。
  • 所使用的工具:Docker Compose
Docker Compose
  1. 定义

    Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。

  2. 使用步骤

    • 利用 Dockerfile 定义运行环境镜像
    • 使用 docker-compose.yml 定义组成应用的各服务
    • 运行 docker-compose up 启动应用
  3. 图示

    在这里插入图片描述

  4. Doker Compose安装和使用

    博文链接:https://blog.csdn.net/qq_41256238/article/details/108180587

  5. 语法

    • 文件名称必须是docker-compose.yml

    • version: ‘3’ 指定语法版本可用关键字,3~3.7

    • services 定义多个服务

      • nginx/app 是服务名称 --name
      • images 指定基础镜像名称 镜像名称:镜像版本
      • ports:指定端口 -p
      • links:指定服务可用直接访问的容器列表,服务名称
      • volumes:挂载文件目录 类似-v
      • expose:暴露端口,作用类似 -p 8080:8080
    • 示例

      version: '3'
      services:
        nginx:
         image: nginx
         ports:
          - 80:80
         links:
          - app
         volumes:
          - ./nginx/conf.d:/etc/nginx/conf.d
        app:
          image: app
          expose:
            - "8080"
      
    • 操作命令

      • docker-compose up 创建并启动一组容器
      • docker-compose down 删除一组容器
      • docker-compose start 启动一组容器
      • docker-compose stop 停止一组容器

docker私有仓库

  • Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,或者你不希望将自己的镜像放到公网当中,那么我们就需要搭建自己的私有仓库来存储和管理自己的镜像。

    搭建私有仓库博文:https://blog.csdn.net/qq_41256238/article/details/108180577

查看容器相关日志

docker logs 容器id/容器名称 查看容器日志

docker logs -f 容器id/容器名称 -f:实时输出容器日志

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值