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@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
[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:
[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
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; } } }
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;"] ~ ~
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"]
[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:
[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; } } }
[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;"]
[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"]
[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