TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 容器技术
  3. 正文

Dockerfile详解

2023年11月23日 883点热度 0人点赞 0条评论

dockerfile

  • 网址:https://docs.docker.com/engine/reference/builder/

    ADD       #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,会自动解压tar.gz格式的压缩包 
    COPY      #用于添加宿主机本地的文件、目录、压缩等资源到镜像里面去,不会解压任何压缩包
    ENV       #设置容器环境变量
    EXPOSE    #声明要把容器的某些端口映射到宿主机
    FROM      #在整个dockfile文件中,除了注释之外的第一行,要是from,用于指定父镜像
    MAINTAINER#设置(镜像的作者信息)
    LABEL     #设置镜像的属性标签
           格式:
          LABEL <key>=<value> <key>=<value> <key>=<value> .......
          LABEL version="1.0"
          LABEL description="This text illustrates \
          that label-values can span multiple lines."
    STOPSIGNAL#指定退出信号
    USER      #指定运行操作的用户
    VOLUME    #创建一个挂载点,用于挂载外部存储,从而将容器中的数据保存至外部存储,避免数据丢失,可以一次创建多个
           格式:
          VOLUME /apps /app2
    WORKDIR   #用于定义工作目录
    RUN       #执行shell命令,但是一定要以非交互式的方式执行
    CMD       #镜像启动为一个容器时候的默认命令或脚本
    ​

1)USER(指定用户)和WORKDIR(指定路径)的使用

`构建一个dockerfile文件`
[root@docker dockerflie]# cat dockerFile
FROM stangj/nginx:curl
USER nginx
WORKDIR /usr/share/nginx/html
`用这个文件build镜像 `
[root@docker dockerflie]# docker build -f dockerFile . -t stangj/nginx:with_user_work
`查看镜像`
[root@docker dockerflie]# docker images 
REPOSITORY     TAG              IMAGE ID       CREATED         SIZE
stangj/nginx   with_user_work   6375b89850a6   3 minutes ago   194MB
stangj/nginx   curl             cda06e54bb40   14 hours ago    194MB
`查看USER和WORKDIR达到的效果`
[root@docker dockerflie]# docker run -it --rm 6375b89850a6 /bin/bash
nginx@0301485db0d4:/usr/share/nginx/html$ who
who     whoami  
nginx@0301485db0d4:/usr/share/nginx/html$ whoami 
nginx
nginx@0301485db0d4:/usr/share/nginx/html$ pwd
/usr/share/nginx/html
​

2)ADD(映射本地文件)和EXPOSE(开放端口和-P使用)的使用

`将index.html文件移动到dockerflie目录`
[root@docker dockerflie]# mv /root/html/index.html .
`构建一个dockerfile文件`
[root@docker dockerflie]# vim dockerFile
FROM stangj/nginx:curl
ADD index.html /usr/share/nginx/html/index.html
EXPOSE 80
`用这个文件build镜像 `
[root@docker dockerflie]# docker build -f dockerFile . -t stangj/nginx:with_ADD_EXPOSE
`查看镜像`
[root@docker dockerflie]# docker images 
REPOSITORY     TAG               IMAGE ID       CREATED          SIZE
stangj/nginx   with_ADD_EXPOSE   9c036e4387e8   2 minutes ago    194MB
stangj/nginx   with_user_work    6375b89850a6   20 minutes ago   194MB
stangj/nginx   curl              cda06e54bb40   15 hours ago     194MB
`查看USER和WORKDIR达到的效果`
[root@docker ]# docker run --rm -it -P stangj/nginx:with_ADD_EXPOSE /bin/bash
'-P:本机随机生成一个端口号和dockerFile的EXPOSE映射'
`启动容器里的nginx,如果不启动nginx外界是访问不到的`
root@641de77cbd47:/# nginx -g "daemon off;"
`重开连接查看`
[root@docker dockerflie]# curl 192.168.139.146:32769
`或者使用-d就不用在容器里面开启nginx`
[root@docker dockerflie]# docker run -d --rm --name nginx_ADD -P stangj/nginx:with_ADD_EXPOSE
[root@docker dockerflie]# curl 192.168.139.146:32772

3)ENV(环境变量)和RUN(在容器运行前执行某一操作)的使用

`构建一个dockerfile文件`
[root@docker dockerflie]# vim dockerFile 
FROM centos:7
ENV VER=9.11.4
RUN yum -y install bind-$VER
`用这个文件build镜像 `
[root@docker dockerflie]# docker build -f dockerFile . -t stangj/centos_bind-9.11.4_env_run
`查看镜像`
[root@docker dockerflie]# docker images 
REPOSITORY                          TAG               IMAGE ID       CREATED          SIZE                       
stangj/centos_bind-9.11.4_env_run   latest            9ce1346d9e04   10 seconds ago   443MB
`查看USER和WORKDIR达到的效果`
[root@docker dockerflie]# docker run -it --rm stangj/centos_bind-9.11.4_env_run:latest /bin/bash
[root@87b0d1053cee /]# rpm -qa bind
bind-9.11.4-26.P2.el7_9.13.x86_64
[root@87b0d1053cee /]# env|grep VER
VER=9.11.4
​

4)CMD和ENTRYPOINT的使用

4.1)CMD(在容器运行后执行某一操作)[可以被挤掉]

`构建一个dockerfile文件`
[root@docker dockerflie]# vim dockerFile 
FROM centos:7
RUN yum -y install httpd
CMD ["httpd","-D","FOREGROUND"]
`用这个文件build镜像 `
[root@docker dockerflie]# docker build -f dockerFile . -t stangj/centos_cmd
`查看CMD达到的效果`
[root@docker dockerflie]# docker run -d --rm -p84:80  stangj/centos_cmd  
e4fa256ac92cf70ae452fc48719eb8100401dfc78dea40b954bb1a73b64fb12b
[root@docker dockerflie]# docker ps -a
CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS          PORTS                                     NAMES
e4fa256ac92c   stangj/centos_cmd              "httpd -D FOREGROUND"    22 seconds ago   Up 19 seconds   0.0.0.0:84->80/tcp, :::84->80/tcp         condescending_haibt
​

4.2)ENTRYPRINT(在容器运行后执行某一操作)[一直运行]

编写脚本
[root@docker dockerflie]# vim entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
[root@docker dockerflie]# chmod +x entrypoint.sh
`构建一个dockerfile文件`
[root@docker dockerflie]# vim dockerFile 
FROM centos:7
ADD entrypoint.sh /entrypoint.sh
RUN yum -y install epel-release -q && yum -y install nginx
ENTRYPOINT /entrypoint.sh
[root@docker dockerflie]# docker images 
`查看ENTRYPOINT达到的效果`
[root@docker dockerflie]# docker run --rm -p85:80 stangj/centos:7_entrypoint

注意:当一个dockerFile同时使用ENTRYPRINT和CMD时,那么CMD会做为参数传递给ENTRYPRINT

标签: 暂无
最后更新:2023年11月23日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • dockerfile
    • 1)USER(指定用户)和WORKDIR(指定路径)的使用
    • 2)ADD(映射本地文件)和EXPOSE(开放端口和-P使用)的使用
    • 3)ENV(环境变量)和RUN(在容器运行前执行某一操作)的使用
    • 4)CMD和ENTRYPOINT的使用
      • 4.1)CMD(在容器运行后执行某一操作)[可以被挤掉]
      • 4.2)ENTRYPRINT(在容器运行后执行某一操作)[一直运行]

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号