学习了dockerfile构建lnmp和多容器构建lnmp。不停的删除,从新构建,测试。记录一下php
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 是经过/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 健康检查