docker基础全面讲解
31、为什么会有docker出现?

安装的时候,把原始环境一模一样的复制过来,开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题

2、Docker
一次构建,处处运行

一句话:

3、Docker安装:


Docker三要素:
镜像、容器、仓库
镜像:


镜像相当于类、容器相当于对象。
容器:

仓库:

文档详细安装docker步骤(centOS 7):https://docs.docker.com/install/linux/docker-ce/centos/
镜像加速器:


docker run hello-world:

运行过程:



4、docker相关命令(常用命令)
帮助命令:

镜像命令:
docker images

docker images -a

docker search +"镜像名字":如docker search tomcat

docker pull +"镜像名字":拉取镜像,如docker pull tomcat



docker rmi -f +"镜像名字":删除镜像

镜像删除

容器命令


运行镜像,docker run -it "镜像ID",之后进入镜像容器,如下图中所标柱的是容器ID

docker ps:是列出当前所有正在运行的容器
dokcer rm -f $(docker ps -q):是删除当前所有正在运行的容器

docker run -it “镜像ID” 就是登录docker里面对应的镜像


如下所示:

启动关闭的容器:docker start "容器id或容器名"

重启容器:docker restart "容器id或容器名"

如果使用docker stop的话停止时间较长,如果使用docker kill的话会立即停止。
容器删除
容器删除与镜像删除有区别:
docker rmi是删除镜像,docker rm 是删除容器。

重要
1、命令docker run -d "镜像"

前台交互:docker run -it,伪终端
不与前台交互:docker run -d
2、查看容器日志:

启动进程,此时docker ps,会发现容器并没退出,因为与前台进行了交互,有命令显示在终端


3、查看容器内运行的进程

4、进入正在运行的容器并以命令行交互,下面以退出容器的第二种方式来进行说明

a、attach命令重新进入退出的容器

b、exec命令重新进入退出的容器

使用exec时,相当于进入了这个容器里面做了这么一件事,将结果返回给宿主机
当在后面加上/bin/bash时,结果和使用attach是一样的效果,都可以进入退出的容器,所以exec比attach的功能要大一些。


5、从容器内拷贝文件到主机上

注意容器ID后面需要加上双引号,双引号后面跟的是需要复制文件的路径,再后面的是文件复制到目标路径
docker 镜像加载原理:
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFS(联合文件系统)



为什么tomcat镜像会有500M这么大呢?

下面就是解释,tomcat镜像是由多层文件系统构成(分层镜像)

为什么Docker镜像要采用这种分层结构呢?


Tomcat启动:
小写的p是指定端口
大写的p是随机端口

通过在浏览器中输入ip://8888得出,说明tomcat启动成功,并已经映射端口成功

当是大写的-P时:
docker run -it -P tomcat


可以看出是随机分配的端口:32769,经测试,也是成功的

commit提交
演示:
1、docker pull tomcat下载tomcat镜像到本地并成功运行
2、故意删除上一步镜像生产tomcat容器的文档

3、
格式: ![]()

commit总结:docker commit提交容器副本使之成为一个新的镜像,好处就是可以自定义自己所需要的镜像
容器数据卷

容器卷添加
a、直接命令添加:


查看容器卷是否挂载成功
通过docker inspect 容器id来查看,若有如下所示情况,则挂载成功

挂载成功后会在容器与宿主机之间实现数据共享。
容器停止退出后,主机修改后数据也是同步的.
附:容器退出后(exit),重新进入:
1、docker ps -l,得出退出的容器

2、然后获取容器ID,docker start 容器ID

3、重新进入容器ID


ro:read only(只读),只允许主机单向操作,不允许容器操作

b、DockerFile添加:
DcokerFile可以说是对镜像源码级的描述,它有自己的一套语法规则。
1、根目录下新建mydockerwen文件夹并进入:

2、可在DockerFile中使用VOLUME指令来给镜像添加一个或多个数据卷

3、File构建

#volumn test
FROM centos
VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"]
CMD echo "finished,---------success1"
CMD /bin/bash

4、build后生成镜像


注意:这个是在容器下面的,宿主机里面并没有生成的目录

所以需要考虑这样是否具有与宿主机进行双向通信的可能?
基于这种考虑,宿主机也考虑到了,会有默认路径存在


DockerFiile解析

下面是centos的dockerFile文件

执行流程:

DockerFile构建过程解析小总结:

1、dokcerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本
案例:

2、构建三步骤:
a、编写DockerFile文件
FROM centos
ENV mypath /usr/local
WORKERDIR $mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash

b、docker build

c、docker run

pwd后,进入的是自定义的落脚点

即落脚点生效
命令解释:
1、DockerFile中可以有多个CMD指令,但只有最后一个CMD生效,CMD会被docker run 之后的参数替换

比对tomcat的DockerFile文件可知,在CMD ["catalina.sh","run"]后面加上了CMD ls -l,是将前者给抵消,所以tomcat未启动。

2、ENTRYPOINT
docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合。
制作CMD版本可以查询IP信息的容器



从上面可以看出这个是有问题的。
制作ENTRYPOINT版本的可以查询IP信息的容器

以下就解决了-i的问题

3、命令综合应用
自定义镜像tomcat8
a、编写dockerfile文件
FROM centos
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把Java与tomcat添加到容器中
ADD jdk-8u231-linux-x64.tar.gz /usr/local
ADD apache-tomcat-8.5.47.tar.gz /usr/local
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置Java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.47
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.47
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听时的端口
EXPOSE 8080
#启动运行tomcat
#ENTRYPOINT ["/usr/local/apache-tomcat-8.5.47/bin/startup.sh"]
#CMD ["/usr/local/apache-tomcat-8.5.47/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-8.5.47/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.47/bin/logs/catalina.out

其中COPY与ADD的区别是:
COPY只是单纯的复制,ADD是复制加解压缩
b、build

c、运行(宿主机与容器卷进行双向通信)
docker run -d -p 9080:8080 --name ltm8
-v /mydocker/tomcat9/test:/usr/local/apache-tomcat-8.5.47/webapps/test
-v /mydocker/tomcat9/tomcat9logs:/usr/local/apache-tomcat-8.5.47/logs --privileged=true
tomcat-lxc
运行上述代码可以访问:

暂时告一段落。。。

浙公网安备 33010602011771号