Docker-Dockerfile 梦里梦外; 2023-02-18 01:42 17阅读 0赞 ### 什么是 Dockerfile? ### Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 **FROM 和 RUN 指令的作用** **FROM**:定制的镜像都是基于 FROM 的镜像,这里的 openjdk 就是定制需要的基础镜像。后续的操作都是基于 openjdk 指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令 FROM <image> \[AS <name>\] 指定从一个镜像构建起一个新的镜像名字 FROM <image>\[:<tag>\] \[AS <name>\] 指定镜像的版本 Tag 示例:FROM mysql:5.0 AS database MAINTAINER: 镜像维护人的信息 MAINTAINER <name> 示例:MAINTAINER Jartto Jartto@qq.com RUN: 构建镜像时要执行的命令 RUN <command> 示例:RUN \["executable", "param1", "param2"\] ADD: 将本地的文件添加复制到容器中去,压缩包会解压,可以访问网络上的文件,会自动下载 ADD <src> <dest> 示例:ADD \*.js /app 添加 js 文件到容器中的 app 目录下 COPY: 功能和 ADD 一样,只是复制,不会解压或者下载文件 CMD: 启动容器后执行的命令,和 RUN 不一样,RUN 是在构建镜像是要运行的命令 当使用 docker run 运行容器的时候,这个可以在命令行被覆盖 示例:CMD \["executable", "param1", "param2"\] ENTRYPOINT: 也是执行命令,和 CMD 一样,只是这个命令不会被命令行覆盖 ENTRYPOINT \["executable", "param1", "param2"\] 示例:ENTRYPOINT \["donnet", "myapp.dll"\] LABEL:为镜像添加元数据,key-value 形式 LABEL <key>=<value> <key>=<value> ... 示例:LABEL version="1.0" description="这是一个web应用" ENV:设置环境变量,有些容器运行时会需要某些环境变量 ENV <key> <value> 一次设置一个环境变量 ENV <key>=<value> <key>=<value> <key>=<value> 设置多个环境变量 示例:ENV JAVA\_HOME /usr/java1.8/ EXPOSE:指明了镜像运行时的容器必须监听指定的端口 暴露对外的端口(容器内部程序的端口,虽然会和宿主机的一样,但是其实是两个端口) EXPOSE <port> 示例:EXPOSE 80 容器运行时,需要用 -p 映射外部端口才能访问到容器内的端口 VOLUME:指定数据持久化的目录,官方语言叫做挂载 VOLUME /var/log 指定容器中需要被挂载的目录,会把这个目录映射到宿主机的一个随机目录上,实现数据的持久化和同步。 VOLUME \["/var/log","/var/test".....\] 指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步 VOLUME /var/data var/log 指定容器中的 var/log 目录挂载到宿主机上的 /var/data 目录,这种形式可以手动指定宿主机上的目录 WORKDIR:设置工作目录,设置之后 ,RUN、CMD、COPY、ADD 的工作目录都会同步变更 WORKDIR <path> 示例:WORKDIR /app/test USER:指定运行命令时所使用的用户,为了安全和权限起见,根据要执行的命令选择不同用户 USER <user>:\[<group>\] 示例:USER test ARG:设置构建镜像是要传递的参数 ARG <name>\[=<value>\] ARG name=sss FROM nginx COPY dist/ /usr/share/nginx/html/ COPY default.conf /etc/nginx/conf.d/default.conf 我们逐行解释一下代码: FROM nginx 指定该镜像是基于 nginx:latest 镜像而构建的; COPY dist/ /usr/share/nginx/html/ 命令的意思是将项目根目录下 dist 文件夹中的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下; COPY default.conf /etc/nginx/conf.d/default.conf 将 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配置。 ### 常用的11 个命令 ### ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70][] 在我的项目中创建两个文件: 位置:和src同一目录 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70 1][] 文件一(build.sh): #!/usr/bin/env bash mvn clean package -Dmaven.test.skip=true docker build -t jenkins:latest . **注意**:最后的 . 代表本次执行的上下文路径 上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。 **解析**:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。 如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。 上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。 文件二(Dockerfile): FROM openjdk:oraclelinux7 COPY target/jenkins-0.0.1-SNAPSHOT.jar /jenkins.jar ENTRYPOINT ["java","-jar","-Dspring.profiles.active=dev","/jenkins.jar"] 第一步: 1.拉取代码,进入到项目下一级,执行build.sh脚本 2.执行 docker run -it -p 8088:8088 jenkins:latest 效果: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70 2][] ![20200615034405889.png][] 学习总结: docker pull openjdk:7-jre docker images|grep jdk docker run -it --entrypoint bash openjdk:7-jre docker build -t eshop-server:latest . docker pull python:3.6 python -V 查看python版本 docker run -it --entrypoint bash python:3.6 uname -a 查看系统内核 docker run -it eshop-server:latest --redis.address=127.0.0.1 docker-compose up -d docker-compose up -d eshop-server-service 单独启动一个服务 java -jar -tf eshop-server.jar 查看jar包里面的文件内容 docker ps|grep user docker exec -it contained bash curl eshop-server-service:9090 学习参考资料:[https://www.runoob.com/docker/docker-dockerfile.html][https_www.runoob.com_docker_docker-dockerfile.html] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70]: https://img-blog.csdnimg.cn/20200814103426852.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70 1]: https://img-blog.csdnimg.cn/20200615034124870.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz,size_16,color_FFFFFF,t_70 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz_size_16_color_FFFFFF_t_70 2]: https://img-blog.csdnimg.cn/20200615034211210.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JpanU0NzEz,size_16,color_FFFFFF,t_70 [20200615034405889.png]: https://img-blog.csdnimg.cn/20200615034405889.png [https_www.runoob.com_docker_docker-dockerfile.html]: https://www.runoob.com/docker/docker-dockerfile.html
还没有评论,来说两句吧...