docker学习笔记之构建lnmp

学习了dockerfile构建lnmp和多容器构建lnmp。不停的删除,从新构建,测试。记录一下php

同一个容器利用dockerfile构建lnmp

docker search images 可是我通常使用 https://hub.docker.com/r/libr... 里面找镜像。
新建一个dockerfile文件,写入html

FROM ubuntu:16.04
MAINTAINER cp
RUN apt-get update && \
    apt-get install nginx
EXPOSE 80

在dockerfile1所在的目录下,运行docker build -t lnp:v1 .
我当时使用dockerfile1结果跑错了,必须使用dockerfile这个名字,不然须要经过-f 指定文件mysql

docker中ubuntu更新软件的速度太慢了 多加一行命令,将ubuntu中源换成国内的
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
切换成中国区的源。nginx

以后又出现了这个Do you want to continue? [Y/n] Abort.
是由于有些软件安装会出现交互。sql

运行以后发现问题,每一次运行完成以后,就当即退出。
docker 容器默认会把容器内部第一个进程,也就是pid=1的程序做为docker容器是否正在运行的依据,若是docker 容器pid挂了,那么docker容器便会直接退出。
因此以前使用nginx restart命令也会致使nginx容器中止。Docker容器后台运行,就必须有一个前台进程。docker

搭建php支持ubuntu

每一次从新build都要下载依赖有点慢。因此从新根据ubuntu 16.04 构建了一个ubuntu:v1。php7

FROM ubuntu:v1
MAINTAINER cp
RUN apt-get install -y nginx && \
    apt-get install -y php7.0-fpm
COPY ./default /etc/nginx/sites-available/default
CMD service php7.0-fpm start && nginx -g 'daemon off;'

EXPOSE 80
使用COPY命令将nginx配置文件和php的配置文件添加到进去。学习

安装mysql测试

安装过程当中测试了apt-get install -y mysql-server-5.7,出现了提示要求输入密码,可是就卡住了
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.7

文件是docker构建的缘由的chown -R mysql:mysql /var/lib/mysql,让mysql能够读写。

mysql默认是MYSQL_ONETIME_PASSWORD,因此使用mysql 直接进入,而后立刻修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

正常的安装apt-get php-mysql 便可访问。

注意
docker 容器日志输出问题
只有主进程 (pid 为1)的相关进程日志会输出到 stdout

完整的构建

FROM ubuntu:v1
MAINTAINER cp
RUN apt-get install -y nginx && \
    apt-get install -y php7.0-fpm
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.7
COPY ./default /etc/nginx/sites-available/default
CMD chown -R mysql:mysql /var/lib/mysql && service mysql start && service php7.0-fpm start && nginx -g 'daemon off;'

EXPOSE 80

多容器利用--link构建lnmp

--link 是经过/etc/hosts来进行绑定的。
直接使用现成的镜像
docker pull php:7.0-fpm
docker pull mysql:5.6
docker pull nginx

首先运行mysql
docker run -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root --name test_mysql mysql:5.6

再运行php
docker run -d -p 9001:9000 -v /Users/chenpei/PHP:/usr/share/nginx/html --name test_php --link test_mysql php:7.0-fpm
fast-cgi协议是传递脚本名给fpm,因此也要去挂载目录。
php容器运行还须要相应的php-mysql扩展,可是要安装docker-php-ext-install mysqli pdo pdo_mysql

最后运行nginx
docker run -d -p 8088:80 -v /Users/chenpei/PHP:/usr/share/nginx/html --name test_nginx --link test_php nginx:latest
修改一下配置文件,重启
fastcgi_pass test_php:9000


经常使用命令

docker search image 搜索可用的镜像
docker build image . 经过dockerfile构建镜像
docker build -t image:tag . 经过dockerfile构建镜像

FROM 基础镜像MAINTAINER 维护者,或者建立者COPY 复制到容器中ADD 功能和COPY差很少EXPOSE 申明暴露端口RUN 用来执行命令CMD 容器启动后默认执行的命令及其参数,dockerfile中只能有一个ENV 设置环境变量ARG 构建参数,容器运行时,是不会保存环境变量VOLUME 为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,咱们能够事先指定某些目录挂载为匿名卷,这样在运行时若是用户不指定挂载,其应用也能够正常运行,不会向容器存储层写入大量数据。WORKDIR 至关于cd命令,主要是由于docker分层概念USER 指定当前用户ONBUILD 下面的指令RUN等等,只有构建下一级镜像的时候才会被执行HEALHCHECK 健康检查

相关文章
相关标签/搜索