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 連個容器用以個網卡
自定義模式,就跟網橋一樣,就是自己起個名字

需要安裝支持包
[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的重點鏡像制作

常用的指令
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里的配置文件復制一份過來即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM