Docker基础知识介绍

Docker基础篇

必须要在Linux环境下才能运行,windows下运行也是安装虚拟机后才能下载安装运行

下载安装

linux 依次执行下边步骤

  • 更新 yum yum update

  • 卸载旧的Docker

    sh 复制代码
    yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine
  • 安装必要的工具 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 install docker-ce

  • docker -v 查看版本

  • docker info 查看信息

  • 打开阿里云,登录,控制台,镜像服务,有安装 相关步骤。

  • 镜像仓库配置,官方是https://hub.docker.com/ 我们可以配置阿里云的镜像加速器

  • sudo systemctl daemon-reload重新加载镜像配置

  • sudo systemctl restart docker 启动 docker 适用于centos环境

  • docker version 查看版本

  • docker info 查看详细信息

  • docker --help 帮助命令

Docker 架构图

镜像

镜像下载版本可以在https://hub.docker.com中搜索

  • docker images查看已有镜像
  • docker search [redis] 在仓库中搜索镜像

  • docker pull redis:5.0 下载镜像 [镜像名:版本号]

  • docker rmi [image id] 删除镜像

  • docker rmi [镜像名:版本号] 删除镜像

  • docker images -q 查看所有镜像的ID

  • docker rmi docker images -q 把所有有镜像的ID 当作参数传入rmi命令,删除所有镜像

容器

可以通过镜像创建容器

  • docker run -it --name [容器名] -v [容器内部路径]:[宿主机路径] [镜像名] /bin/bash

    shell 复制代码
      # 使用centos创建一个名字为MyCentOS的容器,并且直接进入到命令行。
      # -i: 交互式操作。
      # -t: 终端。/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
      # 通过-i -t 创建的容器,创建完成皇后会直接进入到容器,退出后容器直接关闭
    docker run -i -t --name MyCentOS centos:7 /bin/bash
  • exit 退出容器,并且停止

  • Ctrl+P+Q 退出容器,但是不停止容器

  • docker ps 查看当前正在运行的容器

  • docker ps -a 查看所有容器

  • docker run -i -d --name CentOS centos:7 创建容器,并在后台运行

  • docker exec -i -t CentOS /bin/bash 进入容器

  • docker stop [容器名] 停止容器

  • docker kill [容器名] 强制停止容器

  • docker start [容器名] 启动容器

  • docker restart [容器名] 重启容器

  • docker rm [容器名或容器ID] 删除容器

  • docker inspect [容器名] 查看容器信息

  • docker top [容器名] 查看容器内部的进程

  • systemctl enable docker 配置开机自启动

数据卷

相当于是一个文件系统(磁盘),可以挂载到容器中,宿主机中,用于文件的交换

  • 创建容器并挂载数据卷 docker run -it --name MyCentOS -v /root/data:/root/data_container centos:7 /bin/bash
    • /root/data 宿主机的目录,没有则会创建
    • /root/data_container 代表容器的目录,没有会自动创建
  • 创建只读容器加参数 ro (ReadOnly简写) docker run -it --name MyCentOS -v /root/data:/root/data_container:ro centos:7 /bin/bash

数据卷容器

一个容器挂载数据卷,其它容器通过挂载这个容器实现数据共享,这个容器就是数据卷容器

  • 操作命令

    shell 复制代码
    # docker run -it --name [容器名] -v [容器内部路径]:[宿主机路径] [镜像名] /bin/bash
    # docker run -it --name [容器名] --volumes-from [容器卷名字] [镜像名] /bin/bash
    
    docker run -it --name DataCentOS -v /data:/data centos /bin/bash
    docker run -it --name CentOS01 --volumes-from DataCentOS centos /bin/bash
    docker run -it --name CentOS02 --volumes-from DataCentOS centos /bin/bash

DockerFile

DockerFile 是用来构建Docker镜像的构建文件,是一系列命令和参数构成的脚本文件

指令规则

  • 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
  • 指令按照从上到下顺序执行
  • # 表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像提交

执行流程

  1. docker从基础镜像运行一个容器
  2. 执行一条指令并对容器作出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新的容器
  5. 执行dockerfile中的下一条指令直到所有指令都执行完成

常见关键字

指令 说明
FROM 基础镜像,当前新镜像是基于哪个镜像的,有继承的意味
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建时需要运行的命令
EXPOSE 当前容器对外暴露的端口
WORKDIR 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY 类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置 COPY src dest COPY ["src","dest"]
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

自定义DockerFile

shell 复制代码
# 基础镜像 centos,Docker 绝大部分的基础镜像都是 scratch ,相当于Java 的 Object
FROM         centos
MAINTAINER    bobo<[email protected]>
#把宿主机当前上下文的hello.txt拷贝到容器/usr/local/路径下
COPY readme.txt /usr/local/helloincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u73-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.71.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_73
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.71
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.71
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-8.0.47/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-8.0.47/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-8.5.71/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.0.47/bin/logs/catalina.out

通过脚本生成镜像文件

shell 复制代码
# 注意,命令最后有一个 点 字符
docker build -f dockerfile名称 -t 镜像名:TAG .

镜像历史

shell 复制代码
docker history 镜像名

卸载Docker

复制代码
yum remove docker \
          docker-client \
          docker-client-latest \
          docker-common \
          docker-latest \
          docker-latest-logrotate \
          docker-logrotate \
          docker-engine
相关推荐
张敬之、2 分钟前
k8s-dashboard
云原生·容器·kubernetes
云上艺旅3 分钟前
K8S学习之基础二十九:K8S中的secret
学习·云原生·容器·kubernetes
Justice link10 分钟前
K8S的搭建
云原生·容器·kubernetes
前端白袍21 分钟前
性能优化:服务器性能影响网站加载速度分析
运维·服务器·性能优化
stone082344 分钟前
ABAP语言的动态编程(4) - 综合案例:管理费用明细表
linux·运维·服务器
厂里英才1 小时前
docker无法正常拉取镜像问题的解决
linux·docker
ღ星ღ2 小时前
网络编程基础
运维·服务器·网络
过客WZX2 小时前
Ubuntu24.04下管理自己的ssh连接
运维·服务器·ssh
RedCong2 小时前
K8S之QoS详解
云原生·容器·kubernetes
Zfox_3 小时前
【Linux】五种 IO 模型与非阻塞 IO
linux·运维·服务器·c++·io模型