字段 | 描述 |
---|---|
build dockerfile context | 指定Dockerfile文件名构建镜像.上下文路径 |
image | 指定镜像 |
command | 执行命令,覆盖默认命令 |
container name | 指定容器名称,由于容器名称是唯一的, 如果指定自定义名称,则无法scale |
deploy | 指定部署和运行服务相关配置,只能在Swarm模式使用 |
environment | 添加环境变量 |
networks | 加入网络 |
ports | 暴露容器端口,与-p相同,但端口不能低于60 |
volumes | 挂载宿主机路径或命令卷 |
restart | 重启策略,默认no,always, no-failure,unless-stoped |
hostname | 容器主机名 |
字段 | 描述 |
---|---|
build | 重新构建服务 |
ps | 列出容器 |
up | 创建和启动容器 |
exec | 在容器里面执行命令 |
scale | 指定一个服务容器启动数量 |
top | 显示容器进程 |
logs | 查看容器输出 |
down | 删除容器、网络、数据卷和镜像 |
stop/start/restart | 停止/启动/重启服务 |
Consul 是 HashiCorp 公司推出的开源工具, 用于实现分布式系统的服务发现与配置
所有主机安装docker环境
主机 | 所需软件 |
---|---|
192.168.8.19 | docker、concul、agent/server/template、nginx手工编译安装 |
192.168.8.20 | docker、nginx、httpd |
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
或
直接上传docker_compose包
chmod +x docker-compose
cp -p docker-compose /usr/local/bin
mkdir /root/compose_nginx
cd compose_nginx/
mkdir nginx wwwroot
cd nginx
上传nginx-1.12.2.tar.gz压缩包
vim Dockerfile
#复制下面的内容并写进去
FROM centos:7
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null &&\
rm -rf /mnt/nginx-1.12.2
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
---------------------------------------------------------------------------------------------
cd wwwroot
vim index.html
hello world
vim /root/compose_nginx/docker-compose.yml
version: '3'
services:
nginx:
hostname: nginx
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 1216:80
- 1217:443
networks:
- mynginx
volumes:
- ./wwwroot:/usr/local/nginx/html
networks:
mynginx:
docker-compose -f docker-compose.yml up -d #基于yml文件运行启动
docker-compose ps #使用Compose容器编排
主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
---|---|---|---|
服务器 | Centos 7.4-x86_64 | consul/192.168.8.19 | Docker、Compose、Consul、Consul-template |
服务器 | Centos 7.4-x86_64 | registrator/192.168.8.20 | Docker、registrator |
cd /opt/
mkdir consul
cd consul/
#上传consul_0.9.2_linux_amd64.zip压缩包
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/ #移动到/usr/bin目录相当于可以直接被系统使用
consul agent \ #构建agent功能
> -server \ #server模式
> -bootstrap \ #前端框架
> -ui \ #可被访问的web页面
> -data-dir=/var/lib/consul-data \
> -bind=192.168.8.19 \
> -client=0.0.0.0 \ #监听客户端所有地址
> -node=consul-server01 &> /var/log/consul.log &
consul members #查看集群信息
consul info | grep leader
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.8.19 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
curl 127.0.0.1:8500/v1/status/peers #查看集群server成员
curl 127.0.0.1:8500/v1/status/leader #集群 Raf leader
curl 127.0.0.1:8500/v1/catalog/services #注册的所有服务
curl 127.0.0.1:8500/v1/catalog/nginx #查看 nginx 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes #集群节点详细信息
可检查容器运行状态自动注册,还可以注销docker容器的服务 到服务配置中心,目前支持 Consul、Etcd和SkyDNS2
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.8.20 \
consul://192.168.8.19:8500
docker run -itd -p 83:80 --name test-1 -h test1 nginx
docker run -itd -p 84:80 --name test-2 -h test2 nginx
docker run -itd -p 88:80 --name test-3 -h test3 httpd
docker run -itd -p 89:80 --name test-4 -h test4 httpd
curl 127.0.0.1:8500/v1/catalog/services
在consul/192.168.8.19上进行操作
vim /root/consul/nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}}; #此处引用的变量会指向后端的地址和端口(动态变化)
{{end}}
}
server {
listen 83; #ngixn的监听端口
server_name localhost 192.168.8.19; #反向代理的IP地址(前端展示的NG服务的IP)
access_log /var/log/nginx/klj.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr; #后端真实IP
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #转发地址
proxy_pass http://http_backend;
}
}
upstream http_backend {
{{range service "nginx"}}
server {{.Address}}:{{.Port}};
{{end}}
}
server {
listen 83;
server_name localhost 192.168.8.19;
access_log /var/log/nginx/klj.cn-access.log;
index index.html index.php;
location / {
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://http_backend;
}
}
#上传压缩包nginx-1.12.2.tar.gz
yum install gcc pcre-devel zlib-devel -y
tar zxvf nginx-1.12.2.tar.gz -C /opt
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx
make && make install
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types; #默认存在的
include vhost/*.conf; #添加虚拟主机目录为了让那个识别vhost/*.conf的文件(consul动态生成的配置文件就会放在这里)
default_type application/octet-stream;
mkdir /usr/local/nginx/conf/vhost #创建虚拟主机目录
mkdir /var/log/nginx #创建日志文件目录
ln -s /usr/local/nginx/sbin/nginx /usr/sbin
nginx
#上传 consul-template_0.19.3_linux_amd64.zip 包到/root 目录下
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin/
consul-template -consul-addr 192.168.8.19:8500 -template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
cat /usr/local/nginx/conf/vhost/test.conf
在 registrator/192.168.8.20 服务端注册
docker run -itd -p 85:80 --name test-5 -h test5 nginx