前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >dockerfile

dockerfile

作者头像
赤蓝紫
发布于 2023-03-16 07:29:29
发布于 2023-03-16 07:29:29
85100
代码可运行
举报
文章被收录于专栏:clzclz
运行总次数:0
代码可运行

编写Dockerfile文件

Dockerfile作用就是制作镜像,保持开发,测试,生产环境的一致性。

Dockerfile文件

\color{red}Dockerfile文件没有后缀,和hosts文件类似

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Version 0.1 

# 基础镜像
FROM ubuntu:latest 

# 维护者信息
MAINTAINER shiyanlou@shiyanlou.com 

# 镜像操作命令
RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean 

# 容器启动命令
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Dockerfile一般包含下面几个部分:

基础镜像:以哪个镜像作为基础进行制作。FROM 基础镜像

维护者信息:写下改Dockerfile编写人的姓名/邮箱。MAINTAINER 姓名/邮箱

镜像操作命令:对基础镜像要进行的改造命令,如安装新的软件,进行哪些特殊配置等。常见的是RUN命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RUN命令默认使用/bin/sh Shell执行,默认为root权限。
如果命令过长需要换行,需要在行末尾加\。

容器启动命令:当基于改镜像的容器启动时需要执行哪些命令,常见的是CMD命令和ENTRYPOINT命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CMD命令也是默认在/bin/sh中执行,并且默认只能有一条,
如果是多条CMD命令则只有最后一条执行。
用户也可以在docker run命令创建容器时指定新的CMD命令来覆盖Dockerfile里的CMD

创建镜像

docker build 命令用于使用 Dockerfile 创建镜像。

-t:镜像名以及Tag

去到Dockerfile所在目录,执行命令docker build -t shiyanlou:0.1 .

\color{red}后面有.,表示使用当前目录的Dockerfile创建镜像

也可以通过参数-f来指定要使用的Dockerfile路径。

创建并启动容器

docker run -p 5000:80 --name web shiyanlou:0.1

将容器的80端口映射给主机的5000端口,之后就能通过5000端口访问

Dockerfile编写常用命令

做个记录,以后可能会用到

  1. 指定容器运行的用户:USER clzczh。该用户会作为之后的RUN命令执行的用户。
  2. 指定后续命令的执行目录:WORKDIR /var/www/html。将启动后的工作目录切换到/var/www/html目录
  3. 对外连接端口号:EXPOSE 80。将内部服务的80端口暴露出来,提供给容器间互联使用
  4. 设置容器主机名:ENV HOSTNAME web。设置由该镜像创建的容器的主机名为web。
  5. 向镜像中增加文件
    • COPY test.txt /var/www/html,将txt文件拷贝到容器里的/var/ww/html目录中。这里的txt文件是相对路径,指的是相对于Dockerfile的路径。如果Dockerfile在/usr/local目录下,则test.txt的绝对路径就是/usr/local/test.txt
    • ADD html.tar /var/www:将tar包添加到容器指定目录,压缩包会被自动解压为目录。
  6. CMD和ENTRYPOINT ENTRYPOINT 与CMD的区别是不可以被docker run覆盖,会把docker run后面的参数当作传递ENTRYPOINT指令的参数。Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。docker run命令的-entrypoint参数可以把指定的参数继续传递给ENTRYPOINT。
  7. 挂载数据卷:VOLUME ["/var/log/apche2"]。 将apche访问的日志数据存储到宿主机可以访问的数据卷中
  8. 设置容器内的环境变量:如ENV APACHE_RUN_DIR /var/run/apache2 使用ENV设置apache启动的环境变量(个人感觉JS里声明变量类似)

使用 Supervisord

因为CMD只能执行一条指令,所以就没法实现在一个容器中运行多个服务。这个时候就可以使用Supervisord来进行进程管理,方法就是将多个启动命令放入到一个启动脚本中,然后CMD运行该脚本。

安装Supervisord

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RUN apt-get install -yqq supervisor
RUN mkdir -p /var/log/supervisor

然后还需要拷贝配置文件到指定的目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

文件内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[supervisord]
nodaemon=true
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2ctl -D FOREGROUND"

如果有多个服务需要启动可以在文件后继续添加[program:xxx],比如如果有ssh服务,可以增加[program:ssh]。

修改CMD命令,启动Supervisord:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CMD ["/usr/bin/supervisord"]

完整版Dockerfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Version 0.2
# 基础镜像
FROM ubuntu:latest
# 维护者信息
MAINTAINER shiyanlou@shiyanlou.com
# 镜像操作命令
RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean
RUN apt-get install -yqq supervisor
RUN mkdir -p /var/log/supervisor

VOLUME ["/var/log/apche2"]
ADD html.tar /var/www
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

WORKDIR /var/www/html
ENV HOSTNAME shiyanloutest
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apche2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apche2

EXPOSE 80
# 容器启动命令
CMD ["/usr/bin/supervisord"]

supervisord配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[supervisord]
nodaemon=true
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2ctl -D FOREGROUND"

在指定的映像上创建一个容器,然后使用指定的命令启动它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -d -p 5000:80 --name web2 web:0.2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何优雅的编写Dockerfile
在生产环境中一般我们会对基本的环境进行自构建,从而利用images的分层特性去层层构建上层的业务镜像。 1.默认情况下我们会首先构建一个基本的base镜像,这个镜像可能包含了linux具体的发行版本,以及基本的软件包,比如wget,vi等。在该层面上,镜像的改动会很少,频次也会很低。 2.其次我们可以在base镜像之上构建新的平台镜像,比如说ssh,java,tomcat等。在基础环境层,相比较上一层来说修改频次稍微会有点大,因为可能涉及到基本软件的版本调整或者参数调整。 3.然后在可以在基本
BGBiao
2018/02/26
3K0
[Docker Practical learning] 08Docker Run Wordpress
I will add the previous content as soon as possible in the future. Today, learn how dockerfile and docker work through the WordPress container. I will record the following things
韩旭051
2020/06/23
5160
性能环境之docker操作指南6(全网最全)
ubuntu容器内运行着的SSH Server占用22端口,对外为50022端口。
高楼Zee
2019/07/17
7810
3.Docker学习之Dockerfile
描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 用户可以使用Dockerfile快速创建自定义的镜像;通过它所支持的内部指令,以及使用它创建镜像的基本过程,Docker拥有”一点修改代替大量更新”的灵活之处;
全栈工程师修炼指南
2022/09/28
1.4K0
3.Docker学习之Dockerfile
3.Docker学习之Dockerfile
描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 用户可以使用Dockerfile快速创建自定义的镜像;通过它所支持的内部指令,以及使用它创建镜像的基本过程,Docker拥有”一点修改代替大量更新”的灵活之处;
全栈工程师修炼指南
2020/10/23
1.9K0
3.Docker学习之Dockerfile
Dockerfile文件编写官方文档 原
英文原文链接地址: Engine reference–>Dockerfile reference
拓荒者
2019/03/11
1K0
DockerFile简介与实例
Dockerfile是自动构建docker镜像的配置文件,Dockerfile中的命令非常类似linux shell下的命令
字母哥博客
2020/09/23
1.3K0
DockerFile简介与实例
Docker 学习应用篇之三: Docker的简单实用
安装完Docker之后,我们就可以简单的使用Docker,来体会Docker的用处。 首先看下Docker的常用命令,都是我在实用Docker的时候用到的命令:            docker常用命令:            $ docker images //查看所有的镜像            $ docker ps -a //查看所有的容器            $ docker build -t docker_name .//用Dockerfile创建一个名字叫docker_name的镜
ShenduCC
2018/04/27
7370
Docker 学习应用篇之三: Docker的简单实用
Docker配置文件Dockerfile详解
image.png Dockerfile是用来创建新镜像的配置文件,和部署配置文件概念类似,例如 ant,通过执行一系列的指令来完成任务 Dockerfile分为四部分: (1)基础镜像信息 (2)维护者信息 (3)镜像操作指令 (4)容器启动时执行指令 示例 FROM ubuntu MAINTAINER docker_user docker_user@email.com RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe
dys
2018/04/02
1.8K0
Docker配置文件Dockerfile详解
Dockerfile 指令
1、Dockerfile基本结构 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。
小手冰凉
2020/08/06
5120
Dockerfile 指令
Dockerfile构建PHP,Nginx,Composer,lnmp环境
之前在博文中有说过用docker搭建php环境,但那是用官方镜像,然后多个容器关联,开发起来其实很不方便,那么如何使用Dockerfile构建一个PHP环境呢,为方便移植,快速构建PHP环境,今天试着写了个Dockerfile,包含了php、nginx、composer、git基础环境。
子润先生
2021/06/23
1.3K0
Dockerfile的详解
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
Lansonli
2021/10/09
5220
Docker系列学习文章 - 专业化定制镜像dockerfile(六)
| 导语上一篇我们跟大家讲了docker镜像,关于镜像的特点和作用我想大家都明白了。那么如何比较专业的去定制我们需要的镜像呢?用commit?不对,我们说过这个方法比较黑盒。真正专业高大上的方法是用d
宝哥@上云专家
2018/05/07
3.3K11
利用Dockerfile创建指定镜像
Docker 是一种广泛使用的容器化平台,它使用轻量级的容器来打包和部署应用程序。Docker 还提供了一个强大的工具——Dockerfile,通过写 Dockerfile 文件,我们可以定义如何构建 Docker 容器。在本篇文章中,我们将介绍如何使用 Dockerfile 文件来创建指定镜像。
网络技术联盟站
2023/06/05
4.2K0
你必须知道的Dockerfile
本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。
Edison Zhou
2019/08/12
7720
你必须知道的Dockerfile
dockerfile构建PHP开发环境
cron、curl、telnet、git、zlib1g-dev、nginx、supervisor、libzip-dev、unzip、procps、sudo、vim
友儿
2022/09/13
1.2K0
Docker镜像构建知识:Dockerfile 命令详解
FROM 指令用于指定其后构建新镜像所使用的基础镜像。如果本地不存在,则默认会去Docker Hub下载指定镜像。FROM指令必是Dockerfile文件中的首条命令,启动构建流程后,Docker将基于该镜像构建新镜像,FROM后的命令也会基于这个基础镜像。
废柴阿尤
2023/12/18
3.3K0
DockerFile 编译语法详解
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像,本小结首先介绍Dockerfile典型的基本结构和它支持的众多指令,并具体讲解通过这些指令来编写定制镜像的Dockerfile,以及如何生成镜像.最后介绍使用Dockerfile的一些最佳实践经验.
王 瑞
2022/12/28
4310
Dockerfile、Docker-Compose基本命令与介绍
每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像,后续的RUN都在之前RUN提交后的镜像为基础,镜像是分层的,可以通过一个镜像的任何一个历史提交点来创建,类似源码的 版本控制 。
唐成勇
2019/05/26
2K0
【重识云原生】第六章容器6.1.10节——DockerFile解析
        首先通过一张图来了解 Docker 镜像、容器和 Dockerfile 三者之间的关系。
江中散人_Jun
2022/09/30
1.5K0
【重识云原生】第六章容器6.1.10节——DockerFile解析
相关推荐
如何优雅的编写Dockerfile
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验