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里的配置文件复制一份过来即可

posted @ 2018-12-03 13:47  cash_su  阅读(1261)  评论(0编辑  收藏  举报