前言
三天时间把docker学完了,学完依旧很懵,做个小小的总结用于以后回顾
开搞
1.镜像技术(将所有的东西都打包,一处构建处处运行)
(1) 打破代码即应用,(运行文档+配置环境+运行环境+运行依赖包+操作系统发行版+内核)
(2) 就是高度浓缩版,小型版的linux系统
-
优点
(1) 更快速的应用交付和部署
(2) 更快捷的升级和扩缩容
(3) 更简单的系统运维
(4) 更高效的计算资源利用 -
三大特征:镜像,容器,仓库 仓库存放镜像,镜像里有容器
-
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
指令详解
(1)FROM
基础镜像,当前新的镜像是基于那个镜像的
FROM java:8
(2)MAINTAINER
镜像维护这的姓名和邮箱地址
MAINTAINER GG-LYF <2083298549@qq.com>
(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)ENTRYPOINT
和CMD
一样,但写的多个可以是追加
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
网友评论