docker精讲

前言

  三天时间把docker学完了,学完依旧很懵,做个小小的总结用于以后回顾


开搞

1.镜像技术(将所有的东西都打包,一处构建处处运行)
 (1) 打破代码即应用,(运行文档+配置环境+运行环境+运行依赖包+操作系统发行版+内核)
 (2) 就是高度浓缩版,小型版的linux系统

  1. 优点
     (1) 更快速的应用交付和部署
     (2) 更快捷的升级和扩缩容
     (3) 更简单的系统运维
     (4) 更高效的计算资源利用

  2. 三大特征:镜像,容器,仓库 仓库存放镜像,镜像里有容器

  3. docker
     (1) Docker:容器运行载体或管理引擎,
     (2) 程序和配置依赖打包:可交付的运行环境
     (3) 运行环境:Image镜像文件
     (4) 镜像文件才能生成Docker容器
     (5) Image镜像文件:容器的模板
     (6) 容器:Image镜像文件的实例(相当于是一个简易版的linux环境和运行在其中的应用程序)

5.安装docker yum install docker 静静等待就行,可以加一个阿里云镜像加速

6.docker帮助命令
 (1) docker version 查看docker版本
 (2) docker info 显示 Docker 系统信息,包括镜像和容器数
 (3) docker --help

7.镜像命令
 (1) docker images [option] 列出本地主机上的镜像
  -a : 列出本地所有镜像(含中间镜像层)
  -q : 只显示镜像id
  --digests: 显示镜像的摘要信息
  --no-trunc : 显示完整的镜像信息

 (2) docker search [option] 某个xxx镜像名称
  -no-trunc : 显示完整的镜像描述
  -s 数字 : 列出收藏数不小于指定值的镜像
  --automated : 只列出automated build类型的镜像

 (3)docker pull 镜像名 从docker镜像源服务器拉取指定镜像或者库镜像

 (4)docker push 镜像名 推送指定镜像或者库镜像至docker源服务器

 (5)docker rmi 镜像id 删除镜像
  -f 镜像id: 删除单个
  -f $(docker images -qa):删除全部

 (6)docker commit 镜像名 提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器id 要创建的目标镜像名:[标签名]

 (7)docker build bulid成一个镜像文件
   -f: 文件地址
  -t: 命名空间 自定义一个文件的名字(将容器卷建在这个文件夹下)
  . : 当前目录下

docker build -f /mydocker/dockerfile -t zzyy/centos .

 (7)docker save 镜像名 保存一个镜像为一个 tar 包

7.容器命令
 (1) docker run [option] 镜像名 [COMMAND][ARG] 新建并启动容器
  --name="容器新名字": 为容器指定一个名字
  -i: 以交互模式运行容器,通常与-t同时连用
  -t : 为容器分配一个伪输入终端,通常与-i同时连用
  -p: 映射到外部的端口
  -v: 文件挂载的地址 /宿主机绝对路径:/容器内目录 (容器数据卷用)
  -d: 后台运行容器
  -e: 设置环境变量

docker run -p 8080:8080 -d  -e "SERVER_PORT=8080"  -v /mnt:/mnt --name="xxxx" 镜像名:版本号

 (2) docker ps [option] 列出当前所有正在运行的容器
  -a : 列主当前所有正在运行的和历史上运行过的容器
  -l: 显示最近创建的容器
  -n : 显示最近n个创建的容器
  --no-trunc: 不截断输出

 (3) 退出容器
  exit : 容器停止退出
  Ctrl+P+Q : (容器不停止退出)退出容器

 (4)docker start 容器id或容器名 启动容器

 (5) docker restart 容器id或容器名 重启容器

 (6) docker stop 容器id或容器名 停止容器

 (7) docker kill 容器id或容器名 强制停止容器

 (8) docker rm 容器id或容器名 删除已停止的容器
  $(docker ps -qa) :一次性删除多个容器
  docker ps -qa | xargs docker rm:一次性删除多个容器

 (9)docker logs -f -t --tail 容器id 查看容器日志

 (10)docker top 容器id查看容器内运行的进程

 (11)docker inspect 容器id 查看容器内部细节(以json串的形式显示)

 (12)进入正在运行的容器并以命令行交互
  docker exec 容器id bashShell 在容器中打开新的终端,并且启动新的进程
  docker attach 容器id 重新进入 (直接进入容器启动命令的终端,不会启动新的进程)

 (13)docker cp 容器id:容器内部路径 目的主机路径 从容器内拷贝文件到主机

 (14)docker create 创建一个新的容器,同 run,但不启动容器

 (15)docker exec -it 容器名或id /bin/bash 进容器

 (16)docker pause 容器id 暂停容器

8.数据卷和数据卷容器
 (1) 在虚拟机里使用docker的时候,会发现虚拟机一关,在打开的时候docker里的容器里面的数据可能会没了,这时候就要对数据进行持久化,在docker的容器中管理数据主要有两种方式:数据卷和数据卷容器。
  (1) 数据卷: 容器内数据直接映射到宿主机,独立与容器的生命周期,容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。
  (2) 数据卷容器: 命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数共享,挂载数据卷的容器,称之为数据卷容器

docker run --name=test -p 8080:8080-d -v /home/admin/test:/data/test test 
/*
1.此处 /home/admin/test代表主机目录,/data/test代表容器目录
2.可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷。
*/

9.Dockerfile
 (1) Dockerfile内容基础知识
  (1) 每条保留字指令都必须是大写字母(事实证明小写也可以)且后面要跟随至少一个参数
  (2) 指令按照从上到下,顺序执行
  (3) #表示注解
  (4) 每条指令都会创建一个新的镜像层,并对镜像进行提交

 (2) Dockerfile指令详解

docker精讲_第1张图片

  (1)FROM 基础镜像,当前新的镜像是基于那个镜像的

FROM java:8

  (2)MAINTAINER 镜像维护这的姓名和邮箱地址

MAINTAINER GG-LYF <[email protected]>

  (3)RUN 容器构建时需要运行的命令

RUN ["yum","install","vim"]
RUN yum -y install vim

  (4) EXPOSE当前容器对外暴露的端口号

EXPOSE 80

  (5) WOEKDIR 指定在创建容器后,终端默认登录的进来后的工作目录,一个落脚点

WORKDIR /data

  (6)ENV用来在构建镜像过程中设置环境变量

ENV JAVA_HOME /usr/local/jdk1.8
ENV CLASSPATH $JAVA_HOME /lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.8.0
ENV CATALINA_BASE /usr/local/apache-tomcat-9.8.0
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$CATALINA_BASE/bin

  (7)ADD 在宿主机目录下的文件拷贝进镜像且ADD会自动处理URL和解压tar压缩包

ADD jdk
ADD apache-tomcat

  (8)COPY将从构建上下文目录中<源目录>的文件 /目录复制到镜像内的<目标目镜>位置

COPY c.txt /usr/local/cincontainer.txt

  (9) VOLUME 容器数据卷,用于数据保存和持久化工作

VOLUME  /tem

  (10)CMD 指定容器启动时要运行命令,可以写多个,但只有最后一个有用

CMD echo “success----------------------ok”
CMD /bin/bash

  (11)ENTRYPOINTCMD一样,但写的多个可以是追加

ENTRYPOINT  [“/user/local/apache-tomcat-9.8.0/bin/startup.sh”]
ENTRYPOINT ["java","-jar","/app.jar"] 

  (12) ONBUILD当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild被触发

ONBUILD RUN “被继承了啊!!!!!!”

  (13) USER 用于指定是哪个用户

USER   root

你可能感兴趣的:(docker精讲)