docker的搭建和简单应用
dockerserver端安装
先下载docker的yum源
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
然后安装
yum -y install docker-ce
在/etc/docker/里修改daemon.json文件,修改成如下
{
"registry-mirrors":[ "https://registry.docker-cn.com" ]
}
重启守护进程
systemctl daemon-reload
启动docker命令
systemctl start docker
查看版本号的命令
docker --version
查看公网上的镜像
docker search centos: (名字,冒号后边的是版本不写默认是latest版本)
查看公网镜像也可以加详细的参数,比如100星级以上
docker search centos -f stars=
在公网上下载镜像,pull
docker pull centos: (名字,冒号后边是版本号不写默认是latest)
查看镜像命令
docker images
想要自己建立镜像需要偶先创建文件目录
mkdir -p /root/dockerfile/library/centos/
cd /root/dockerfile/library/centos//
在目录里创建容器里的简单执行脚本
vim docker.sh
#!/bin/bash
while true
do
echo "苏哥"
sleep
done
然后写镜像文件Dockerfile名字一定不能错
FROM centos #是基于那个镜像创建,没有的话会去公网下载
LABEL MAINTATNER="SU"#标签,创建者名字
RUN ln -sfv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#创建之前修改时区
COPY docker.sh /home/test/#将脚本复制到镜像里的test下,路径是相对Dockerfile的文件
RUN chmod +x /home/test/docker.sh#给镜像里边的脚本加执行权限
CMD ["/home/test/docker.sh"]#执行脚本,启动容器时,必须要有一个进程在执行,要不启不
了
建立镜像
docker build -t su/centos7: . (注意需要在有Dockerfile的目录里输入命令)
启动容器
docker run -dit su/centos7: /bin/bash(可以加/bin/bash,也可以不加)
docker run -dit --name sunan su/centos7: (启动的时候给容器器个名字叫sunan)
-d :放在后天运行
-i:可以交互输入命令
-t:启动一个伪终端
-c:指定几个cpu来运行内存
-m:指定几个内容。
隐形参数--name 给容器起名。
看容器的日志
docker logs sunan(可以是名字,也可以是id)
看启动的容器
docker ps -a(加a是看所有)
开始运行容器
docker start xxx(可以是容器的名字,也可以是容器的id)
重启一个容器
docker restart xxx(可以是容器的名字,也可以是id)
停止运行容器
时时的输出容器的资源使用状况
docker stats xxx --no-stream(容器的名字或者id,类似top命令)
加参数--no-stream是只输出一次就可
docker stop xxx(可以是容器的名字,也可以是容器的id)
切进容器的命令
docker attach xxx(可以是容器的名字,也可以是容器的id)
exit是退出容器
杀容器
docker kill xxx (容器的名字,或者容器的id,直接删掉容器的进程,使其处于停止。)
删除容器
docker rm xxx(容器的名字,或者容器的id,必须先停止容器以后才能删,)
-f 强删
删除镜像
docker rmi xxx (容器的名字,或者容器的id)
-f强删
将一个更改过的容器封装成一给性的镜像(先进去一个容器,搭建个项目,退出从封装)
docker commit xxx(原来的容器,更改过的) xxx/xxx(新的镜像叫什么名字)
不进容器,直接发布命令
docker exec (-dit) xxx(容器的名字,或者id) ls /(想要执行的命令)
参数
-dit直接可以切进去
容器和属主机直接的复制文件命令
docker cp /tmp/dockerfile(文件的路径)xxx:/tmp(容器的名字或者ip,冒号后面是地址)(
也是吧什么复制到哪里的格式)
创建一个新的容器,
docker create -it xxx(镜像的名字或者id)(用法跟run一样,只是create不启动容器,想要
启动还需要用start命令启动下)
查看容器进程与源镜像做对比看哪里不一样
docker diff xxx(容器的名字或者id)
返回的结果C是多了什么
A是少了什么
监控容器的变化
docker events
导出容器
docker export xxx(容器的名字或者id) > yyyy.tar(导出来的容器叫什么名字)
将导出的容器创建为一个镜像
docker import yyy.tar(导出来的容器的名字)zzz(导入要创建的镜像叫什么名字)
查看镜像的历史记录
docker history xxx (镜像的名字或者id)
查看镜像的详细信息
docker inspect xxx(镜像的民族或者id)
导出镜像
docker save xxx(要导出的镜像的名字或者id) > yyy.tar(导出来叫什么明教)
导入镜像
docker load < yyy.tar (需要导入的镜像的名字。有相同的镜像是不让导入的)
暂停容器的命令(unpause是回复暂停的容器)
docker pause xxx(容器的名字或者id)
查看容器的端口映射协议
docker port xxx(容器的名字或者id)
想要在启动的时候添加容器的映射端口
docker run -dit --name xx -p : yy(xx容器起名叫,:80将属主机的80端口映射到容器
里的80端口,yy要启动的镜像的名字)
给容器改名
docker rename xxx yyy(xxx原来的名字,yyy想要叫的名字)
用于克隆镜像的
docker tag xxx xxx1(将什么,克隆成什么,可以当场软连接,要删一起删)
调整启动以后的容器的cpu和内存
docker update -c xxx(需要调整的)
-c调整cpu
-m调整内存。需要多少直接在后边写就可以了
监控容器的的退出状态
docker wait xxx(容器的名字或者id)
创建一个自定义网路
docker network creat lnmp (创建个自定义网路叫lnmp)
查看docker网络
docker network ls查看所有网桥网路
brctl show同上
login用于登陆docker hub官方公有的仓库
logout用于登出官方公有的仓库
push将本地的镜像提交到docker hub
挂载容器卷
分为两种,volume卷放的地方是指定的,没有回自动创建,不特别指定都是volume类型
命令docker volume ls 查看系统卷(用volume挂载不会顶掉原来有的东西,会直接出现到卷里)
卷放的地方/var/lib/docker/volumes/
docker volume create xxx (创建一个卷,会固定放到指定的地方)
查看自volume的卷的命令
docker volume ls
想要挂载卷需要在启动的时候挂
docker run -dit --name nginx-test -p : --mount src=xxx,dst=/usr/share/nginx/html
nginx(src后边直接写卷的名字,系统会到指定的地方去找,dst写挂到哪里,事例写的是挂到
Nginx的网页目录下)
第二种自己创建的目录挂载
mkdir -p /www/html
docker run -dit --name nginx-test2 -p : --mount
type=bind,src=/www/html/,dst=/usr/shar/nginx/html (用自己创建的挂在会顶掉原理有的)
用docker搭建一个lnmp的环境
首先要自己创建一个叫lnmp的网路
docker network create lnmp
然后启动mysql的镜像
[root@localhost ~]# docker run -dit --name lnmp_mysql --network lnmp -p :
--mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD= mysql:5.6 --
character-set-server=utf8
想容器里创建一个库
[root@localhost ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -
p"$MYSQL_ROOT_PASSWORD" -e "create database wp"'
提示一下创建成功
mysql: [Warning] Using a password on the command line interface can be insecure.
然后开始部署php和Nginx
先创建一个网页目录
mkdir -p /app/wwwroot
然后启动php和ngin的镜像(前题需要下载好richarvey/nginx-php-fpm这个镜像)
[root@localhost ~]# docker run -dit --name lnmp_web --net lnmp -p : --mount
type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
将博客的包解压到自己设置好的挂载目录/app/wwwroot/下
[root@localhost ~]# tar xf wordpress-4.7.-zh_CN.tar.gz -C /app/wwwroot/
[root@localhost ~]# cd /app/wwwroot/
然后打开浏览器去访问你的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/ dev $br_name
#删除已经存在的网卡配置
ip addr del 192.168.1.120/ 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/@192.168.200.2(指定网桥br0给test2容器,ip是
192.168..199掩码24位网关是192.168.200.)
docker的重点镜像制作
常用的指令
FROM 构建新的镜像是基于那个镜像的,例如:FROM centos:
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
ENV 设置容器内环境变量,例如ENV MYSQL_ROOT_PASSWORD
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= 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:
MAINTAINER www.aliangedu.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12..tar.gz /tmp RUN cd /tmp/nginx-1.12. && \
./configure --prefix=/usr/local/nginx && \
make -j && \ #(-j 是启动即个核来编译)
make install RUN rm -rf /tmp/nginx-1.12.* && yum clean all COPY nginx.conf /usr/local/nginx/conf WORKDIR /usr/local/nginx
EXPOSE
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 ; server {
listen ;
server_name localhost;
root html;
index index.html index.php; location ~ \.php$ {
root html;
fastcgi_pass lnmp_php:;
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:
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..tar.gz /tmp/ RUN cd /tmp/php-5.6. && \
./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 && \
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.* && yum clean all WORKDIR /usr/local/php
EXPOSE
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..tar.gz
│ └── nginx.conf
├── tomcat
│ ├── apache-tomcat-8.0..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..tar.gz
│ └── nginx.conf
├── php
│ ├── Dockerfile
│ ├── php-5.6..tar.gz
│ └── php.ini
└── wwwroot
└── index.php directories, files
lnmp的入口文件
[root@localhost compose_lnmp]# vim docker-compose.yml version: ''
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- :
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:
- :
networks:
- lnmp
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
command: --character-set-server=utf8
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE: wordpress
MYSQL_USER: user
MYSQL_PASSWORD: user123 networks:
lnmp:
lnmp的mysql的配置文件
[root@localhost compose_lnmp]# vim my.cnf
[mysqld]
user=mysql
port=
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=
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 ; server {
listen ;
server_name localhost;
root html;
index index.html index.php; location ~ \.php$ {
root html;
fastcgi_pass php:;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
lnmp的Nginx目录下的Dockerfile文件
FROM centos:
MAINTAINER www.Mr_chen.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12..tar.gz /tmp RUN cd /tmp/nginx-1.12. && \
./configure --prefix=/usr/local/nginx && \
make -j && \
make install RUN rm -rf /tmp/nginx-1.12.* && yum clean all COPY nginx.conf /usr/local/nginx/conf WORKDIR /usr/local/nginx
EXPOSE
CMD ["./sbin/nginx", "-g", "daemon off;"]
~
~
lnmp里的php目路里的Dockerfile文件
FROM centos:
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..tar.gz /tmp/ RUN cd /tmp/php-5.6. && \
./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 && \
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.* && yum clean all WORKDIR /usr/local/php
EXPOSE
CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]
Nginx-Tomcat的接口文件
[root@localhost compose_nginx_tomcat]# cat docker-compose.yml
version: ''
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- :
networks:
- lnmt
volumes:
- ./webapps:/opt/webapps tomcat01:
hostname: tomcat01
build: ./tomcat
networks:
- lnmt
volumes:
- /usr/local/jdk1..0_45:/usr/local/jdk1..0_45
- ./webapps:/usr/local/apache-tomcat-8.0./webapps tomcat02:
hostname: tomcat02
build: ./tomcat
networks:
- lnmt
volumes:
- /usr/local/jdk1..0_45:/usr/local/jdk1..0_45
- ./webapps:/usr/local/apache-tomcat-8.0./webapps mysql:
hostname: mysql
image: mysql:5.6
ports:
- :
networks:
- lnmt
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD:
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 ; upstream www.example.com {
#ip_hash;
server tomcat01:;
server tomcat02:;
} server {
listen ;
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:
MAINTAINER www.Mr_chen.com
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel
ADD nginx-1.12..tar.gz /tmp RUN cd /tmp/nginx-1.12. && \
./configure --prefix=/usr/local/nginx && \
make -j && \
make install RUN rm -rf /tmp/nginx-1.12.* && yum clean all COPY nginx.conf /usr/local/nginx/conf WORKDIR /usr/local/nginx
EXPOSE
CMD ["./sbin/nginx", "-g", "daemon off;"]
Nginx-Tomcat里的Tomcat的Dockerfile
[root@localhost tomcat]# cat Dockerfile
FROM centos:
MAINTAINER www.Mr_chen.com ENV JAVA_HOME /usr/local/jdk1..0_45 ADD apache-tomcat-8.0..tar.gz /usr/local
COPY server.xml /usr/local/apache-tomcat-8.0./conf
RUN sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/apache-tomcat-8.0./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=
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=
没有的配置文件就直接从安装的号的Tomcat,php里的配置文件复制一份过来即可
docker的搭建和简单应用的更多相关文章
- docker快速搭建几个常用的第三方服务
本次和大家分享的内容是使用docker快速搭建工作中常用的第三方的服务,对于有一些互联网背景的公司来说,以下几个服务都是很需要的:redis,rabbit,elasticsearch: 本篇涉及内容深 ...
- Docker Swarm搭建多服务器下Docker集群
对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- windows Docker Desktop 搭建mysql,mssql和redis服务
其实网上关于docker上搭建mysql的文章已经很多了,只是今晚自己搭建的时候遇到一些问题,记录一下 1.首先是pull image , docker pull mysql 2.启动服务 docke ...
- docker:搭建lamp应用
(原文http://blog.csdn.net/smallfish1983/article/details/40108999?utm_source=tuicool) LAMP 指的 Linux(操作系 ...
- 一文教您如何通过 Docker 快速搭建各种测试环境(Mysql, Redis, Elasticsearch, MongoDB) | 建议收藏
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- Linux 使用 docker 下搭建xunsearch 搜索引擎服务
Linux 使用 docker 下搭建 xunsearch 搜索引擎服务 安装 docker 环境(菜鸟教程有说明) 安装docker说明 下载并运行 xunsearch 的服务端:docker安装x ...
- Docker + WordPress搭建个人博客
WordPress是目前非常受欢迎的开源博客系统,今天使用Docker + WordPress搭建个人博客,整个过程非常丝滑. 搭博客先要准备域名和服务器,昨天在阿里云买了个.top的域名花了5块钱( ...
- 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...
随机推荐
- Python开发【Tornado】:异步Web服务(二)
真正的 Tornado 异步非阻塞 前言: 其中 Tornado 的定义是 Web 框架和异步网络库,其中他具备有异步非阻塞能力,能解决他两个框架请求阻塞的问题,在需要并发能力时候就应该使用 Torn ...
- 双态运维分享之:业务场景驱动的服务型CMDB
最近这几年,国内外CMDB失败的案例比比皆是,成功的寥寥可数,有人质疑CMDB is dead?但各种业务场景表明,当下数据中心运维,CMDB依然是不可或缺的一部分,它承载着运维的基础,掌握运维的命脉 ...
- 商铺项目(Logback配置与使用)
<?xml version="1.0" encoding="utf-8"?> <configuration debug="false ...
- 最长括号化长度 java
1:求最长括号, ()(()()( 例如,它的最长符合括号化的长度为4 package com.li.huawei; import java.util.Arrays; import java.util ...
- google浏览器插件安装
1:安装本地插件,直接将下载好的crx插件拖入到 chrome://extensions/ 的空白处 http://www.cnplugins.com/tool/outline-instal ...
- PAT 1094 The Largest Generation[bfs][一般]
1094 The Largest Generation(25 分) A family hierarchy is usually presented by a pedigree tree where a ...
- 《Python网络编程基础》第四章 域名系统
域名系统(DNS) 是一个分布式的数据库,它主要用来把主机名转换成IP地址.DNS以及相关系统之所以存在,主要有以下两个原因: 它们可以使人们比较容易地记住名字,如www.baidu.com. 它 ...
- C++之路
我学习C/C++也有两年了.开始是偏爱C语言和C++的语法特性强大,想用来做游戏开发.在深入学习的同时,逐渐了解到C++可以做很多事.大型项目需要用到运行效率高的C++,虽然运行效率越高,开发效率就要 ...
- Qt+json
Json文件是这样: { "first fruit": { "describe":"an apple", "icon": ...
- Anchor、Dock
转:http://blog.sina.com.cn/s/blog_7f7cd96601013trt.html 在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大 ...