欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker 基础(四)DockerFile

程序员文章站 2022-06-03 11:34:26
...

DockerFile

初识 DockerFile

用来构建 docker 的命令脚本

每一步为一层

指令大写

vim docekerfile
# 基础镜像
FROM centos						
# 挂载 【匿名挂载】
VOLUME ["volume01","volume02"]
# 输出
CMD echo "------end---------"
# 进入命令行
CMD /bin/bash
# -f 构建镜像的文件路径
# -t 镜像目名
# .  不能忘
docker build -f dockerfile -t fang/centos:1.0 .
后台运行:ctrl + shift +p + q

容器数据同步

docker --volumes-from
同一个文件夹!
docker run -it --name docker01 fang/centos:1.0
docker run -it --name docker02 --volumes-from docker01 fang/centos:1.0
docker run -it --name docker03 --volumes-from docker01 fang/centos:1.0

结论: 删除父容器并不影响子容器,两个子容器数据依然共享

mysql 数据同步【好像不行,mysql文件上锁,会出现已被另一个进程占用的错误】
docker run -d -p 3306:3306 -v /env/mysql/conf:/etc/mysql/conf.d -v /env/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=sasa --name mysql01 mysql:5.7

docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=sasa --name mysql02 --volumes-from mysql01 mysql:5.7

DockerFile构建过程

基础知识

  1. 每个保留的关键字必须是大写字母
  2. 执行从上到下
  3. #表示注释
  4. 每层指令都会提交创建一个新的镜像,并提交

dockerfile是面向开发的,发布项目做镜像,需要编写dockerfile文件,easy

dockerfile 逐渐成为企业交付的标准

dockerimages:通过dockerfile构成的镜像,最终发布产品

docker容器:为镜像运行提供服务器

DockerFile命令

构建镜像命令

FROM		    # 基础镜像,从这里开始构建
MAINTAINER		# 镜像的作者
RUN				# 镜像构建时需要运行的命令
ADD				# 例如 Tomcar.tar.gz 会自动解压
WORKDIR			# 指定镜像的工作目录
VOLUME			# 挂载卷
EXPOSE			# 暴露端口
CMD				# 指定容器启动运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT		# 指定容器启动运行的命令,可以追加命令
ONBUILD			# 当构建一个被继承的 DockerFile 时就会触发 ONBUILD 指令
COPY			# 类似 ADD ,文件拷贝到镜像中
ENV				# 构建设置环境变量

Docker 基础(四)DockerFile

CMD 和 ENTRYPOINT 的区别

CMD				# 指定容器启动运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT		# 指定容器启动运行的命令,可以追加命令
cat dockerfile-test-cmd 
FROM centos
CMD ["ls","-a"]
------------------------------
docker run testcmd
.
..
.dockerenv
bin
dev
-----------------------------
==由于 CMD 命令下 -l 替换了ls -a 命令,所以执行不成功==

docker run testcmd -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
cat dockerfile-test-entyrpoint
FROM centos
ENTRYPOINT ["ls","-a"]
------------------------------
docker run testentrypoint -l
total 0
drwxr-xr-x.   1 root root   6 Oct 30 10:45 .
drwxr-xr-x.   1 root root   6 Oct 30 10:45 ..
-rwxr-xr-x.   1 root root   0 Oct 30 10:45 .dockerenv
lrwxrwxrwx.   1 root root   7 May 11  2019 bin -> usr/bin
drwxr-xr-x.   5 root root 340 Oct 30 10:45 dev
drwxr-xr-x.   1 root root  66 Oct 30 10:45 etc

查看镜像构建过程命令

docker history image

实战测试

创建一个自己的centos
vim mydockerfile

FROM centos
MAINTAINER fang<15151119536>

ENV MYPATH /usr/local
WORKDIR $MYPATH
MAINTAINER fang<15151119536>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools
docker build -f mydockerfile -t diycentos .
Tomcat 镜像
  1. 准备镜像文件 tomcat 压缩包,java 压缩包

    [aaa@qq.com ~]# cd /env/tar/ && ls
    apache-tomcat-9.0.39.tar.gz  jdk-8u261-linux-x64.tar.gz
    
  2. 编写DockerFile文件,官方名Dockerfile,build 时可不写 dockerfile 文件

    vim Dockerfile
    
    FROM centos
    MAINTAINER fang<15151119536>
    
    COPY readme.md /usr/local/readme.md
    
    # ADD 自动解压
    ADD jdk-8u261-linux-x64.tar.gz /usr/local/
    ADD apache-tomcat-9.0.39.tar.gz /usr/local/
    
    RUN yum -y install vim
    RUN yum -y install net-tools
    
    ENV MYPATH /usr/local/
    
    WORKDIR $MYPATH
    
    ENV JAVA_HOME   /usr/local/jdk1.8.0_261
    ENV JRE_HOME    /usr/local/jdk1.8.0_261/jre
    ENV CLASSPATH   .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    
    ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.39
    ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.39
    
    ENV PATH        $PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
    
    EXPOSE 8080
    
    CMD /usr/local/apache-tomcat-9.0.39/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.39/logs/catalina.out