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

相關文章
相關標籤/搜索