docker的搭建和簡單應用

  1 dockerserver端安裝
  2 先下載docker的yum源
  3 wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  4 而後安裝
  5 yum -y install docker-ce
  6 在/etc/docker/裏修改daemon.json文件,修改爲以下
 7 {  8 "registry-mirrors":[ "https://registry.docker-cn.com" ]  9 }  10 重啓守護進程
 11 systemctl daemon-reload
 12 啓動docker命令
 13 systemctl start docker
 14 查看版本號的命令
 15 docker --version
 16 查看公網上的鏡像
 17 docker search centos:7 (名字,冒號後邊的是版本不寫默認是latest版本)
 18 查看公網鏡像也能夠加詳細的參數,好比100星級以上
 19 docker search centos -f stars=100
 20 在公網上下載鏡像,pull
 21 docker pull centos:7 (名字,冒號後邊是版本號不寫默認是latest)
 22 查看鏡像命令
 23 docker images
 24 想要本身創建鏡像須要偶先建立文件目錄
 25 mkdir -p /root/dockerfile/library/centos/7
 26 cd /root/dockerfile/library/centos/7/
 27 在目錄裏建立容器裏的簡單執行腳本
 28 vim docker.sh
 29 #!/bin/bash
 30 while true 
 31 do 
 32 echo "蘇哥"
 33 sleep 5
 34 done
 35 而後寫鏡像文件Dockerfile名字必定不能錯
 36 FROM centos #是基於那個鏡像建立,沒有的話會去公網下載
 37 LABEL MAINTATNER="SU"#標籤,建立者名字
 38 RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#建立以前修改時區
 39 COPY docker.sh /home/test/#將腳本複製到鏡像裏的test下,路徑是相對Dockerfile的文件
 40 RUN chmod +x /home/test/docker.sh#給鏡像裏邊的腳本加執行權限
 41 CMD ["/home/test/docker.sh"]#執行腳本,啓動容器時,必需要有一個進程在執行,要不啓不 
 42  43 創建鏡像
 44 docker build -t su/centos7:1 . (注意須要在有Dockerfile的目錄裏輸入命令)
 45 啓動容器
 46 docker run -dit su/centos7:1 /bin/bash(能夠加/bin/bash,也能夠不加)
 47 docker run -dit --name sunan su/centos7:1 (啓動的時候給容器器個名字叫sunan)
 48 -d :放在後天運行
 49 -i:能夠交互輸入命令
 50 -t:啓動一個僞終端
 51 -c:指定幾個cpu來運行內存
 52 -m:指定幾個內容。
 53 隱形參數--name 給容器起名。
 54 看容器的日誌
 55 docker logs sunan(能夠是名字,也能夠是id)
 56 看啓動的容器
 57 docker ps -a(加a是看全部)
 58 開始運行容器
 59 docker start xxx(能夠是容器的名字,也能夠是容器的id)
 60 重啓一個容器
 61 docker restart xxx(能夠是容器的名字,也能夠是id)
 62 中止運行容器
 63 時時的輸出容器的資源使用情況
 64 docker stats xxx --no-stream(容器的名字或者id,相似top命令)
 65 加參數--no-stream是隻輸出一次就可
 66 docker stop xxx(能夠是容器的名字,也能夠是容器的id)
 67 切進容器的命令
 68 docker attach xxx(能夠是容器的名字,也能夠是容器的id)
 69 exit是退出容器
 70 殺容器
 71 docker kill xxx (容器的名字,或者容器的id,直接刪掉容器的進程,使其處於中止。)
 72 刪除容器
 73 docker rm xxx(容器的名字,或者容器的id,必須先中止容器之後才能刪,)
 74 -f 強刪
 75 刪除鏡像
 76 docker rmi xxx (容器的名字,或者容器的id)
 77 -f強刪
 78 將一個更改過的容器封裝成一給性的鏡像(先進去一個容器,搭建個項目,退出從封裝)
 79 docker commit xxx(原來的容器,更改過的) xxx/xxx(新的鏡像叫什麼名字)
 80 不進容器,直接發佈命令
 81 docker exec (-dit) xxx(容器的名字,或者id) ls /(想要執行的命令)
 82 參數
 83 -dit直接能夠切進去
 84 容器和屬主機直接的複製文件命令
 85 docker cp /tmp/dockerfile(文件的路徑)xxx:/tmp(容器的名字或者ip,冒號後面是地址)( 
 86 也是吧什麼複製到哪裏的格式)
 87 建立一個新的容器,
 88 docker create -it xxx(鏡像的名字或者id)(用法跟run同樣,只是create不啓動容器,想要 
 89 啓動還須要用start命令啓動下)
 90 查看容器進程與源鏡像作對比看哪裏不同
 91 docker diff xxx(容器的名字或者id)
 92 返回的結果C是多了什麼 
 93 A是少了什麼
 94 監控容器的變化
 95 docker events
 96 導出容器
 97 docker export xxx(容器的名字或者id) > yyyy.tar(導出來的容器叫什麼名字)
 98 將導出的容器建立爲一個鏡像
 99 docker import yyy.tar(導出來的容器的名字)zzz(導入要建立的鏡像叫什麼名字)
100 查看鏡像的歷史記錄
101 docker history xxx (鏡像的名字或者id)
102 查看鏡像的詳細信息
103 docker inspect xxx(鏡像的民族或者id)
104 導出鏡像
105 docker save xxx(要導出的鏡像的名字或者id) > yyy.tar(導出來叫什麼明教)
106 導入鏡像
107 docker load < yyy.tar (須要導入的鏡像的名字。有相同的鏡像是不讓導入的)
108 暫停容器的命令(unpause是回覆暫停的容器)
109 docker pause xxx(容器的名字或者id)
110 查看容器的端口映射協議
111 docker port xxx(容器的名字或者id)
112 想要在啓動的時候添加容器的映射端口
113 docker run -dit --name xx -p 80:80 yy(xx容器起名叫,80:80將屬主機的80端口映射到容器 
114 裏的80端口,yy要啓動的鏡像的名字)
115 給容器更名
116 docker rename xxx yyy(xxx原來的名字,yyy想要叫的名字)
117 用於克隆鏡像的
118 docker tag xxx xxx1(將什麼,克隆成什麼,能夠當場軟鏈接,要刪一塊兒刪)
119 調整啓動之後的容器的cpu和內存
120 docker update -c 2 xxx(須要調整的)
121 -c調整cpu
122 -m調整內存。須要多少直接在後邊寫就能夠了
123 監控容器的的退出狀態
124 docker wait xxx(容器的名字或者id)
125 建立一個自定義網路
126 docker network creat lnmp (建立個自定義網路叫lnmp)
127 查看docker網絡
128 docker network ls查看全部網橋網路
129 brctl show同上
130 login用於登錄docker hub官方公有的倉庫
131 logout用於登出官方公有的倉庫
132 push將本地的鏡像提交到docker hub
133 掛載容器卷
134 分爲兩種,volume卷放的地方是指定的,沒有回自動建立,不特別指定都是volume類型
135 命令docker volume ls 查看系統卷(用volume掛載不會頂掉原來有的東西,會直接出現到卷裏)
136 卷放的地方/var/lib/docker/volumes/
137 docker volume create xxx (建立一個卷,會固定放到指定的地方)
138 查看自volume的卷的命令
139 docker volume ls
140 想要掛載卷鬚要在啓動的時候掛
141 docker run -dit --name nginx-test -p 80:80 --mount src=xxx,dst=/usr/share/nginx/html 
142 nginx(src後邊直接寫卷的名字,系統會到指定的地方去找,dst寫掛到哪裏,事例寫的是掛到 
143 Nginx的網頁目錄下)
144 第二種本身建立的目錄掛載
145 mkdir -p /www/html
146 docker run -dit --name nginx-test2 -p 81:80 --mount 
147 type=bind,src=/www/html/,dst=/usr/shar/nginx/html (用本身建立的掛在會頂掉原理有的) 
148 用docker搭建一個lnmp的環境
149 首先要本身建立一個叫lnmp的網路
150 docker network create lnmp
151 而後啓動mysql的鏡像
152 [root@localhost ~]# docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 
153 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 -- 
154 character-set-server=utf8
155 想容器裏建立一個庫
156 [root@localhost ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot - 
157 p"$MYSQL_ROOT_PASSWORD" -e "create database wp"'
158 提示一下建立成功
159 mysql: [Warning] Using a password on the command line interface can be insecure.
160 而後開始部署php和Nginx
161 先建立一個網頁目錄
162 mkdir -p /app/wwwroot
163 而後啓動php和ngin的鏡像(前題須要下載好richarvey/nginx-php-fpm這個鏡像)
164 [root@localhost ~]# docker run -dit --name lnmp_web --net lnmp -p 88:80 --mount 
165 type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
166 將博客的包解壓到本身設置好的掛載目錄/app/wwwroot/167 [root@localhost ~]# tar xf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot/
168 [root@localhost ~]# cd /app/wwwroot/
169 而後打開瀏覽器去訪問你的ip地址的88端口就能夠了

 

 

 

docker的網橋搭建
容器網路有5種模式
bridge 網橋模式
host僅主機模式(跟屬主機一個網路)
none 不給容器配置任何的網路環境,專門用來陪橋接的
container 連個容器用以個網卡
自定義模式,就跟網橋同樣,就是本身起個名字php

須要安裝支持包
[root@localhost ~]# yum -y install bridge-utils
建立啓動一個host模式的容器
[root@localhost ~]# docker run -dit --name suge --net host centos:latest /bin/bash
建立一個none模式的容器
[root@localhost ~]# docker run -dit --name suge --net none centos:latest /bin/bash
橋接屬主機須要的配置(想要橋接容器必須是none的模式,最後在指定網橋)
[永久配置]
#vim /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=ens32
TYPE=Ethernet
ONBOOT=yes
BRIDGE=br0


# vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.3.10
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS=144.144.144.144

[臨時配置]
#網橋的名稱
br_name=br0
#添加網橋
brctl addbr $br_name
#給網橋設置ip
ip addr add 192.168.1.120/24 dev $br_name
#刪除已經存在的網卡配置
ip addr del 192.168.1.120/24 dev ens32
#激活網橋
ip link set $br_name up
#添加ens32到網橋
brctl addif $br_name ens32
#添加路由
ip route add default via 192.168.1.1 dev br0

還須要在docker啓動是橋接這個網橋
#vim /usr/lib/systemd/system/dcker.service
ExecStart=/usr/bin/docker -b=br0
#systemctl restart docker
永久的配置咱們重啓網路
systemctl restart network

指定網橋須要工具pipework
工具下載地址https://github.com/jpetazzo/pipwork.git
有zip包須要裝unzip解壓軟件
yum -y install unzip
pipework br0 test2 192.168.200.199/24@192.168.200.2(指定網橋br0給test2容器,ip是 
192.168.200.199掩碼24位網關是192.168.200.2)

 

docker的重點鏡像製做css

經常使用的指令
FROM 構建新的鏡像是基於那個鏡像的,例如:FROM centos:7
MAINTAINER 鏡像的做者或者郵箱地址,例如:MAINTTAINER SUGE
RUN 構建鏡像是的shell命令,例如:RUN ["yum","install,""http"]或者寫成RUN yum install 
http
CMD 運行容器時的shell名,能夠被參數俯瞰,例如CMD ["-c","start.sh"]或者CMD 
["/usr/sbin/sshd","-D"]或者CMD /usr/sbin/sshd -D
EXPOSE 聲明容器運行的服務端口,不聲明,運行的時候沒辦法開啓,例如EXPOSE 80 443
ENV 設置容器內環境變量,例如ENV MYSQL_ROOT_PASSWORD 123456
ADD 拷貝文件或目錄到鏡像裏邊,若是是壓縮包會自動解壓的,例如ADD ["src","dest"]或者 
ADD http://xxx.com/html.tar.gz /var/www/html,或者ADD html.tar.gz /var/www/html(源文 
件的相對路徑是想對Dockerfile這個文件的)
COPY 複製文件或者目錄到鏡像,不自動解壓,例如COPY ./start.sh /start.sh
ENTRYPOINT 運行容器時的shell命令不能被運行是傳遞的參數覆蓋,例如:ENTRYPOINT 
[「/bin/bash」,「-c」.「/start.sh」]或者ENTRYPOINT /bin/bash -c "start.sh"
VOLUME 指定容器掛載點到宿主機自動生成的目錄或其餘容器,例如:VOLUME 
[「/var/lib/mysql」]
USER 是RUN,CMD,ENTRYPOINT執行命令指定的運行用戶,例如:USER SUGE
WORKDIR 爲RUN ,CMD,ENTRYPOINT,COPY,ADD設置工做目錄,(指定進入容器中默認的目錄),例 
如:WORKDIR /data
HEALTHCHECK 健康檢查。例如:HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD 
curl -f http://localhost/ || exit 1
ARG 在構建鏡像時指定一下參數,例如:ARG user

 

編譯一個簡單的Dockerfile首先開啓ip轉發
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p 
創建一個nginx的鏡像,咱們要在/root/dockerfile/library/下創建Nginx的目錄,
Dokerfile的內容
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
./configure --prefix=/usr/local/nginx && \
make -j 2 && \ #(-j 是啓動即個核來編譯)
make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
相關的Nginx的配置文件和壓縮包都放置着個目錄下,
Nginx的配置文件
user root;
worker_processes auto;

error_log logs/error.log info;

pid logs/nginx.pid;


events {
use epoll;
}

http {

include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;
root html;
index index.html index.php;

location ~ \.php$ {
root html;
fastcgi_pass lnmp_php:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}

 

而後構建開始 
docker build -t su/Nginx 
編寫php的鏡像
要在/root/dockerfile/library/創建php的目錄
Dockerfile的內容 
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg- 
devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql --with-mysqli \
--with-openssl --with-zlib --with-curl --with-gd \
--with-jpeg-dir --with-png-dir --with-iconv \
--enable-fpm --enable-zip --enable-mbstring && \
make -j 4 && \
make install && \
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
將php的配置文件php.ini,也放到Dockerfile所在的目錄裏

 

一鍵打包安裝鏡像

須要先安裝命令docker-compose
docker-compose的接口文件的命令
build 下級字段dockerfile:指定Dockerfile文件名,下級字段context;構建鏡像上下文路徑
images 指定鏡像
command 執行命令,覆蓋默認命令
container_name 指定容器名稱
deploy 指定部署和運行服務相關配置,只能在Swarm模式使用
environment 添加環境變量
networks 加入網絡,引用頂級networks下條目
ports 暴露端口,與-p相同,但端口不能低於60
volumes 掛載宿主機路徑或命名卷。若是是命名卷在頂級volumes定義卷名稱
restart 撐起策略,默認no,always| on-failure|unless-stopped
hostname 容器主機名

docker-compose的命令
build 從新構建服務
ps 列出容器
ip 建立和啓動容器
exec 在容器裏執行命令
scale 指定一個服務器啓動數量
top 顯示容器進程
logs 查看容器輸出
down 刪除容器,網路,數據卷,和鏡像
stop/start/restart 中止/啓動/重啓服務
一鍵啓動一個部署lnmp的文件。
命令docker-compose -f docker-compose.yml up (-f指定接口文件在哪,必需要指定文件) 

 放置入口文件在/root/dockerfile/library/下的樹形結構

[root@localhost library]# tree compose_nginx_tomcat/
compose_nginx_tomcat/
├── docker-compose.yml
├── mysql
│   ├── conf
│   │   └── my.cnf
│   └── data
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.1.tar.gz
│   └── nginx.conf
├── tomcat
│   ├── apache-tomcat-8.0.46.tar.gz
│   ├── Dockerfile
│   └── server.xml
└── webapps
    └── ROOT
        └── index.html
[root@localhost library]# tree compose_lnmp/(爲在構建的時候系統在mysql裏寫東西的樹形結構)
compose_lnmp/
├── docker-compose.yml
├── mysql
│   ├── conf
│   │   └── my.cnf
│   └── data
│       ├── auto.cnf
│       ├── ibdata1
│       ├── ib_logfile0
│       ├── ib_logfile1
│       ├── mysql
│       │   ├── columns_priv.frm
│       │   ├── columns_priv.MYD
│       │   ├── columns_priv.MYI
│       │   ├── db.frm
│       │   ├── db.MYD
│       │   ├── db.MYI
│       │   ├── event.frm
│       │   ├── event.MYD
│       │   ├── event.MYI
│       │   ├── func.frm
│       │   ├── func.MYD
│       │   ├── func.MYI
│       │   ├── general_log.CSM
│       │   ├── general_log.CSV
│       │   ├── general_log.frm
│       │   ├── help_category.frm
│       │   ├── help_category.MYD
│       │   ├── help_category.MYI
│       │   ├── help_keyword.frm
│       │   ├── help_keyword.MYD
│       │   ├── help_keyword.MYI
│       │   ├── help_relation.frm
│       │   ├── help_relation.MYD
│       │   ├── help_relation.MYI
│       │   ├── help_topic.frm
│       │   ├── help_topic.MYD
│       │   ├── help_topic.MYI
│       │   ├── innodb_index_stats.frm
│       │   ├── innodb_index_stats.ibd
│       │   ├── innodb_table_stats.frm
│       │   ├── innodb_table_stats.ibd
│       │   ├── ndb_binlog_index.frm
│       │   ├── ndb_binlog_index.MYD
│       │   ├── ndb_binlog_index.MYI
│       │   ├── plugin.frm
│       │   ├── plugin.MYD
│       │   ├── plugin.MYI
│       │   ├── proc.frm
│       │   ├── proc.MYD
│       │   ├── proc.MYI
│       │   ├── procs_priv.frm
│       │   ├── procs_priv.MYD
│       │   ├── procs_priv.MYI
│       │   ├── proxies_priv.frm
│       │   ├── proxies_priv.MYD
│       │   ├── proxies_priv.MYI
│       │   ├── servers.frm
│       │   ├── servers.MYD
│       │   ├── servers.MYI
│       │   ├── slave_master_info.frm
│       │   ├── slave_master_info.ibd
│       │   ├── slave_relay_log_info.frm
│       │   ├── slave_relay_log_info.ibd
│       │   ├── slave_worker_info.frm
│       │   ├── slave_worker_info.ibd
│       │   ├── slow_log.CSM
│       │   ├── slow_log.CSV
│       │   ├── slow_log.frm
│       │   ├── tables_priv.frm
│       │   ├── tables_priv.MYD
│       │   ├── tables_priv.MYI
│       │   ├── time_zone.frm
│       │   ├── time_zone_leap_second.frm
│       │   ├── time_zone_leap_second.MYD
│       │   ├── time_zone_leap_second.MYI
│       │   ├── time_zone.MYD
│       │   ├── time_zone.MYI
│       │   ├── time_zone_name.frm
│       │   ├── time_zone_name.MYD
│       │   ├── time_zone_name.MYI
│       │   ├── time_zone_transition.frm
│       │   ├── time_zone_transition.MYD
│       │   ├── time_zone_transition.MYI
│       │   ├── time_zone_transition_type.frm
│       │   ├── time_zone_transition_type.MYD
│       │   ├── time_zone_transition_type.MYI
│       │   ├── user.frm
│       │   ├── user.MYD
│       │   └── user.MYI
│       ├── performance_schema
│       │   ├── accounts.frm
│       │   ├── cond_instances.frm
│       │   ├── db.opt
│       │   ├── events_stages_current.frm
│       │   ├── events_stages_history.frm
│       │   ├── events_stages_history_long.frm
│       │   ├── events_stages_summary_by_account_by_event_name.frm
│       │   ├── events_stages_summary_by_host_by_event_name.frm
│       │   ├── events_stages_summary_by_thread_by_event_name.frm
│       │   ├── events_stages_summary_by_user_by_event_name.frm
│       │   ├── events_stages_summary_global_by_event_name.frm
│       │   ├── events_statements_current.frm
│       │   ├── events_statements_history.frm
│       │   ├── events_statements_history_long.frm
│       │   ├── events_statements_summary_by_account_by_event_name.frm
│       │   ├── events_statements_summary_by_digest.frm
│       │   ├── events_statements_summary_by_host_by_event_name.frm
│       │   ├── events_statements_summary_by_thread_by_event_name.frm
│       │   ├── events_statements_summary_by_user_by_event_name.frm
│       │   ├── events_statements_summary_global_by_event_name.frm
│       │   ├── events_waits_current.frm
│       │   ├── events_waits_history.frm
│       │   ├── events_waits_history_long.frm
│       │   ├── events_waits_summary_by_account_by_event_name.frm
│       │   ├── events_waits_summary_by_host_by_event_name.frm
│       │   ├── events_waits_summary_by_instance.frm
│       │   ├── events_waits_summary_by_thread_by_event_name.frm
│       │   ├── events_waits_summary_by_user_by_event_name.frm
│       │   ├── events_waits_summary_global_by_event_name.frm
│       │   ├── file_instances.frm
│       │   ├── file_summary_by_event_name.frm
│       │   ├── file_summary_by_instance.frm
│       │   ├── host_cache.frm
│       │   ├── hosts.frm
│       │   ├── mutex_instances.frm
│       │   ├── objects_summary_global_by_type.frm
│       │   ├── performance_timers.frm
│       │   ├── rwlock_instances.frm
│       │   ├── session_account_connect_attrs.frm
│       │   ├── session_connect_attrs.frm
│       │   ├── setup_actors.frm
│       │   ├── setup_consumers.frm
│       │   ├── setup_instruments.frm
│       │   ├── setup_objects.frm
│       │   ├── setup_timers.frm
│       │   ├── socket_instances.frm
│       │   ├── socket_summary_by_event_name.frm
│       │   ├── socket_summary_by_instance.frm
│       │   ├── table_io_waits_summary_by_index_usage.frm
│       │   ├── table_io_waits_summary_by_table.frm
│       │   ├── table_lock_waits_summary_by_table.frm
│       │   ├── threads.frm
│       │   └── users.frm
│       └── wordpress
│           └── db.opt
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.1.tar.gz
│   └── nginx.conf
├── php
│   ├── Dockerfile
│   ├── php-5.6.31.tar.gz
│   └── php.ini
└── wwwroot
    └── index.php

9 directories, 146 files

lnmp的入口文件

[root@localhost compose_lnmp]# vim docker-compose.yml 

version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 81:80
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  php:
    hostname: php
    build:
      context: ./php
      dockerfile: Dockerfile
    networks:
      - lnmp
    volumes:
      - ./wwwroot:/usr/local/nginx/html

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3306:3306
    networks:
      - lnmp
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    command: --character-set-server=utf8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: wordpress
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmp:
           

lnmp的mysql的配置文件

[root@localhost compose_lnmp]# vim my.cnf 
[mysqld] user
=mysql port=3306 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock pid-file=/var/run/mysql/mysql.pid log_error=/var/log/mysql/error.log character_set_server = utf8 max_connections=3600

lnmp的Nginx的配置文件

user  root;
worker_processes  auto;

error_log  logs/error.log  info;

pid        logs/nginx.pid;


events {
    use epoll;
}

http {

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log main;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;
        server_name localhost;
        root html;
        index index.html index.php;

        location ~ \.php$ {
            root html;
            fastcgi_pass php:9000;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }
}

lnmp的Nginx目錄下的Dockerfile文件

FROM centos:7
MAINTAINER www.Mr_chen.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && \
    make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
~                                                                                                                 
~                                               

lnmp裏的php目路里的Dockerfile文件

FROM centos:7
MAINTAINER www.Mr_chen.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp/

RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc

RUN rm -rf /tmp/php-5.6.31* && yum clean all

WORKDIR /usr/local/php
EXPOSE 9000
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]

Nginx-Tomcat的接口文件

[root@localhost compose_nginx_tomcat]# cat docker-compose.yml 
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 82:80
    networks:
      - lnmt
    volumes:
      - ./webapps:/opt/webapps

  tomcat01:
    hostname: tomcat01
    build: ./tomcat
    networks:
      - lnmt
    volumes:
      - /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
      - ./webapps:/usr/local/apache-tomcat-8.0.46/webapps

  tomcat02:
    hostname: tomcat02
    build: ./tomcat
    networks:
      - lnmt
    volumes:
      - /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45
      - ./webapps:/usr/local/apache-tomcat-8.0.46/webapps

  mysql:
    hostname: mysql
    image: mysql:5.6
    ports:
      - 3307:3306
    networks:
      - lnmt
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: user123

networks:
  lnmt:

 

Nginx-Tomcat裏的Nginx配置文件

[root@localhost nginx]# cat nginx.conf 
user  root; 
worker_processes  auto; 

error_log  logs/error.log  info;

pid        logs/nginx.pid; 


events {
    use epoll; 
}

http {

    include       mime.types;
    default_type  application/octet-stream;

    log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log logs/access.log main;
    sendfile        on;
    keepalive_timeout  65;
    
    upstream www.example.com {
        #ip_hash;
        server tomcat01:8080;
    server tomcat02:8080;
    }

    server {
        listen 80;
        server_name localhost;
    
    location / {
        proxy_pass http://www.example.com;
    }

        location ~ \.(html|css|js|jpg|png|gif)$ {
            root /opt/webapps/ROOT;
        }
    }
}

Nginx-Tomcat的Nginx裏的Dockerfile

[root@localhost nginx]# cat Dockerfile 
FROM centos:7
MAINTAINER www.Mr_chen.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && \
    make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]

Nginx-Tomcat裏的Tomcat的Dockerfile

[root@localhost tomcat]# cat Dockerfile 
FROM centos:7
MAINTAINER www.Mr_chen.com

ENV JAVA_HOME /usr/local/jdk1.8.0_45

ADD apache-tomcat-8.0.46.tar.gz /usr/local
COPY server.xml /usr/local/apache-tomcat-8.0.46/conf
RUN sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/apache-tomcat-8.0.46/bin/catalina.sh 

RUN rm -f /usr/local/*.tar.gz

WORKDIR /usr/local/apache-tomcat-8.0.46
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"]

 

Nginx-Tomcat裏的mysql的配置文件

[root@localhost conf]# cat my.cnf 
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysql/mysql.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600

 

 

沒有的配置文件就直接從安裝的號的Tomcat,php裏的配置文件複製一份過來便可

相關文章
相關標籤/搜索