docker学习笔记之构建lnmp

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

同一个容器利用dockerfile构建lnmp

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

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 指定文件

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

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

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

搭建php支持

每一次重新build都要下载依赖有点慢。所以重新根据ubuntu 16.04 构建了一个ubuntu:v1。

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 健康检查

作者:fish

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谨慎的文科生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值