目录
- Docker
- docker 的下载与安装:
- 镜像
- 容器
- docker run [options] 镜像ID或镜像名 [command]
- docker ps [options]
- docker start 容器ID或容器名
- docker restart 容器ID或容器名
- docker stop 容器ID或容器名
- docker kill 容器ID或容器名
- docker rm 容器ID :删除已停止的容器
- docker run -d 容器名:启动守护式容器
- docker logs -f -t --tail 容器ID
- docker top 容器ID :查看容器内部运行的进程
- docker inspect 容器ID :使用json格式查看容器内部细节
- 进入正在运行的容器并以命令交互
- docker cp 容器ID:容器内路径 目的主机路径
- docker容器数据卷:使容器运行产生的数据保存下来
- DockerFile
Docker
docker version
docker help
docker info
docker 的下载与安装:
直接在官网上找到与自己版本配置的docker,我用的是centos7
也可以选择自定义安装,详情看docker官网
镜像
镜像是一个轻量级,可执行的独立软件包
docker images [options]
options说明:
-a:列出本地所有的镜像(含中间映像层)
-q:只显示镜像ID
--digests:显示镜像的摘要信息
--no-trunc:显示完整的镜像信息
docker search [options]
options说明:
-s n:显示收藏数不小于n的镜像
--notrunc:显示完整的的镜像描述
--automated:只列出automated build类型的镜像
docker pull
docker rmi [options]
options说明:
-f:强制删除
案例:docker rmi -f $(docker images -qa)
docker commit :提交容器副本使之成为一个新的镜像
案例:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
容器
docker run [options] 镜像ID或镜像名 [command]
options说明:
--name:自定义容器名
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端
-P:随机端口映射
-p:指定端口映射,有四种格式:
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort (常用)
containerPort
docker ps [options]
options说明:
-a:显示当前和历史上运行过的
-l:显示最近创建的那个容器
-n:显示最近N个创建的容器
-q:静默模式,只显示容器ID
--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 容器名:启动守护式容器
docker logs -f -t --tail 容器ID
-t:加入时间戳
-f:跟随最新的日志打印
--tail n:显示最新的n条日志
docker top 容器ID :查看容器内部运行的进程
docker inspect 容器ID :使用json格式查看容器内部细节
进入正在运行的容器并以命令交互
docker exec -it 容器ID bashShell
docker attach 容器ID
两种方式的区别:
attach:直接进入容器启动命令的终端,不会启动新的进程
exec:是在容器中打开新的终端,并且可以启动新的进程
docker cp 容器ID:容器内路径 目的主机路径
docker容器数据卷:使容器运行产生的数据保存下来
功能:容器持久化、容器间继承+共享数据
容器内添加数据卷
直接命令添加
docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
ro:read only : 容器权限为只读
DockerFile添加
1.根目录下新建mydocker文件夹并进入
2,dockfile的创建:
在DockerFile中使用VOLUME指令给镜像添加一个或多个数据卷
#volume test
FROM centos
VOLUME ["/volume1", "/volume2 "]
CMD echo "finished -----success"
CMD /bin/bash
根据dockerfile创建自己的镜像
docker build -f /mydocker/dockerfile1 -t joe/centos .
运行容器:docker run joe/centos --name dc01
因为使用DockerFile是随机分配主机的容器卷,在这里可以使用docker inspect 容器ID 查看主机上对应的容器卷
容器间传递共享
容器在创建时可以继承其他容器
docker run -it --name dc02 --volumes -from dc01 joe/centos
容器之间配置信息的传递:数据卷的生命周期一直持续到没有容器使用它为止
DockerFile
是用来构建镜像的框架文件,是由一系列,命令和参数构成的脚本
构建三步骤:
编写dockerfile
docker build
docker run
DockerFile基础知识
1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按照从上到下,顺序执行
3.#表示注解
4.每条指令都创建一个新的镜像层,并对镜像进行提交
Docker执行DockerFile流程
1.docker从基础镜像运行一个容器
2.执行每一条指令并对容器做出修改
3.执行类似docker commit,提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的镜像层
5.执行DockerFile中的下一条指令直到全部执行完
保留字
FROM :基础镜像
MAINTAINER :作者的名字和邮箱
RUN :容器构建时需要运行的命令
EXPOSE :暴露端口
WORKDIR :指令在创建容器后,终端默认登录进来的工作目录,落脚点
ENV :用来在构建镜像过程中设置环境变量
ADD :将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理url和解压tar压缩包
CORY :类似ADD,但不会对文件进行处理
VOLUME :指定数据卷
CMD :容器启动时执行的命令 CMD会被DockerFile run之后的参数替代
ENTRYPOINT :和CMD功能一样,DockerFile run之后的参数会追加到ENTRYPOINT的指令上
ONBUILD :当构建一个被继承的DockerFile时运行,父镜像被子镜像继承时ONBUILD被触发
DockerFile案例
MyCentOS
mydockerfile
FROM centos
ENV mypath /tmp
WORKDIR $mypath
RUN yum -y install vim
RUN yum -y install net -tools
EXPOSE 80
CMD echo $mypath
CMD echo "success .....ok"
CMD /bin/bash
docker build -f mydockerfile -t mycentos:1.3 .
docker run -it mycentos:1.3
MyTomcat
先将jdk和centos的压缩包和创建的mytomcatdockerfile放在同一文件夹下
mytomcatdockerfile:
FROM centos
MAINTAINER joe<1251664915@qq.com
ADD jdk-8u171-linux-x64.tar,gz /usr/local
ADD apache-tomcat-9.0.8.tar.gz /usr/local
RUN yum -y install vim
ENV mypath /usr/local
WORKDIR $mypath
ENV JAVA_HOME /usr/local/jdl1.8.0-17/
ENV classpath $JAVA_HOME:/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out
#ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-9.0.8/bin/catelina.sh","run"]