Dockerfile编写 从入门到入土(:=)

2024-03-29 03:32

本文主要是介绍Dockerfile编写 从入门到入土(:=),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

    • @[TOC](前言) Dockerfile操作指令
    • 使用Dockerfile编写SSH免密登录容器
    • 使用Dockerfile创建Nginx容器
    • 使用Dockerfile创建Tomcat镜像容器
    • 注:ENTRYPOINT与CMD的区别

Dockerfile操作指令

FROM 镜像
指定新镜像所基于的镜像,第一条指令必须为FROM指令,
每创建一个镜像就需要一条FROM指令。

MAINTAINER 名字
说明新镜像的维护人信息

RUN命令
在所基于的镜像上执行命令,并提交到新的镜像中

CMD[ “要运行的程序“,”参数1,“参数2 “]
指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行

EXPOSE 端口号
指定新镜像加载到Docker时要开启的端口

ENV 环境变量 变量值
设置一个环境变量的值,会被后面的RUN使用

ADD源文件/目录 目标文件/目录
将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL

COPY 源文件/目录 目标文件/目录
将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

VOLUME[ “目录 “]
在容器中创建一个挂载点

USER 用户名/UID
指定运行容器时的用户

WORKDIR 路径
为后续的RUN、CMD、ENTRYPOINT指定工作目录

ONBUILD 命令
指定所生成的镜像作为一个基础镜像时所要运行的命令

HEALTHCHECK
健康检查

使用Dockerfile编写SSH免密登录容器

mkdir ssh
cd ssh
vim Dockerfile
FROM centos:7  #FROM指定基础镜像 如果本地没有 会从公共库自动下载
MAINTAINER ssh #可以指定说明和作者
RUN yum -y update #升级yum库
RUN yum -y install openssh* net-tools lsof telnet passwd #安装ssh和用到的工具包
RUN echo '12345' | passwd --stdin root #更改容器的root密码
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN sed -i '/^session\s\+required\s\+pam_loginuid.so/s/^/#/' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh  
EXPOSE 22 #开放22号端口
CMD ["/usr/sbin/sshd","-D"] #开启服务并关闭守护进程
保存退出
docker build -t ssh:centos7 .
docker run -d -P ssh:centos7

使用Dockerfile创建Nginx容器

mkdir nginx
cd nginx
vim Dockerfile
FROM centos:7
MAINTAINER this is nginx
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make #安装环境包
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src #复制安装包到容器中
WORKDIR /usr/local/src
WORKDIR nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install #&&的意思是上一条执行完才能执行下一条 如果执行失败则不执行下一条
ENV PATH /usr/local/nginx/sbin:$PATH #设置环境变量
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
CMD ["/run.sh"]
保存退出
vi run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
保存退出
docker build -t Nginx:centos7 .
docker run -d -P Nginx:centos7

使用Dockerfile创建Tomcat镜像容器

FROM centos:7
MAINTAINER this is tomcat
ADD jdk-8u91-linux-x64.tar.gz /usr/local/src
WORKDIR /usr/local/src/
RUN mv jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar #指定java程序运行时所需要调用的类别库
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat8
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat8/bin/catalina.sh","run"]
保存退出
docker build -t Tomcat:centos7 .
docker run -d -P Tomcat:centos7

注:ENTRYPOINT与CMD的区别

  • 在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准
  • 在Dockerfile中,只能有一个CMD指令,如果有多个CMD指令则以最后一个为准
  • 在Dockerfile中,ENTRYPOINT指令或CMD指令,至少必有其

执行docker run如果带有其他命令参数,不会覆盖ENTRYPOINT指令
但是 docker run的–entrypoint可以覆盖Dockerfile中ENTRYPOINT设置的命令

这篇关于Dockerfile编写 从入门到入土(:=)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857481

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo