Dockfile介绍

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。

Dockerfile的书写规则

Dockerfile的指令是忽略大小写的,建议使用大写,

使用 # 作为注释,

每一行只支持一条指令,每条指令可以携带多个参数。

Dockerfile的指令根据作用可以分为两种,构建指令和设置指令。构建指令用于构建image,其指定的操作不会在运行image的容器上执行;设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行。

构建指令

FROM(指定基础image)

FROM  :

MAINTAINER(用来指定镜像创建者信息)

MAINTAINER

RUN(安装软件用)

RUN

ENV(用于设置环境变量)

ENV

ADD(从src复制文件到container的dest路径)

ADD      复制过去 直接解压

COPY  src  dest   不给解压

设置指令

CMD(设置container启动时执行的操作)

CMD ["executable","param1","param2"]

ENTRYPOINT(设置container启动时执行的操作)

ENTRYPOINT ["executable", "param1", "param2"]

USER(设置container容器的用户)

USER daemon

EXPOSE(指定容器需要映射到宿主机器的端口)

EXPOSE [...]

VOLUME(指定挂载点))

VOLUME [""]

WORKDIR(切换目录)

WORKDIR  /path/to/workdir

ONBUILD(在子镜像中执行)

ONBUILD

docker  build

-f  指定 dockerfile文件    Dockerfile  默认 可以不用加  -f

-t  指定image  tag  标签

.   上下文选项

docker  build  -f   dockerfile文件    -t   image:tag     .

nginx dockerfile

FROM centos:7

MAINTAINER  lampol

#ADD nginx-1.17.0.tar.gz  /home/src

RUN yum install -y gcc gcc-c++ glibc make autoconf wget  openssl-devel   libxslt-devel  gd-devel  GeoIP-devel  pcre-devel

RUN  yum clean all

RUN groupadd  www

RUN useradd  -g www  -M -s /sbin/nologin  www

RUN wget -P /home/src  http://nginx.org/download/nginx-1.17.0.tar.gz

RUN cd /home/src  && tar xf nginx-1.17.0.tar.gz

WORKDIR  /home/src/nginx-1.17.0

RUN

./configure --user=www --group=www --prefix=/usr/local/nginx

--with-http_stub_status_module --with-http_ssl_module

--with-http_gzip_static_module --with-http_sub_module

RUN make && make install

EXPOSE 80

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

#ENTRYPOINT ["nginx"]

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

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

php dockerfile

FROM centos:7

MAINTAINER lampol

RUN yum install  -y  https://mirrors.tuna.tsinghua.edu.cn/epel//epel-release-latest-7.noarch.rpm

RUN

yum install -y  gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel

libjpeg-devel libpng-devel openssl-devel  libmcrypt-devel libxslt-devel

libtidy-devel autoconf  wget

RUN yum clean all

RUN useradd -M -s /sbin/nologin www

RUN  mkdir  /home/src

COPY  php-7.1.30.tar.gz    /home/src

#RUN wget  -P /home/src  https://www.php.net/distributions/php-7.1.30.tar.gz

RUN cd  /home/src  && tar xf php-7.1.30.tar.gz

WORKDIR /home/src/php-7.1.30

RUN

./configure --prefix=/usr/local/php

--with-config-file-path=/usr/local/php/etc --enable-fpm

--with-fpm-user=www --with-fpm-group=www --with-mysql=mysqlnd

--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir

--with-freetype-dir=/usr/local/freetype --with-mcrypt --with-jpeg-dir

--with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml

--disable-rpath --enable-inline-optimization --with-curl

--enable-mbregex --enable-mbstring --with-gd --enable-gd-native-ttf

--with-openssl --with-mhash --enable-pcntl --with-xmlrpc --enable-zip

--enable-soap --with-gettext --enable-opcache --with-xsl --enable-bcmath

--enable-posix --enable-sockets

RUN make && make install

RUN

cp php.ini-production /usr/local/php/etc/php.ini &&   cp

/usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf

RUN  cp  /usr/local/php/etc/php-fpm.d/www.conf.default   /usr/local/php/etc/php-fpm.d/www.conf

RUN sed  -i 's/listen = 127.0.0.1:9000/listen = 0.0.0.0:9000/g'   /usr/local/php/etc/php-fpm.d/www.conf

RUN sed -i "90a \daemonize = no" /usr/local/php/etc/php-fpm.conf

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

#COPY php.ini /usr/local/php/etc/

#COPY php-fpm.conf /usr/local/php/etc/

EXPOSE 9000

CMD ["php-fpm"]

MySQL  dockerfileFROM centos:7

MAINTAINER lampol

RUN yum install -y  gcc gcc-c++ ncurses-devel perl cmake make autoconf  wget

RUN yum clean all

RUN groupadd mysql &&  useradd  -g mysql  -M -s /sbin/nologin  mysql

RUN  mkdir  /home/src

RUN wget  -P /home/src   https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.44.tar.gz

RUN cd  /home/src  && tar xf  mysql-5.6.44.tar.gz

WORKDIR /home/src/mysql-5.6.44

RUN

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_USER=mysql

-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

-DWITH_MYISAM_STORAGE_ENGINE=1  -DWITH_INNOBASE_STORAGE_ENGINE=1

-DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1

-DENABLED_LOCAL_INFILE=1

RUN make && make install

RUN  chown -R mysql:mysql /usr/local/mysql

ENV PATH $PATH:/usr/local/mysql/bin

RUN  /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql  --datadir=/usr/local/mysql/data

RUN  /usr/local/mysql/support-files/mysql.server start && mysqladmin -u root password '123456'

EXPOSE  3306

CMD ["mysqld_safe"]

启动lnmp以及配置

启动MySQL

docker run  -d  --name lnmp_mysql   mysql:7

启动 php容器

docker run -d  --name lnmp_php  --link lnmp_mysql:mysql   -v /home/www:/usr/local/nginx/html  php:7

启动nginx 容器

docker run -d  --name lnmp_nginx  -p 80:80  --link lnmp_php:php  -v /home/www:/usr/local/nginx/html nginx:1.17

配置

location ~ \.php$ {

fastcgi_pass    php:9000;  //php容器ip

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;

include        fastcgi_params;

}

镜像推送

注册 docker hub    https://hub.docker.com/

docker  login

修改 镜像 标签

docker tag nginx:1.17  lampol/nginx:1.17

镜像推送

docker push  lampol/nginx:1.17

docker commit

从容器创建镜像

docker commit  -m '配置php'  -a 'lampol’  lnmp_nginx  lampol/nginx:1.17-php

docker push   lampol/nginx:1.17-php

compose

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务。

安装compose

curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

或者直接下载

https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64

mv docker-compose-Linux-x86_64    /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version

Compose模板文件

模板文件是使用Compose的核心,默认的模板文件为docker-compose.yml,格式为YAML格式。

services

服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。

volumes

数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用。

networks

应用的网络,在它下面可以定义应用的名字、使用的网络类型等等

image

指定为镜像名称或镜像ID。如果镜像本地不存在,Compose将会尝试拉取这个镜像

links

链接到其他服务中的容器

ports

暴露端口信息。

volumes

数据卷所挂载路径设置

container_name

设置容器名

yaml语法

基本格式要求

1,YAML大小写敏感;

2,使用缩进代表层级关系;

3,缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)

4 #作为注释,YAML中只有行注释。

YAML中允许表示三种格式,分别是常量值,对象和数组

对象

使用冒号代表,格式为key: value。冒号后面要加一个空格:

key: value

可以使用缩进表示层级关系

key:

child-key: value

child-key2: value2

数组

使用一个短横线加一个空格代表一个数组项

hobby:

- Java

- LOL

常量

YAML中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间

pi: 3.14   #定义一个数值3.14

hasChild: true  #定义一个boolean值

name: '你好YAML'   #定义一个字符串

compose 命令

docker-compose up

docker-compose up -d  // 后台启动并运行容器

docker-compose ps  列出所有运行容器

docker-compose logs    查看服务日志输出

docker-compose start 服务名  启动容器

docker-compose stop 服务名名  停止容器

docker-compose rm   服务名  删除容器

restart   重启项目中的服务

down   停止并删除容器,网络,镜像和数据

www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程相关推荐

  1. httpqyl.php,linux运维架构--PHP开发-零基础学习PHP视频教程

    Dockfile介绍 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令 ...

  2. Linux运维系统工程师与java基础学习系列-6

    Java天生骄傲系列-6 程序流程控制(续) 循环结构 代表语句:while, do while, for While语句格式: while(条件表达式) { 执行语句: } 牛刀小试: packag ...

  3. Linux运维之道之网络基础学习1.3

    网络基础1.3 数据链路层解析: 数据链路层: 位于物理层与网络层之间: 数据链路层的功能: --数据链路的建立,维护,拆除 --帧包装,帧传输,帧同步 --帧的差错恢复 --流量控制 ------- ...

  4. Linux运维系统工程师与java基础学习系列-1

    Java天生骄傲系列-1 1     Eclipse的使用(略): 2 在eclipse下Java程序的编写和运行,及Java运行环境的配置略: 3 快捷键的配置,常用快捷键(略): 注:当程序有错误 ...

  5. Linux运维之道之网络基础学习1.0

    网络基础1.0 计算机网络: 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统,应用软件,应用程序通过通信线路互连,实现资源共享,信息传递. 计算机网络的功能: 数据通信,资源共享,增 ...

  6. linux运维之道入门,Linux运维之道之网络基础学习1.2

    网络基础1.2 物理层解析 -------------------------------------------------------------------------------------- ...

  7. Linux运维架构师、SRE技术图谱

    Linux运维架构师.SRE技术图谱 Web服务器: apache, tomcat, nginx, lighttpd, varnish 监控: nagios. ganglia. cacti. zabb ...

  8. linux运维架构师职业规划

    1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是"鸟哥的私房菜",讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服 ...

  9. Linux运维好学还是开发好学,运维提升需要学习开发技能吗?

    运维需要学习开发技能吗?技术的发展推动了Linux的前行.学习Linux技能的人们也越来越多,时下Linux运维已成为非常热门的职业岗位之一.Linux操作系统备受各大企业和个人的青睐.在许多人看来, ...

最新文章

  1. 搭建selenium + Python环境的总结:
  2. RMQ(Range Minimum/Maximum Query)问题:
  3. 生产事故 java_记一次生产事故:30万单就这样没了!
  4. python os模块方法_python os模块的常用方法
  5. 中文BERT上分新技巧,多粒度信息来帮忙
  6. python中的demo_python中简单工厂实现demo
  7. 启程 一些高考后的想法
  8. linux的服务文件,Linux的nfs文件服务
  9. [转]在EntityFramework6中执行SQL语句
  10. 编写c语言程序的可视化编程环境有哪些,C语言可视化编程环境设计及实现.pdf
  11. 从微软和思科的 IT 服务化转型过程中得到的几点思考
  12. 【转载】游戏场景设计、构图的一些基本思考
  13. 邮政局:异地快递7天内没送达可索回运费
  14. # Python第一节课
  15. latex如何更改某一段落的字体_latex 段落编号 latex 引用段落
  16. 一.对于crc校验的流程演示说明。
  17. 标准C语言各种时间函数用法
  18. 数学形态学之腐蚀算法
  19. 网络记账软件测试面试,超级账本test-network测试工作流程
  20. Spring Cloud Data Flow流处理入门-5

热门文章

  1. 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导
  2. java-web乱码问题解决
  3. VS2008下, Microsoft AJAX 组件开发单独js智能提示
  4. 为什么用TreeView绑定XML文件时总是提示:根级别上的数据无效。
  5. Bailian4042 Rabin-Karp字符串匹配【文本】
  6. HDU2083 简易版之最短距离【最值】
  7. UVA10341 Solve It【二分】
  8. word 软换行与硬换行
  9. 中英文对照 —— 手机 App/PC 端软件(系统)、互联网
  10. 计算(数字)的观点看世界