dockerfile构建自己的镜像推送到仓库以及compose使用(三)

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  dockerfile

FROM 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   停止并删除容器,网络,镜像和数据卷

socket/workerman/rpc/docker群:604438441

 

你可能感兴趣的:(docker)