Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令。Docker程序将这些Dockerfile指令翻译真正的Linux命令。Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile。
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
-f 指定 dockerfile文件 Dockerfile 默认 可以不用加 -f
-t 指定image tag 标签
. 上下文选项
docker build -f dockerfile文件 -t image:tag .
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;"]
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"]
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"]
启动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项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务。
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的核心,默认的模板文件为docker-compose.yml,格式为YAML格式。
services
服务,在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。
volumes
数据卷,在它下面可以定义的数据卷(名字等等),然后挂载到不同的服务下去使用。
networks
应用的网络,在它下面可以定义应用的名字、使用的网络类型等等
image
指定为镜像名称或镜像ID。如果镜像本地不存在,Compose将会尝试拉取这个镜像
links
链接到其他服务中的容器
ports
暴露端口信息。
volumes
数据卷所挂载路径设置
container_name
设置容器名
基本格式要求
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' #定义一个字符串
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