DockerFile的CMD, ENTRYPOINT指令
简介CMD,ENTRYPOINT都是容器启动的时候,执行执行命令,都支持exec和shell方式
一般用法有两种:①单独一个CMD②先使用ENTRYPOINT(用于执行命令),然后结合CMD使用(用于追加参数)
有多个CMD时,只有最后一个CMD生效
语法一般开发和Docker官方都建议用 exec格式
CMD第一种用法:运行一个可执行的文件并提供参数
1CMD ["executable","param1","param2"]
第二种用法:为ENTRYPOINT指定参数
1CMD ["param1","param2"]
第三种用法(shell格式):是以”/bin/sh -c”的方法执行的命令
1CMD command param1 param2
ENTRYPOINT exec 格式, 推荐
1ENTRYPOINT [“executable”, “param1”, “param2”]
shell 格式
1ENTRYPOINT command param1 param2
使用 ...
DockerFile通过VOLUME指令创建容器卷来实现容器的目录挂载
介绍DockerFile创建镜像时通过VOLUME指令创建几个容器卷,然后创建这个镜像的容器时,这个容器就有了这几个容器卷目录,并与宿主机自动创建的对应目录实现了挂载
实现过程语法1VOLUME['目录1','目录2']
编写DockerFile新建一个文件,命名为:myVolumeDockerFile,没有后缀名,内容如下:
12345FROM centosVOLUME ["/home/v1","/home/v2"]CMD /bin/bash
构建镜像1docker build -f myVolumeDockerFile -t a6678696/mycentos:1.2 .
创建容器1docker run -it 9123279cfb4f
找到挂载的目录①找到容器挂载的容器卷v1,v2
②找到宿主机挂载的容器卷
通过inspect命令获取容器的元数据
1docker inspect 容器id
找到Mounts节点,Source为宿主机的目录,Destination为容器的目录,两个目录是挂载 ...
DockerFile创建镜像时报错:file not found in build context or excluded by
问题描述DockerFile创建镜像时使用COPY和ADD指令时,检测到源文件不存在就会报错
解决办法DockerFile文件和源文件放在同一目录下,并且先进入这个目录再执行创建镜像命令
例如我的DockerFile文件和源文件都在/home/dockerfile目录中(如下图所示),那么我就要进入/home/dockerfile目录,然后执行DockerFile创建镜像的命令
DockerFile构建自定义Tomcat
编写DockerFile新建一个文件,命名为:mytomcatdockerfile,没有后缀名,内容如下:
12345678910111213141516171819202122FROM centosMAINTAINER LeDao<f1203007469@gmail.com> LABEL name="LeDao Tomcat Image" \ build-date="2021-08-22 00:16:53" COPY copyright.txt /home/copyright.txtADD server-jre-8u151-linux-x64.tar.gz /home/ADD apache-tomcat-8.5.37.tar.gz /home/ ENV WORKPATH /home/apache-tomcat-8.5.37/WORKDIR $WORKPATH ENV JAVA_HOME /home/jdk1.8.0_151ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/li ...
DockerFile构建自定义CentOS
编写DockerFile新建一个文件,命名为:mycentosDockerFile,没有后缀名,内容如下:
1234567891011121314FROM centosMAINTAINER ledao<f1203007469@gmail.com>LABEL name="LeDao CentOS Image" \ build-date="2021-08-21"ENV WORKPATH /home/WORKDIR $WORKPATHRUN yum -y install net-toolsRUN yum -y install vimEXPOSE 80CMD /bin/bash
创建镜像命令的最后面有个英文句号.(少了句号不行)
1docker build -f /home/dockerfile/mycentosDockerFile -t a6678696/mycentos:1.1 .
查看镜像构建历史1docker history 镜像id
DockerFile常用指令
DockerFile简介dockerfile用于快速有序且直观地完成对镜像的定制
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建
指令FROMFROM指令是整个Dockerfile的入口,必须是第一条指令。其代表新制作镜像的基础镜像。基础镜像可以自己制作,也可以从开源的仓库pull,例如dockerhub或是国内阿里云的免费仓库。
Docker中存在一种特殊的情况,就是不以任何基础镜像为基准,此时可以第一句话使用:
1FROM scratch
来表示以空白镜像为基础,也就是直接将可执行文件复制进镜像。例如swarm、coreos/etcd等。
RUN指令是dockerfile中最常用的指令之一。用来执行命令行上的命令。RUN的格式分为两种:
第一种:shell格式:RUN<命令>,类似于直接在终端输入命令。例如:
1RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/tom ...
Docker备份和恢复镜像
备份镜像1docker save -o 备份镜像的名称 源镜像名称:tag版本
恢复镜像1docker load -i 镜像文件
Docker安装和配置MySQL容器
创建MySQL容器创建的这个容器只是用来获取文件路径
1docker run --name 自定义名称 -di -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 MySQL镜像id
获取文件路径进入容器的文件夹中
1docker exec -it 容器id /bin/bash
获取conf.d、log、mysql的文件路径,分别如下:
123/etc/mysql/conf.d/var/log/var/lib/mysql
复制文件到宿主机在宿主机的 home 目录下新建 mysql 目录
1mkdir /home/mysql
复制容器里的 /etc/mysql/conf.d、/var/log、/var/lib/mysql到宿主机/home/mysql
复制/etc/mysql/conf.d
1docker cp 容器id:/etc/mysql/conf.d /home/mysql/
复制/var/log
1docker cp 容器id:/var/log /home/mysql/
复制/var/lib/mysql
1docker cp 容器i ...
Docker安装和配置Tomcat容器并部署Java项目
创建Tomcat容器创建的这个容器只是用来获取文件路径
1docker run --name 自定义名称 -di -p 8080:8080 Tomcat镜像id
获取文件路径进入容器的文件夹中
1docker exec -it Tomcat容器id /bin/bash
获取三个文件夹conf、webapps、logs的文件路径
复制文件到宿主机在宿主机的 home 目录下新建 tomcat 目录
1mkdir /home/tomcat
复制容器里的 /usr/local/tomcat/conf、/usr/local/tomcat/webapps 到宿主机/home/tomcat/
复制 /usr/local/tomcat/conf
1docker cp 容器id:/usr/local/tomcat/conf /home/tomcat/
复制 /usr/local/tomcat/webapps
1docker cp 容器id:/usr/local/tomcat/webapps /home/tomcat/
创建新的Tomcat容器这个容器是用来部署Java项目的,创建时挂载 / ...
Docker修改已创建容器的挂载目录
问题描述一般来说,都是创建容器时进行目录挂载,对于已经创建好的容器如果忘了挂载目录但是又想挂载目录
解决办法
提交这个容器为新的镜像,然后创建这个新镜像的容器同时进行目录挂载(此方式较简单)
修改这个容器的配置文件
实现过程提交新镜像再创建容器查看下面两篇博客即可实现修改已创建容器的挂载目录
Docker提交运行时容器为镜像 ,将要挂载目录的已创建容器提交为本地新镜像
Docker创建容器时目录挂载 ,创建容器时使用新镜像的镜像id顺便挂载目录
修改配置文件停止Docker
1systemctl stop docker
配置文件路径
/var/lib/docker/containers/[容器id]
修改配置文件hostconfig.json,在”Binds”节点中增加挂载目录的关系,前面的/home/hData/是宿主机目录,后面的/cData是容器目录,如果是多个用英文逗号隔开
单个目录例子:
1"Binds":["/home/hData/:/cData"]
多个目录例子:
1"Binds":["/ho ...