Docker的使用

java学习 专栏收录该内容
7 篇文章 0 订阅

Docker常用命令

  • docker images 列出本地所有镜像

    • docker images -a 列出本地所有镜像及子镜像
    • docker images -q 只显示镜像ID
    • docker images --digests 显示镜像的摘要信息
    • docker images --no-trunc 显示完整的镜像信息
    • REPOSITORY 表示镜像的仓库源
    • TAG 镜像标签
    • IMAGE ID 镜像ID
  • docker search 镜像搜索

    • docker search --no-trunc 显示完整的镜像描述
    • docker search -s 列出收藏数不少于指定值的镜像
    • docker search --automated 只列出automated build类型的镜像
  • docker pull 镜像下载命令

  • docker rmi 镜像删除命令

    • 删除单个 docker rmi -f 镜像ID

    • 删除多个 docker rmi -f 镜像ID1 镜像ID2

      ​ docker rmi -f 镜像名:[tag] 镜像名:[tag]

    • 删除全部 docker rmi -f ${docker images -qa}

Docker命令(容器)

  • 容器镜像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时系统工具,系统库,设置, 不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序,容器将软件与周围环境隔离开来, 例如开发环境和生产环境之间的差异, 并有助于减少在同一基础架构上运行不同的软件的团队之间的冲突

  • 创建并启动容器

    • docker run [options] images [command][args]
      • –name 容器新名字
      • -d 后台运行
      • -i 以交互模式运行容器,通常与-t同时使用
      • -t 为容器分配一个伪输入终端
      • -P 随机端口映射
      • -p 指定端口映射,有下面四种格式
        • ip:hostPort:containerPort
        • ip:containerPort
        • hostPort:containerPort
        • containerPort
  • 列出当前所有正在运行的容器

    • docker ps [options]
      • -a 列出所有容器:当前+历史
      • -l 列出最近创建的容器
      • -n 显示最近n个创建的容器
      • -q 静默模式,只显示容器编号
      • –no-trunc 不截断输出
  • 退出容器

    • exit 停止容器并退出
    • ctrl+P+Q 容器不停止退出
  • 启动容器

    • docker start 容器ID或容器名称
  • 重启容器

    • docker restart 容器ID或容器名称
  • 停止容器

    • docker stop 容器ID或容器名称
  • 强制停止容器

    • docker kill 容器ID或容器名称
  • 删除已停止的容器

    • 单个删除 docker rm 容器ID

    • 多个删除 docker rm -f ${docker ps -aq}

      ​ docker ps -aq xargs docker rm

  • 其他重点内容

    • 启用守护式容器

      docker run -d centos

      docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是一直挂起的命令,就会自动退出

    • 查看容器日志

      • 先运行一个程序,在后台被隔两秒输出hello

        docker run -d centos /bin/sh -c “while true;do echo hello;sleep 2;done”

      • 查看日志

        docker logs -tf --tail 10 容器ID

        -t 加入时间戳

        -f 跟随最新的日志打印

        –tail 数字 显示最后多少条

    • 查看容器运行进程

      • docker top 容器ID
    • 查询容器内部细节

      • docker inspect 容器ID
    • 进入正在进行的容器并进行命令交互

      • 方式1

        docker exec -it 容器ID /bin/bash

      • 方式2

        docker attach 容器ID

      • 两种方式区别

        exec 在容器中打开新的终端,并且可以启动新的进程

        attach 直接进入容器终端,不会启动新的进程

    • 进入容器内拷贝文件

      • docker cp 容器ID:容器内的路径 主机目录

Docker容器卷

容器数据卷
  • 宿主机和容器之间

  • 使用命令

    docker run -it --name mycentos -v /宿主机目录:/容器内目录 --privileged=true centos

    • 查看容器是否挂载成功 docker inspect 容器ID
  • 使用DockerFile添加

    FROM centos
    VOLUME ["/dataContainer1","/dataContainer2"]
    CMD echo "finished,------success1"
    CMD /bin/bash
    

    docker build -t mycentos:1.0 .

    需要进入容器查看挂载在宿主机的目录

数据卷容器
  • 容器和容器之间,实际上是容器之间通过宿主机共享
  • 继承其他容器 docker run -it --name dc2 --volumes-from dc1 mycentos:1.0

DockerFile

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

  • 流程

    • docker从基础镜像运行一个容器
    • 执行一条指令并对容器进行修改
    • 执行类似于docker commit的操作提交一个新的镜像
    • docker再基于刚提交的新镜像运行一个新的容器
    • 执行dockerfile的下一个指令再从执行第2点到没有指令
  • 体系结构

    • FROM 基础镜像
    • MAINTAINER 镜像维护者的姓名和邮箱地址
    • RUN 容器构建时需要的命令
    • EXPOSE 当前容器对外暴露的端口
    • WORKDIR 指定容器在创建容器后,终端默认登录进来的工作目录
    • ENV 用来在构建镜像过程中设置环境变量
    • ADD 将宿主机目录下的文件拷贝进镜像并且ADD命令会自动出来URL和解压tar包
    • COPY 类似ADD,拷贝文件和目录到镜像中,不会自动解压,语法COPY src dest COPY [“src”,“dest”]
    • VOLUME 容器数据卷,用于数据保存和持久化工作
    • CMD 指定一个容器启动时要运行的命令格式
      • shell: CMD <命令>
      • exec: CMD [‘可执行文件’,‘参数1’,‘参数2’]
      • DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
    • ENTEYPONT 指定一个容器启动时要运行的命令,可以有多个
      • ENTEYPONT的目的和CMD一样,都是在指定容器启动程序及参数
    • OBBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后触发父镜像的onbuild
  • 自定义centos镜像

    • 创建dockerfile

      #基于镜像
      FROM centos
      #作者
      MAINTAINER walt1012
      #声明一个变量
      ENV ROOT_PATH /usr/local
      #设置工作目录
      WORKDIR $ROOT_PATH
      #安装VIM
      RUN yum -y install vim
      #输出工作目录下所有文件及文件夹
      RUN ls -lh
      #对外暴露端口
      EXPOSE 80
      #输出一个构建成功的字符串
      CMD echo "success"
      CMD /bin/bash
      
    • 构造镜像

      • docker build -t mycentos:1.0 .
    • 运行镜像

      • docker run -it 容器ID /bin/bash
    • 进入镜像

  • DockerFIle中可以有多个CMD命令,但最后只要一个生效,而且CMD会被docker run之后的命令参数替换掉

  • 使用ENTRYPOINT来运行命令,在run运行的参数会追加到新的命令后面

  • 自定义tomcat(基于jdk)

    • 下载jdk和tomcat上传到linux并和DockerFile放在同一个目录

    • 编写DockerFile

      FROM centos
      MAINTAINER walt1012
      ENV ROOT_PATH /usr/local/
      WORKDIR $ROOT_PATH
      ADD jdk-8u231-linux-x64.tar.gz ./
      ADD apache-tomcat-8.5.43.tar.gz ./
      RUN mv jdk1.8.0_231 jdk1.8
      RUN mv apache-tomcat-8.5.43 tomcat
      RUN ls -lh
      #配置环境变量
      ENV JAVA_HOME /usr/local/jdk1.8
      ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      ENV CATALINA_HOME /usr/local/tomcat
      ENV CATALINA_BASE /usr/local/tomcat
      ENV PATH $PATH:JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
      
      EXPOSE 80
      CMD tomcat/bin/startup.sh && tail -F tomcat/logs/catalina.out
      
    • 使用DockerFile构造镜像

      docker build -t mytomcat:1.0
      
    • 运行测试

      docker run -it -d -p 8080:8080 mytomcat:1.0
      
  • 制作jar包的镜像

    • 上传jar

    • 编写DockerFile

      FROM openjdk:8u231-jdk-alpine
      MAINTAINER walt1012
      ENV ROOT_PATH /root/
      WORKDIR $ROOT_PATH
      ADD demo.jar ./
      VOLUME $ROOT_PATH
      EXPOSE 8080
      ENTRYPOINT ["java","-jar","demo.jar"]
      
    • 生成镜像

      docker build -t myjar:1.0
      
    • 运行镜像

      docker run -it -d -p 8080:8080 myjar:1.0
      
  • 制作war包镜像

    • 上传war

    • 编写DockerFile

      FROM tomcat
      MAINTAINER walt1012
      ENV ROOT_PATH /usr/local/tomcat/webapps/
      WORKDIR $ROOT_PATH
      RUN rm -rf ./*
      ADD demo.war ./
      RUN mv demo.war ROOT.war
      EXPOSE 8080
      ENTRYPOINT ["../bin/catalina.sh","run"]
      
      
    • 生成镜像

      docker build -t mywar:1.0
      
      
    • 运行镜像

      docker run -it -d -p 8080:8080 mywar:1.0
      
      

本地镜像发布到阿里云

  • 登录

    docker login --username=walt1012 registry.cn-shanghai.aliyuncs.com
    
    

    需要输入阿里云密码

  • 推送镜像

    docker login --username=walt1012 registry.cn-shanghai.aliyuncs.com
    docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号]
    docker push registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号]
    
    
  • 拉取镜像

    docker pull registry.cn-shanghai.aliyuncs.com/walt1012/myjar:[镜像版本号]
    
    

Docker四种网络模式

  • 桥接模式
  • 主机模式
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值