docker 命令常用
#启动容器的时候
-d 后台运行
-p 端口映射 宿主机:docker
-v 卷挂载
-e 环境配置
--name 容器名字
-P 随机映射端口
退出docker的命令
#退出docker容器而不关闭它
ctrl+p+q
docker commit
#提交自己的镜像 成为新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
实战测试
#启动一个默认的tomcat容器
#将其中webapps.disk中的文件全部拷贝到webapps中得到我们想要的镜像并将其提交
docker 容器数据卷
使用容器数据卷
方式一:直接使用命令 -v 进行挂载
docker run -it -v 主机目录:容器内目录
测试
将本机home/ceshi与docker中centos的home目录进行挂载,并在centos的home下创建一个test.java的文件回到宿主机的/home/ceshi目录下发现同样存在test.java说明挂载成功
具名挂载和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有卷的情况
[root@iZ2ze7ss8kqoyuzcy54phsZ ceshi]# docker volume ls
local 5ca5d0cf4d14163fce77f75e5b544f20a29cb8ddb0ab7dfa4a3948f571e2694e
local 41b02b418f8ed6b712a097b54c9c303e5d3a19dc8f21e1a000fd51f5d7fdde36
#这里发现这种就是匿名挂载,-v的时候只写了容器内路径没有写容器外的
#具名挂载
[root@iZ2ze7ss8kqoyuzcy54phsZ ceshi]# docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
a2d4a31b589f31bda4b5fa8bc2fe405a2151fbc8f87bca5e76fb3c3e20fbe45c
[root@iZ2ze7ss8kqoyuzcy54phsZ ceshi]# docker volume ls
DRIVER VOLUME NAME
local 5ca5d0cf4d14163fce77f75e5b544f20a29cb8ddb0ab7dfa4a3948f571e2694e
local 41b02b418f8ed6b712a097b54c9c303e5d3a19dc8f21e1a000fd51f5d7fdde36
local juming-nginx
#通过-v 卷名:容器内路径
#查看一下这个卷
所有的卷,没有指定目录的话都是在 /var/lib/docker/volunes/xxx/_data
#如何确定是具名挂载还是匿名挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
扩展
ro readonly #只读
rw read write #可读可写
#挂载出的内容就有了限定
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
#只要看到ro只能通过宿主机操作,容器内部无法操作
初识Dockerfile
Dockerfile使用构建镜像的构建文件!命令脚本,通过这个脚本生成镜像
镜像是一层一层的,脚本是一个个命令,每个脚本都是一层
#创建dockerfile文件 ,名字任意
#文件内容:指令和参数
FROM centos
#这是一个匿名挂载
VOLUME ["volume01","volumeo2"]
CMD echo "----end-----"
CMD /bin/bash
#这里的每个命令就是镜像的一层
#启动自己生成的容器
这个卷和外部的卷有一个同步
DockerFile
构建步骤
1.编写一个dockerfile文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
4.docker push 发布镜像(dockerhub,阿里云镜像仓库!)
DockerFile构建过程
基础知识:
1.每个保留关键字都是大写字母
2.执行从上到下
3.#表示注释
4.每一行命令都会创建提交一个新的镜像层,并提交
dockerfile是面向开发的,发布项目,做镜像,就要编写dockerfile文件,这个文件十分简单
Docker镜像逐渐成为了企业交付的标准,必须要掌握!
步骤:开发,部署,上线运维,缺一不可!
Dockerfile:构建文件,定义了一切的步骤,源代码
Dockerimages:通过Dockerfile构建生成的镜像,最终通过发布和运行的产品,以前是jar,war
Docker容器:容器就是镜像运行起来提供服务的。
DockerFile的指令
FROM #基础镜像 一切从这里开始构建
MAINTAINER #镜像是谁写的,留下姓名和邮箱
RUN #保留构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat的压缩包就是添加的内容
WORKDIR #镜像的工作目录
VOLUME #挂载目录
EXPOSE #指定暴露端口
CMD #指定容器启动时运行的命令,只有最后一个会执行,可被替代
ENTRYPOINT #指定运行时运行的命令,可以直接追加命令
ONBUILD #当构建一个被继承的Dockerfile就会运行onbuild的指令,触发指令
COPY #类似ADD将我们的文件拷贝到镜像中
ENV #构建的时候设置环境变量
构建自己的centos
#编写dockerfile配置文件
FROM centos
MAINTAINER sunyihao<1915257388@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "---------end--------"
CMD /bin/bash
#通过这个文件构建镜像
实战:Tomcat镜像
1.准备镜像文件 tomcat压缩包,jdk的压缩包!
2.编写dockerfile文件
命名位Dockerfile buil会自动寻找这个文件就不用-f指定了
FROM centos
MAINTAINER sunyihao<1915257388@qq.com>
COPY readme.txt /usr/loacl/readme.txt
ADD jdk-8u281-linux-x64.tar.gz /usr/loacl/
ADD apache-tomcat-9.0.43.tar.gz /usr/loacl/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/loacl/jdk1.8.0_281
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.43
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.43/bin/logs/catalina.out
A_BASH /usr/local/apache-tomcat-9.0.43
ENV PATH
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin:
C
A
T
A
L
I
N
A
H
O
M
E
/
l
i
b
:
CATALINA_HOME/lib:
CATALINAHOME/lib:CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.43/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.43/bin/logs/catalina.out