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调整cpu122 -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 hub133 挂载容器卷134 分为两种,volume卷放的地方是指定的,没有回自动创建,不特别指定都是volume类型135 命令docker volume ls 查看系统卷(用volume挂载不会顶掉原来有的东西,会直接出现到卷里)136 卷放的地方/var/lib/docker/volumes/137 docker volume create xxx (创建一个卷,会固定放到指定的地方)138 查看自volume的卷的命令139 docker volume ls140 想要挂载卷需要在启动的时候挂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/html146 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 lnmp151 然后启动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=utf8155 想容器里创建一个库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和Nginx161 先创建一个网页目录162 mkdir -p /app/wwwroot163 然后启动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-fpm166 将博客的包解压到自己设置好的挂载目录/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-ens32DEVICE=ens32TYPE=EthernetONBOOT=yesBRIDGE=br0# vim /etc/sysconfig/network-scripts/ifcfg-br0DEVICE=br0TYPE=BridgeONBOOT=yesBOOTPROTO=staticIPADDR=192.168.3.10NETMASK=255.255.255.0GATEWAY=192.168.3.1DNS=144.144.144.144[临时配置]#网桥的名称br_name=br0#添加网桥brctl addbr $br_name#给网桥设置ipip 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.serviceExecStart=/usr/bin/docker -b=br0#systemctl restart docker永久的配置我们重启网路systemctl restart network指定网桥需要工具pipework工具下载地址https://github.com/jpetazzo/pipwork.git有zip包需要装unzip解压软件yum -y install unzippipework 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:7MAINTAINER 镜像的作者或者邮箱地址,例如:MAINTTAINER SUGERUN 构建镜像是的shell命令,例如:RUN ["yum","install,""http"]或者写成RUN yum install httpCMD 运行容器时的shell名,可以被参数俯瞰,例如CMD ["-c","start.sh"]或者CMD ["/usr/sbin/sshd","-D"]或者CMD /usr/sbin/sshd -DEXPOSE 声明容器运行的服务端口,不声明,运行的时候没办法开启,例如EXPOSE 80 443ENV 设置容器内环境变量,例如ENV MYSQL_ROOT_PASSWORD 123456ADD 拷贝文件或目录到镜像里边,如果是压缩包会自动解压的,例如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.shENTRYPOINT 运行容器时的shell命令不能被运行是传递的参数覆盖,例如:ENTRYPOINT [“/bin/bash”,“-c”.“/start.sh”]或者ENTRYPOINT /bin/bash -c "start.sh"VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器,例如:VOLUME [“/var/lib/mysql”]USER 是RUN,CMD,ENTRYPOINT执行命令指定的运行用户,例如:USER SUGEWORKDIR 为RUN ,CMD,ENTRYPOINT,COPY,ADD设置工作目录,(指定进入容器中默认的目录),例 如:WORKDIR /dataHEALTHCHECK 健康检查。例如:HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://localhost/ || exit 1ARG 在构建镜像时指定一下参数,例如:ARG user
编译一个简单的Dockerfile首先开启ip转发echo "net.ipv4.ip_forward=1" >> /etc/sysctl.confsysctl -p 建立一个nginx的镜像,我们要在/root/dockerfile/library/下建立Nginx的目录,Dokerfile的内容FROM centos:7MAINTAINER www.aliangedu.comRUN yum install -y gcc gcc-c++ make openssl-devel pcre-develADD nginx-1.12.1.tar.gz /tmpRUN cd /tmp/nginx-1.12.1 && \./configure --prefix=/usr/local/nginx && \make -j 2 && \ #(-j 是启动即个核来编译)make installRUN rm -rf /tmp/nginx-1.12.1* && yum clean allCOPY nginx.conf /usr/local/nginx/confWORKDIR /usr/local/nginxEXPOSE 80CMD ["./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:7MAINTAINER www.aliangedu.comRUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg- devel libpng-devel openssl-develADD 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.confCOPY php.ini /usr/local/php/etcRUN rm -rf /tmp/php-5.6.31* && yum clean allWORKDIR /usr/local/phpEXPOSE 9000CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]将php的配置文件php.ini,也放到Dockerfile所在的目录里
一键打包安装镜像
需要先安装命令docker-composedocker-compose的接口文件的命令build 下级字段dockerfile:指定Dockerfile文件名,下级字段context;构建镜像上下文路径images 指定镜像command 执行命令,覆盖默认命令container_name 指定容器名称deploy 指定部署和运行服务相关配置,只能在Swarm模式使用environment 添加环境变量networks 加入网络,引用顶级networks下条目ports 暴露端口,与-p相同,但端口不能低于60volumes 挂载宿主机路径或命名卷。如果是命名卷在顶级volumes定义卷名称restart 撑起策略,默认no,always| on-failure|unless-stoppedhostname 容器主机名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.php9 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: user123networks: lnmp:
lnmp的mysql的配置文件
[root@localhost compose_lnmp]# vim my.cnf [mysqld]user=mysqlport=3306datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockpid-file=/var/run/mysql/mysql.pidlog_error=/var/log/mysql/error.logcharacter_set_server = utf8max_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:7MAINTAINER www.Mr_chen.comRUN yum install -y gcc gcc-c++ make openssl-devel pcre-develADD nginx-1.12.1.tar.gz /tmpRUN cd /tmp/nginx-1.12.1 && \ ./configure --prefix=/usr/local/nginx && \ make -j 2 && \ make installRUN rm -rf /tmp/nginx-1.12.1* && yum clean allCOPY nginx.conf /usr/local/nginx/confWORKDIR /usr/local/nginxEXPOSE 80CMD ["./sbin/nginx", "-g", "daemon off;"]~ ~
lnmp里的php目路里的Dockerfile文件
FROM centos:7MAINTAINER www.Mr_chen.comRUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-develADD 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.confCOPY php.ini /usr/local/php/etcRUN rm -rf /tmp/php-5.6.31* && yum clean allWORKDIR /usr/local/phpEXPOSE 9000CMD ["./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: user123networks: 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:7MAINTAINER www.Mr_chen.comRUN yum install -y gcc gcc-c++ make openssl-devel pcre-develADD nginx-1.12.1.tar.gz /tmpRUN cd /tmp/nginx-1.12.1 && \ ./configure --prefix=/usr/local/nginx && \ make -j 2 && \ make installRUN rm -rf /tmp/nginx-1.12.1* && yum clean allCOPY nginx.conf /usr/local/nginx/confWORKDIR /usr/local/nginxEXPOSE 80CMD ["./sbin/nginx", "-g", "daemon off;"]
Nginx-Tomcat里的Tomcat的Dockerfile
[root@localhost tomcat]# cat Dockerfile FROM centos:7MAINTAINER www.Mr_chen.comENV JAVA_HOME /usr/local/jdk1.8.0_45ADD apache-tomcat-8.0.46.tar.gz /usr/localCOPY server.xml /usr/local/apache-tomcat-8.0.46/confRUN 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.gzWORKDIR /usr/local/apache-tomcat-8.0.46EXPOSE 8080ENTRYPOINT ["./bin/catalina.sh", "run"]
Nginx-Tomcat里的mysql的配置文件
[root@localhost conf]# cat my.cnf [mysqld]user=mysqlport=3306datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockpid-file=/var/run/mysql/mysql.pidlog_error=/var/log/mysql/error.logcharacter_set_server = utf8max_connections=3600