Docker的安装和简单的使用

Docker是一个开源的应用容器引擎

Docker可以让开发者打爆他们的应用以及依赖包到一个轻量级,可以指的容器中,然后发布到任何流行的Linux机器上

镜像(Image):相当于是一个root文件系统,比如官方镜像ubuntu:16.04就包含了完整的一套Ubuntu16.04最小系统的root文件系统

容器(Container):镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器时镜像运行时的个体,容器可以被创建,启动,停止,删除,暂停的

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

docker镜像相关的命令

查看镜像:docker images

搜索镜像:docker search 镜像名

下载: docker pull 名字:版本 不写版本默认下载least,不知道版本号去docker hub上面看

删除镜像: docker rmi id

容器相关命令

查看容器:

docker ps:查看正在运行的容器

docker ps -a:查看所有容器

创建容器:

docker run -it --name=名字 镜像:版本 /bin/bash(初始运行程序,默认也是这个) exit退出,这种方式一退出就自动关闭了

docker run -id(后台运行创建容器) --name=xx 镜像:版本 创建之后后台运行

-i: 保持容器运行,通常与t一起使用

-t: 为容器重新分配一个伪输出终端,

-d: 以后台模式运行,创建一个容器后在后台运行,需要exec进入容器,退出后也不会关闭

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

-name: 为创建的容器命名

进入容器docker exec -it 名字 初始程序

启动容器 docker start xx

停止容器 docker stop

删除容器 docker rm name

查看容器信息 docker inspect xx

容器的数据卷

docker容器删除后,容器中产生的数据还在吗:不在

docker容器和外部容器可以交换容器吗:不行

容器间数据如何交换

数据卷解决了上述三个问题

数据卷是宿主机中的一个目录或文件,容器内挂载了数据卷,数据卷的数据进行操作之后,容器内也会跟着产生变化,反之也是一样,互相同步

所以 通过数据卷完成了持久化,外部机器和容器间接通信,容器间数据交换

一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷

配置数据卷

只要创建容器时,使用-v参数,设置数据卷

docker run ... -v 宿主机目录(文件):容器内目录(文件) ...

注意:

1. 目录必须是绝对路径

2. 如果目录不存在,会自动创建

3. 可以挂在多个数据卷

如: docker run -it --name=c1 -v /root/data:/root/data_container mysql:8.0 /bin/bash

数据卷容器

让数据卷容器挂载一个数据卷,然后让其他容器挂载数据卷容器

    docker run -it --name=c3 -v /volume contos:7 /bin/bash
    ## 这个数据卷容器没有写数据卷目录 系统自动给分配了一个数据卷目录

    ## 创建c1,c2容器,使用--volumes-from 参数 设置数据卷
    docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
    docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

Dockerfile

Linux文件系统由bootfs和rootfs组成

bootfs包含bootloader(引导加载程序)和hernel(内核),

rootfs:root文件系统,包含的就是典型Linux系统中的/dev

不同的linux发行版,bootfs基本一样,而rootfs不同

Docker镜像是由特殊的文件系统叠加而成

最低端是bootfs,并使用宿主机的bootfs,相当于少加载一个bootfs,速度较快

第二层是root文件系统rootfs,称为base image

然后在网上可以叠加其他的镜像文件

就是个叠叠乐,有相同的镜像就不用下载,被多个复用

统一文件系统能够将不同的层整合成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多个层的存在,在用户看来,只存在一个文件系统

一个镜像可以放在另一个镜像上面,位于下面的镜像称为父镜像,最底部的镜像为基础镜像

Docker镜像的原理:

| 关键字 | 作用 | 备注 |

| ----------- | ------------------------ | ------------------------------------------------------------ |

| 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 |

- 概念: Dockerfile是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

对开发人员来说:可以为开发团队提供一个完全一致的开发环境

对测试人员来说:可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像开始测试

对运维来说:在部署时,可以无缝移植

参考官网:hub.docker.com

MAINTAINER zs

ADD xxl-job-admin-2.4.0-SNAPSHOT.jar app.jar

ADD application.properties

CMD java -jar app.jar

docker build -f ./xxl_job_dockerfile -t app .

他现在是个镜像,再创建一个容器启动它就ok了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值