docker之Dockerfile实践

如何选择 Dockerfile 的放置方式 取决于项目架构和使用场景。通过这种方式,可以更灵活地适应单体项目、微服务和混合项目的需求。放在项目根目录下还是为每个应用服务单独创建。 阅读详情

Dockerfile中的一系列指令

首先熟悉下配置信息

Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建
  通过使用build命令,根据Dockerfiel的描述来构建镜像
  通过源代码路径的方式
  通过标准输入流的方式

通过源代码路径
  Dockerfile需要放置在项目的根目录位置
  在构建的时候,Dockerfile client会把整个context打包发送到Docker Server端,然后由server端负责build镜像,在构建成功后,会删除context目录
  docker build -t {镜像名字} {项目路径可以是相对路径}
  docker利用Dockerfile来构建新镜像之前,先来了解一下Dockerfile创建中使用到的指令

通过标准输入流:

通过标准输入流的方式获取Dockerfile的内容
  client不会打包上传context目录,因此对于一些ADD、COPY等涉及host本地文件复制的操作不能够支持
  docker build -t {镜像名字} - < Dockerfile路径

build cache:
  Dockerfile中的每一个指令执行完毕后,都会提交为一个image,这样保证了指令之间不会有影响
  Dockerfile会尽可能尝试重用之前已经构建的镜像
  可以通过在build命令中增加–no-cache的方式来禁用这个cache

Dockerfile指令:
  只支持Docker自己定义的一套指令,不支持自定义
  大小写不敏感,但是建议全部使用大写
  根据Dockerfile的内容顺序执行

FROM:
  FROM {base镜像}
  必须放在DOckerfile的第一行,表示从哪个baseimage开始构建

MAINTAINER:
  可选的,用来标识image作者的地方

RUN:
  每一个RUN指令都会是在一个新的container里面运行,并提交为一个image作为下一个RUN的base
  一个Dockerfile中可以包含多个RUN,按定义顺序执行
  RUN支持两种运行方式:
    RUN 这个会当作/bin/sh -c “cmd” 运行
    RUN [“executable”,“arg1”,。。],Docker把他当作json的顺序来解析,因此必须使用双引号,而且executable需要是完整路径

RUN 都是启动一个容器、执行命令、然后提交存储层文件变更。第一层 RUN command1 的执行仅仅是当前进程,一个内存上的变化而已,其结果不会造成任何文件。而到第二层的时候,启动的是一个全新的容器,跟第一层的容器更完全没关系,自然不可能继承前一层构建过程中的内存变化。而如果需要将两条命令或者多条命令联合起来执行需要加上&&。如:cd /usr/local/src && wget xxxxxxx

CMD:
  CMD的作用是作为执行container时候的默认行为(容器默认的启动命令)
  当运行container的时候声明了command,则不再用image中的CMD默认所定义的命令
  一个Dockerfile中只能有一个有效的CMD,当定义多个CMD的时候,只有最后一个才会起作用

CMD定义的三种方式:
  CMD 这个会当作/bin/sh -c "cmd"来执行
  CMD [“executable”,“arg1”,…]
  CMD [“arg1”,“arg2”],这个时候CMD作为ENTRYPOINT的参数

EXPOSE 声明端口
  格式为 EXPOSE <端口1> [<端口2>…]。

EXPOSE 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

entrypoint:
  entrypoint的作用是,把整个container变成了一个可执行的文件,这样不能够通过替换CMD的方法来改变创建container的方式。但是可以通过参数传递的方法影响到container内部
  每个Dockerfile只能够包含一个entrypoint,多个entrypoint只有最后一个有效
  当定义了entrypoint以后,CMD只能够作为参数进行传递

entrypoint定义方式:
  entrypoint [“executable”,“arg1”,“arg2”],这种定义方式下,CMD可以通过json的方式来定义entrypoint的参数,可以通过在运行container的时候通过指定command的方式传递参数
  entrypoint ,当作/bin/bash -c "cmd"运行命令

ADD & COPY:
  当在源代码构建的方式下,可以通过ADD和COPY的方式,把host上的文件或者目录复制到image中
  ADD和COPY的源必须在context路径下
  当src为网络URL的情况下,ADD指令可以把它下载到dest的指定位置,这个在任何build的方式下都可以work
  ADD相对COPY还有一个多的功能,能够进行自动解压压缩包

ENV:
  ENV key value
  用来设置环境变量,后续的RUN可以使用它所创建的环境变量
  当创建基于该镜像的container的时候,会自动拥有设置的环境变量

WORKDIR:
  用来指定当前工作目录(或者称为当前目录)
  当使用相对目录的情况下,采用上一个WORKDIR指定的目录作为基准

USER:
  指定UID或者username,来决定运行RUN指令的用户

ONBUILD:
  ONBUILD作为一个trigger的标记,可以用来trigger任何Dockerfile中的指令
  可以定义多个ONBUILD指令
  当下一个镜像B使用镜像A作为base的时候,在FROM A指令前,会先按照顺序执行在构建A时候定义的ONBUILD指令
  ONBUILD <DOCKERFILE 指令>

VOLUME:
  用来创建一个在容器和主机之间的共享文件夹;因为容器内的文件再关闭和销毁后就不存在了,因此文件数据持久化就需要把数据保存到容器外的主机磁盘上;
  运行使用json array的方式定义多个volume
  VOLUME [“/var/data1”,“/var/data2”]
  或者plain text的情况下定义多个VOLUME指令

使用dockerfile构建springboot-demo

Dockerfile

FROM openjdk:8-jdk-alpine
MAINTAINER bamoo
ADD springboot-demo.jar springboot-demo.jar
RUN echo "Asia/Shanghai" >/etc/timezone
RUN sh -c 'touch /springboot-demo.jar'
ENV JAVA_OPTS=""
CMD exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /springboot-demo.jar
EXPOSE 8000


#构建镜像
docker build . -t springboot-demo:v1 -f Dockerfile

#查看镜像
docker images
REPOSITORY                                                        TAG                 IMAGE ID            CREATED             SIZE
springboot-demo                                                   v1                  3ed4b8bc215f        26 minutes ago      140MB

这样我们就构建好了一个springboot的简单镜像
运行这个镜像到容器中

docker run -d -p 8000:8000  --name demo-test springboot-demo:v1
#查看镜像容器进程是否启动
docker ps -a

#直接本地访问,返回数据运行正常
curl  localhost:8000
hallo springboot

Dockerfile使用教程:实现nginx镜像和启动容器

[root@docker ~]# mkdir docker_demo
[root@docker ~]# cd docker_demo/
[root@docker docker_demo]# touch Dockerfile
[root@docker docker_demo]# pwd
/root/docker_demo

开始编写Dockerfile文件了(注意Dockerfile的D需要大写)

# base image
FROM centos
# MAINTAINER
MAINTAINER zjcjava@163.com
# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx
# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2
# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install


ENV PATH /usr/local/nginx/sbin:$PATH

EXPOSE 80

执行docker build进行构建:

docker build -t centos_nginx:v1 .

后面的.代表的是相对路径的当前目录,如果需要全路径则为/root/docker_demo(就是找到Dockerfile文件)

查看新构建的镜像:

 docker images         
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
centos_nginx           v1                  78d18f16e757        4 hours ago         464MB

然后使用构建的镜像启动一个container并开启nginx服务:

docker run -d -p80:80 centos_nginx:v1 /usr/local/nginx/sbin/nginx -g "daemon off;"

如果设置了ENV环境变量指令ENV PATH /usr/local/nginx/sbin:$PATH,则可以缩写成下面的启动方式

 docker run -d -p81:80 centos_nginx:v1 nginx -g "daemon off;"

查看端口映射信息:

[root@docker docker_demo]# docker port e4b6e4846ded
80/tcp -> 0.0.0.0:80

CMD指令
EXPOSE 80下面一行添加如下指令则 启动命令则省略了bath命令

CMD /bin/sh -c 'nginx -g "daemon off;"'


然后进行构建:
[root@docker docker_demo]# docker build -t centos_nginx:v3 .

基于v3版本的镜像启动一个container,则可以看到省略了bath相关的参数指令
 docker run -d -p82:80 centos_nginx:v3 

ocker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
d988c04d04f4        centos_nginx:v3     "/bin/sh -c '/bin/..."   6 seconds ago       Up 5 seconds        0.0.0.0:82->80/tcp   optimistic_saha

CMD表示当启动一个container时默认运行的命令,如果在启动container时赋予了command的参数的话,那么
定义的CMD中的命令将不会被执行,而会去执行command的命令;如果省略了的话则直接执行CMD指令

当ENTRYPOINT和CMD连用
修改指令CMD如下

ENTRYPOINT ["nginx"]

CMD ["-g","daemon off;"]

CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g “daemon off;”
而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)

构建v4版本
 docker build -t centos_nginx:v4 .

为v4版本的镜像启动一个container:
 docker run -d -p83:80 centos_nginx:v4 

VOLUME指令:
给容器添加磁盘卷,容器和主机之间共用file目录,方便文件存放

完整版如下:

[root@docker docker_demo]# cat Dockerfile 
# base image
FROM centos

# MAINTAINER
MAINTAINER zjcjava@163.com

# put nginx-1.12.2.tar.gz into /usr/local/src and unpack nginx
ADD nginx-1.12.2.tar.gz /usr/local/src

# running required command
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel 
RUN yum install -y libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

# mount a dir to container
VOLUME ["/data"]

# change dir to /usr/local/src/nginx-1.12.2
WORKDIR /usr/local/src/nginx-1.12.2

# execute command to compile nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio  --with-http_ssl_module  --with-http_realip_module    --with-http_addition_module    --with-http_xslt_module   --with-http_image_filter_module    --with-http_geoip_module  --with-http_sub_module  --with-http_dav_module --with-http_flv_module    --with-http_mp4_module --with-http_gunzip_module  --with-http_gzip_static_module  --with-http_auth_request_module  --with-http_random_index_module   --with-http_secure_link_module   --with-http_degradation_module   --with-http_stub_status_module && make && make install

# setup PATH
ENV PATH /usr/local/nginx/sbin:$PATH

# EXPOSE
EXPOSE 80

# the command of entrypoint
ENTRYPOINT ["nginx"]

CMD ["-g"]

重新构建并启动容器

docker build -t centos_nginx:v6 .
docker run -d -p 86:80 --name=nginx6 centos_nginx:v6 -g "daemon off;"

利用docker exec进入到container中,查看是否存在卷/data:这个/data挂载的目录对应本机host的这个目录

Dockerfile之mysql

方式1:直接使用docker镜像

docker 安装 mysql 8 版本

# docker 中下载 mysql
docker pull mysql

#启动
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Lzslov123! -d mysql

#进入容器
docker exec -it mysql bash

#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lzslov123!';

#添加远程登录用户
CREATE USER 'liaozesong'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'liaozesong'@'%';

方法2使用dockerfile安装

[root@docker mysql]# cat Dockerfile 
FROM centos

MAINTAINER json_hc@163.com

COPY MariaDB-10.0.33-centos7-x86_64-client.rpm /root/MariaDB-10.0.33-centos7-x86_64-client.rpm
COPY MariaDB-10.0.33-centos7-x86_64-common.rpm /root/MariaDB-10.0.33-centos7-x86_64-common.rpm 
COPY MariaDB-10.0.33-centos7-x86_64-compat.rpm  /root/MariaDB-10.0.33-centos7-x86_64-compat.rpm
COPY MariaDB-10.0.33-centos7-x86_64-server.rpm  /root/MariaDB-10.0.33-centos7-x86_64-server.rpm
WORKDIR /root
RUN yum remove mysql-libs -y
RUN yum -y install *.rpm
ADD business.sql /root/business.sql
ADD server.cnf /etc/my.cnf.d/server.cnf
ADD setup.sh /root/setup.sh

RUN yum clean all
RUN chmod +x /root/setup.sh
EXPOSE 3306

CMD ["/root/setup.sh"]

参考资料

docker之Dockerfile实践
https://www.cnblogs.com/jsonhc/p/7767669.html

Docker:3、基于龙晰 (Anolis OS 8.8 )的 openssl更新/升级(升级到 openssl 1.1.1.w) 本文基于龙晰操作系统(Anolis OS),它是在Docker模式下对 openssl 进行的升级安装。 阅读详情

相关推荐

docker入门之Dockerfile最佳实践

文档:Best practices for writing Dockerfiles | Docker Documentation 1.简介 Docker 通过从一个包含构建命令的 Dockerfile 文件中读取指令来自动构建镜像。 Dockerfile遵循特定格式和指令集。 2.镜像层 Docker 镜像由只读层组成,每个层代表一个 Dockerfile 指令。 这些层是堆叠的,每一层都是前一层变化的增量。 # syntax=docker/dockerfile:1 FROM

蛐蛐的博客 728

docker之Dockerfile指令介绍

Docker通过对于在Dockerfile中的一系列指令的顺序解析实现自动的image的构建   通过使用build命令,根据Dockerfiel的描述来构建镜像   通过源代码路径的方式   通过标准输入流的方式 通过源代码路径   Dockerfile需要放置在项目的根目录位置   在构建的时候,Dockerfile client会把整个context打包发送到Docke...

weixin_30362801的博客 257

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 796

Docker(二)

Dockerfile详解 学习Docker,手写Dockerfile是非常重要的,今天让我们一起学习Dockerfile中的常用命令(Dockerfile命令全是大写)。 FROM 功能为指定基础镜像,并且必须是第一条指令。 如果不以任何镜像为基础,那么写法为:FROM scratch。 同时意味着接下来所写的指令将作为镜像的第一层开始。 语法: FROM &amp;lt;image&amp;gt; FROM &amp;...

晴天 353

尚硅谷Redis 7学习笔记

尚硅谷Redis 7学习笔记

不更了,主打一个陪伴 2万+

保姆级教程:2026版Windows电脑换新,微信QQ聊天记录无损搬家(附路径修改避坑指南)

本文提供2026版Windows电脑换新时微信QQ聊天记录无损迁移的保姆级教程,涵盖最新版微信/QQ的存储路径修改和避坑指南。通过详细步骤和实战技巧,确保数据迁移过程中不丢失任何珍贵对话记录和文件,特别适合需要保留完整聊天记录的用户。

weixin_42629815的博客 2476

docker build高效利用cache

原文链接:docker build高效利用cache 前言 Dockerfile 可以通过docker build命令构建为一个新的镜像,Dockerfile 中每一条命令都会构建出一个新的镜像层。当你重新build相同的Docker时,Docker会逐条语句check自身的cache镜像层,如果命中相同的,就使用cache而不执行这条语句继续往下逐条check直至build完成。Docker...

jeorch的博客 5585

VMware虚拟机的安装教程

VMware 虚拟机的备份与恢复是保障数据安全和业务连续性的重要措施。综上所述,VMware 虚拟机的备份与恢复策略有多种选择,企业和用户可以根据实际需求和资源情况选择适合自己的方案,以确保虚拟机数据的安全和业务的连续性。

huanghm88的专栏 2938

Docker COPY:Dockerfile最佳实践

      具有两个类似Dockerfile指令,COPY并且ADD,这两者都用于为包括在文件中的图像。本文将解释为什么最佳实践是使用COPY而不是ADD,除非您想要将本地tar文件自动提取到图像中。 使用COPY的最佳做法 为什么你不应该使用ADD 什么时候可以使用ADD 了解更多 使用COPY的最佳做法 此Dockerfile指令将一个或多个本地文件或文件夹复制到Docke...

十年互联网开发老兵,陪你一起学技术 3069

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 207

【Apache Paimon】-- 13 -- 利用 paimon-flink-action 同步 mysql 表数据

在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式(1)人工通知(比如常规的使用邮件),然后运维人员手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hive 的外部表和内部表 schema那么现在,有了 Paimon ,我们可以利用其特性,自动识别并同步 DDL 这些变化,并同步至 hive 的 paimon 格式表中。

欢迎来到我的博客,一起探索代码里的世界! 1248

【Docker】附录四:Dockerfile 最佳实践 & 如何调试 Docker

.正函数.的博客 2032

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

Docker镜像构建:Dockerfile最佳实践

本文详细阐述了 Docker 镜像构建中的 Dockerfile 最佳实践,包括选择基础镜像、编写指令、优化构建过程、安全性考虑和维护与监控等方面。通过遵循这些最佳实践,开发者可以编写出高效、安全的 Dockerfile,提高软件交付的质量和效率。自动化构建:研究如何自动化构建过程,提高构建速度和稳定性。安全性:持续关注容器安全领域的研究,及时更新 Dockerfile,提高镜像的安全性。性能优化:深入研究 Docker 镜像性能优化方法,提高容器运行效率。

2501_92487701的博客 930

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Docker(十八)Dockerfile 最佳实践

Dockerfile 最佳实践 #一般性的指南和建议 #容器应该是短暂的 通过Dockerfile构建的镜像所启动的容器应该尽可能短暂(生命周期短)。「短暂」意味着可以停止和销毁容器,并且创建一个新容器并部署好所需的设置和配置工作量应该是极小的。 #使用.dockerignore文件 使用Dockerfile构建镜像时最好是将Dockerfile放置在一个新建的空目录下。...

java_shm的专栏 637

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Docker】-Docker Compose+Dockerfile最佳实践

在实际生产环境中,Docker Compose + Dockerfile 的最佳实践通常包括以下几部分: 1️⃣ 示例 🔹 后端 () 🔹 前端 () 2️⃣ 3️⃣ 文件(可选) 这样 可以引用环境变量: 4️⃣ 使用 Docker Compose 部署 1️⃣ 构建镜像 2️⃣ 启动服务 3️⃣ 查看日志 4️⃣ 重新启动某个服务 5️⃣ 进入容器 6️⃣ 停止并删除所有容器 🔹 最佳实践总结 ✅ 使用 构建镜像,避免 直接拉取外部镜像 ✅ 使用 确保服

前鼻音的博客 729

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Docker COPY: Dockerfile 最佳实践

Docker有两个类似的Dockerfile指令,COPY 和 ADD,它们都用于在镜像中导入文件,本文将解释为什么最好使用COPY而不是ADD,除非您想要将本地tar包自动提取到镜像中。 使用 COPY 指令的最佳实践 此 Dockerfile 指令将一个或多个本地文件或文件夹复制到目标的 docker 镜像中去。 COPY &lt;source&gt;… &lt;destination&gt...

liyouzhi666的博客 4万+

docker:Dockerfile的制作以及最佳实践

文章目录背景语法FROMLABELRUNWORKDIRADD和COPYENVVOLUME 和 EXPOSECMD 和 ENTRYPOINT资料 背景 在 docker:镜像image的使用 中我们知道,创建镜像的方式可以用 Dockerfile,那今天就来详细看看 Dockerfile 的语法。 语法 FROM 尽量使用官方的 image 作为 base image 举例: # 从零开始 FROM scratch # 从官方的centos作为base image FROM centos # 从官方的ubun

分享前端开发工程师的一些日常生活、前端知识点、职业发展、对一些问题的看法、感悟等等 463

Docker入门:概念、命令行、Dockerfile及小实践一则

Docker是一种基于容器虚拟化技术的平台即服务(PaaS)产品,能够将应用及其依赖打包为轻量级、可移植的容器。相比传统虚拟机,Docker采用操作系统级虚拟化,具有更高性能和资源利用率。Docker的核心概念包括镜像(只读模板)、容器(运行实例)和仓库(镜像存储)。通过Docker解决环境配置问题,提高开发部署效率。文章以Node.js应用为例,展示了使用Dockerfile构建镜像并运行容器的完整流程,包括基础指令如FROM、COPY、CMD等。

将登太行雪满山 1230

docker之Dockerfile实践用dockerfile构建nginx环境

docker之Dockerfile实践上一篇介绍了Dockerfile中使用的指令,现在开始进行指令实践先查看下本地的镜像,选一个作为base image:[root@docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wad...

wuapeng的博客 4万+

Docker Dockerfile 最佳实践

官方资料加上自己的一点理解。 准则与建议 容器应该是短暂的 「短暂」意味着可以你可以很容易的停止、销毁、并创建你的容器。并且创建一个容器并部署好的所需的设置和配置工作量应该是极小的。 容器模型是进程而不是虚拟机,不需要开机初始化。在需要时运行,不需要时停止。能够删除后重建,并无需额外的配置。 比如,我们把数据目录、配置文件目录、缓存目录等应该都以数据卷、挂载主机目录或匿名卷的方式进行保存,这样你的容器就成为了一个无状态化的容器。重启、销毁、创建容器都是最简单的操作,无需进行额外的配置。 可以参考十二因

upupup_every的博客 311

【Docker】docker build与Dockerfile的实践

基础 docker build * 命令用于使用 Dockerfile 创建镜像;Dockerfile可以是本地的、也可以是在线的、自定义的; 语法 docker build [OPTIONS] PATH | URL | - OPTIONS参数说明: --build-arg=[] :设置镜像创建时的变量; --cpu-shares :设置 cpu 使用权重; --cpu-period :限制 ...

2025 热爱与开始 2646

Docker之Dockerfile实践

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 官网 构建步骤: 1、编写Dockerfile文件 2、ocker build命令构建镜像 3、docker run依镜像运行容器实例 Dockerfile内容指令知识 1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2、指令按照从上到下,顺序执行 3、#表示注释 4、每条指令都会创建一个新的镜像层并对镜像进行提交 Docker执行Dockerfile的大致流程 1、docker从基础

Lifelong learning 830

Docker 手册(三):Dockerfile 最佳实践

使用.dockerignore 文件.dockerignore类似于git的.gitignore文件,在其中指定构建镜像时需要忽略的文件或目录。避免安装不必要的软件包目的是降低复杂性、依赖性、文件大小以及构建时间。每个容器都只跑一个进程在大多数情况下,每个容器应该只单独跑一个程序。解耦应用到多个容器使其更容易横向扩展和重用。最小化层每执行一条指令,都会有一次镜像的提交。镜...

公众号/简说基因,知乎/简宝玉 228

在 Docker 上开发应用 - 编写 Dockerfile 的最佳实践

原文地址Docker 可以通过从 Dockerfile 中读取指令来自动构建镜像,Dockerfile 是一个文本文件,其中包含了按顺序排列的构建指定镜像所需的全部命令。Dockerfiles 采用特殊格式,使用一系列特别的指令。可以在 Dockerfile 参考页面 学习这些基础知识。如果对于编写 Dockerfile 你还是新手,那么接着往下看吧。本文档介绍了由 Docker 公司和 Docke

kikajack的博客 2268
上一篇: 搭建企业级私有仓库harbor并上传自己的镜像
下一篇: HTTP与HTTPS的区别
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值