Docker笔记-基础版

1、基础
  1. docker是一种轻量级的虚拟化技术,也是应用容器引擎。基于go语言。

  2. 优点:

    1、可以创建很多轻量级、可移植的和独立的容器,一般而言,一个容器就相当于一个应用,符合微服务思想。

    2、相对于虚拟机,

    ​ 占用资源很少,docker直接运行在宿主机的内核,vm则有完整的操作系统;

    ​ 运行速度非常快,启动和停止是秒级别;虚拟机,都是分钟级别的,需要加载os,内核等。

    ​ 非常方便进行快速部署和扩展。符合DevOps思想。

  3. 架构图

    Docker是C/S结构

    C: 我们平时在linux输入的命令docker就是使用client客户端
    S: Docker Daemon是Docker架构中运行在后台的守护进程,大致可以分为4个部分,具体可见docker笔记-进阶版。除了docker服务器与docke客户端通信,还可以使用Remote API与S端Daemon守护进程进行交互。

  4. 三要素,镜像,容器和仓库;层

    镜像:生成容器模本(源代码)。由多个只读层组成。与容器的唯一区别是,容器在这些只读层上面添加了一层可读写的容器层。最底层为bootfs,然后rootfs,再往上就是各种镜像层。

    容器:镜像的一个实例;由只读镜像层和可读写容器层组成。表现为一个微型操作系统和一个(组)应用。由守护进程根据镜像产生。

    仓库:用于存放镜像。私有仓库和公共仓库。

    层:联合文件系统支持,Dockerfile中的一条指令就会创建一个层。基于某个容器进行修改之后commit为新的镜像,也会增加一层。

    镜像与容器的区别,镜像由一层层只读层堆在一起,容器为镜像只读层(镜像层)+读写层(容器层)。

    层的概念:
    当你在一个容器中进行了某些操作比如添加了一个文件,然后调用docker commit操作创建新的镜像时,Docker会在镜像栈的最上面创建一个新的层,这个层包含了新添加的文件。或者,通过Dockerfile创建新的镜像时,通过FROM指令指定的就是基础镜像。此后的每条指令都会创建一个新的层,层中包含了这条指令对镜像的修改。

    一个镜像的大致分层结构

    在这里插入图片描述

    Dockerfile、镜像和容器的示意图
    在这里插入图片描述

    FROM ubuntu:14.04 :设置基础镜像,此时会使用基础镜像ubuntu:14.04的所有镜像层,为简单起见,图中将其作为一个整体展示。

    ADD run.sh /:将Dockerfile所在目录的文件run.sh加至镜像的根目录,此时新一层的镜像只有一项内容,即根目录下的run.sh.

    VOLUME /data:设定镜像的VOLUME,此VOLUME在容器内部的路径为/data。需要注意的是,此时并未在新一层的镜像中添加任何文件,但更新了镜像的json文件,以便通过此镜像启动容器时获取这方面的信息。

    CMD ["./run.sh"]:设置镜像的默认执行入口,此命令同样不会在新建镜像中添加任何文件,仅仅在上一层镜像json文件的基础上更新新建镜像的json文件。

  5. docker容器与虚拟机

    传统虚拟机在硬件层面上实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统。而Docker容器是在操作系统层面上实现的虚拟化,直接利用本地主机的操作系统,因此更轻量
  1. docker底层原理

    Linux Namespaces机制提供一种资源隔离方案,相当于一个独立的环境。而在用户层面上只能看到属于用户自己namespace下的资源。比如自己的pid数字,其他容器也可以一样。
    cgroup:它以一组进程为目标进行系统资源分配和控制。

2、命令
  1. 安装Docker

    # 安装依赖
    yum install -y yum-utils device-mapper-persistent-data lvm2
    # 添加yum源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 安装docker
    yum -y install docker
    # 安装docker指定版本
    yum install docker-ce-18.03.1.ce-1.el7.centos
    # 删除docker
    yum list installed | grep -i docker
    yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64
     
         
    # 开机自启
    systemctl enable docker 
    # 开机不启动
    systemctl disable docker 
    # 启动docker服务  
    systemctl start docker
    # 停止docker服务  
    systemctl stop docker
    # 重启docker服务  
    systemctl restart docker
    
    # 查看docker基本信息 (查看阿里云地址,容器的运行情况等)
    docker info
    # 查看docker版本
    docker version
    
    # 阿里云控制台搜索容器镜像服务
    vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://xddehuq4.mirror.aliyuncs.com"]
     }
       
    # 重启docker
    systemctl daemon-reload
    systemctl restart docker
    
  2. docker镜像命令

    # 下载镜像:docker pull <镜像名:tag>    如:下载tomcat镜像
    docker pull tomcat:7
    # 查看本地镜像库,已经下载的
    docker images
    # 从远程仓库查找镜像
    docker search httpd
    # 删除本地某个镜像
    docker rmi hello-world
    # 删除本地所有镜像
    docker rmi $(docker images -aq)
    docker rmi `docker images -aq`
    docker images -aq | xargs docker rmi
    # 构建镜像
    vim Dockerfile 
    docker build -t qsm/jdk:v1 .
    # 镜像打标签,并且可以复制并重新命名
    docker tag centos centos:v1
    
  3. docker容器命令

    # 列出运行容器 -a 所有
    docker ps 
    
    # 创建并且启动容器 -it/-id 进入/后台守护 -p端口映射 -v 目录挂载
    docker run -it -p 8888:8080 --name qsmtomcat2 -v /local/tomcat/webapps/ /usr/local/tomcat/webapps tomcat镜像id
    
    # 查看容器应用日志
    docker logs 容器id
    # 查看容器进程
    docker top 容器id
    # 查看容器信息,例如ip
    docker inspect 容器id
    
    # 进入容器
    docker exec -it 容器id
    docker attach 容器id
    # 退出容器
    exit(-it 进入,会关闭容器,exec进入不会),ctrl+p+q
    # 启动容器
    docker start 容器id
    # 重启容器
    docker restart 容器id
    # 停止容器
    docker stop 容器id
    docker kill 容器id
    # 删除容器 -f 若是在运行
    docker rm 容器id
    # 删除所有容器 
    docker rm $(docker ps -aq)
    docker rm `docker ps -aq`
    
    # 拷贝
    docker cp /root/tomcat 容器id:/usr/tomcat
    docker cp 容器id:/usr/tomcat /root/tomcat 
    # 提交容器为镜像
    docker commit -a='作者' -m='备注' 运行时容器id 新镜像名称:版本
    
3、DockerFile
  1. Dockerfile 是用于构建镜像的命令脚本文件。
    重点是:from run entrypoint cmd

     #基于centos镜像
     FROM centos:7
     #维护人的信息 下面2种选一即可
     MAINTANIER www.qsm.com
     LABEL maintainer="qsm.cn"
     #设置环境内环境变量
     ENV JAVA_HOME /usr/local/jdk1.8.0_45
     #add COPY 都是拷贝,但是add会解压
     ADD jdk-8u45-linux-x64.tar.gz /usr/local
     ADD apache-tomcat-8.0.46.tar.gz /usr/local
     COPY server.xml /usr/local/apache-tomcat-8.0.46/conf
     #构建镜像时运行的Shell命令
     RUN rm -f /usr/local/*.tar.gz
     #工作目录,进入容器的默认目录
     WORKDIR /usr/local/apache-tomcat-8.0.46
     #开启8080端口
     EXPOSE 8080
     #挂载mount
     #VOLUME
     #类似于 CMD 指令,不会被覆盖。多个仅最后一个生效。cmd同时存在,作为entrypoint参数
     ENTRYPOINT ["./bin/catalina.sh", "run"]
     #当启动docker run容器时执行的命令。可覆盖。多个仅最后一个生效。
     CMD ["/run.sh"]
     #ONBUILD用于子镜像构建时执行父镜像的该命令
     #ONBUILD
    
    docker build -t qsm/jdk:v1 .
    
  2. 全景图

  3. Docker Compose

    Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。主要用于单机。


本笔记为基础版,更多底层原理可以参考docker笔记-进阶版










【正在去BAT的路上修行!!!】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值