您的位置:首页 > 运维架构 > Docker

docker 学习笔记(二): Docker的项目案例

2018-05-13 10:41 393 查看

docker 项目案例

标签(空格分隔): docker的部分

  • 一:docker的Compose 打包部署工具
  • 二:CI/CD 构建持续集成环境
  • 三:实现CI/CD发布项目
  • 四:容器服务注册与发现

一:docker的Compose 打包部署工具

1.1:compose的介绍

1 、介绍
Compose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后
一条命令管理所有服务,比如启动、停止、重启等。
2 2 、安装
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
或者
pip install docker-compose
3 3 、 YAML 文件格式及编写注意事项
YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多。
YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来。
YAML文件格式注意事项:
1.不支持制表符tab键缩进,需要使用空格缩进
2.通常开头缩进2个空格
3.字符后缩进1个空格,如冒号、逗号、横杆
4.用井号注释
5.如果包含特殊字符用单引号引起来
6.布尔值(true、false、yes、no、on、off)必须用引号括起来,这样分析器会将他们解释为字符串。

1.2 compose的常用参数

1.3 一键部署lnmp

tree compose_lnmp

docker-compose -f docker-compose.yml up  一直到构建接收

docker-compose -f docker-compose.yml up -d  ### 后台查看

docker-compose -f docker-compose.yml ps     ### 查看运行的容器

1.4 wordpress 测试

mv wordpress-4.7.4-zh_CN.tar.gz /root/compose_lnmp/wwwroot/
cd /root/compose_lnmp/wwwroot/
tar -zxvf /root/compose_lnmp/wwwroot/

测试: http://172.17.100.12:81/wordpress/

此处用户名密码在docker-compose.yml里面已经定义好了
数据库主机填写:mysql


1.5 一键部署 Nginx 反向代理 Tomcat

tree compose_nginx_tomcat/

部署jdk

cp -p jdk-8u45-linux-x64.tar.gz /root/compose_nginx_tomcat/
cd /root/compose_nginx_tomcat/
tar -zxvf jdk-8u45-linux-x64.tar.gz
mv jdk1.8.0_45/ /usr/local/

1.6 执行compose构建

docker-compose -f docker-compose.yml up  ### 一直到执行结束

docker-compose -f docker-compose.yml up -d
docker-compose -f docker-compose.yml ps

访问测试:
http://172.17.100.12:82/

二:构建持续集成环境

2.1 CI(持续集成)/CD(持续交付/持续部署)

2.2 发布流程设计

2.3 构建docker的harbor的私用仓库

下载harbor 软件:harbor-offline-installer-v1.1.2.tgz
wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz
tar xvf harbor-offline-installer-v1.1.2.tgz

mv harbor /usr/local/
cd /usr/local/harbor

----
vim harbor.cfg
---
更改harbor 的hostname
hostname = 172.17.100.13
---

执行harbor脚本开始构建
cd /usr/local/harbor/
./install.sh   #### 一直到构建完毕

····
····
····

---

docker ps -a


打关浏览器:
http://172.17.100.13

用户名: admin  密码: Harbor12345

增加一个项目flyfish

更改增加一个registries
vim /etc/docker/daemon.json
----
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries":["172.17.100.13"]      ### 增加一行
----

然后重启docker

service docker restart

登录docker 仓库

docker login 172.17.100.13

输入用户名 admin  密码: Harbor12345

给上传仓库的镜像 打一个tag
docker tag nginx:latest 172.17.100.13/flyfish/nginx:latest

上传push 到镜像仓库
docker push 172.17.100.13/flyfish/nginx

三:实现CI/CD发布项目

3.1: 环境信息

172.17.100.11    jenkins
172.17.100.12    docker (tomcat)
172.17.100.13    git/harbor

3.2.1 安装git 服务

172.17.100.13

yum install -y git

useradd git && echo git |passwd  git --stdin
su - git

mkdir solo.git
cd solo.git
git --bare init

172.17.100.11:

cd /root/

git clone https://github.com/b3log/solo.git

cd solo/src/main/resources

vim latke.properties
---
serverHost=172.17.100.12

serverPort=8888
---

模拟提交solo 到git

mkdir test
cd test
git clone root@172.17.100.13:/home/git/solo.git

cp -ap /root/solo/* /root/test/solo/

cd /root/test/solo/

git add .
git commit -m "all"
git push oriagin master

3.2.2 安装 jenkins

配置jenkins

mkdir jenkins
cd jenkins
vim Dockerfile
----
FROM jenkins
USER root
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list && \
wget http://mirrors.163.com/.help/sources.list.jessie -O /etc/apt/sources.list
RUN apt-get update && apt-get install -y git libltdl-dev
----

docker build -t jenkins:v1 .

生成jenkins 容器:

docker run -d \
--name jenkins \
-p 8080:8080 \
-v /var/jenkins_home/:/var/jenkins_home \
-v /usr/local/apache-maven-3.5.0:/usr/local/maven \
-v /usr/local/jdk1.8.0_45:/usr/local/jdk \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
-v ~/.ssh:/root/.ssh \
jenkins:v1

----

打开jenkins 的web 页面:

http://172.17.100.11:8080

3.2.3 配置tomcat镜像并提交harbor仓库

172.17.100.12 : (tomcat)
引用构建一个tomcat的基础镜像
---
FROM centos:7
MAINTAINER www.aliangedu.com

RUN yum install unzip iproute -y

ENV JAVA_HOME /usr/local/jdk

ADD apache-tomcat-8.0.46.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat

WORKDIR /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh", "run"]

---

docker build -t 172.17.100.13/tomcat:v1 .

提交镜像到仓库:harbor

docker login 172.17.100.13


将镜像上传打一个tag

docker tag 172.17.100.13/tomcat:v1 172.17.100.13/flyfish/tomcat:v1

docker push 172.17.100.13/flyfish/tomcat

打开harbor 仓库查看是否提交

3.3.4 配置jenkins 构建

新建一个工程

四:容器服务注册与发现

4.1 :Consul的介绍与安装

1 、介绍
Consul是一个分布式、高可用性,在基础设施中发现和配置服务的工具。
2 、安装
下载二进制Consul包:https://www.consul.io/downloads.html
# unzip consul_0.9.2_linux_amd64.zip
# mv consul /usr/bin
3 、部署
# consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=172.17.100.11 \
-client=0.0.0.0 \
-node=server01



放在后台运行:

nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=172.17.100.11 -client=0.0.0.0 -node=server01 & > /var/log/consul.log &

4.2 consul 的相关命令

查看集群信息:
consul members
consul info |grep leader
consul catalog services
通过 HTTP API 获取集群信息 :
curl 127.0.0.1:8500/v1/status/peers # 集群server成员
curl 127.0.0.1:8500/v1/status/leader # 集群Raft leader
curl 127.0.0.1:8500/v1/catalog/services  # 注册的所有服务
curl 127.0.0.1:8500/v1/catalog/services/nginx # 服务信息
curl 127.0.0.1:8500/v1/catalog/nodes # 集群节点详细信息


###4.3手动注册一个服务到consul中

curl -X PUT -d \
'{"id": "jetty","name": "service_name","address": "172.17.100.12","port": 8081,"tags": ["test"],"checks": [{"http":
"http://172.17.100.11:8081/","interval": "5s"}]}' \
http://172.17.100.11:8500/v1/agent/service/register

4.3 Docker+Registrator+Consul实现容器服务自动加入Nginx集群

consul- template :
一个守护程序,用于实时查询consul集群数据,并更新文件系统上的任意数量的指定模板,生成配置文件,更新完成后可以选择运行任何Shell命令。

gliderlabs/registrator:
检查容器运行状态自动注册和注销Docker容器的服务到服务配置中心。目前支持Consu
l、etcd和SkyDNS2。

https://github.com/hashicorp/consul-template
https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip

4.4 Docker 主机启动注册器

172.17.100.12 上面:

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=172.17.100.12 \
consul://172.17.100.11:8500

4.5 安装nginx 服务器

172.17.100.11

yum install -y gcc gcc-c++ make openssl-devel pcre-devel
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1/
./configure --prefix=/usr/local/nginx && make -j 2 && make install

cd /usr/local/nginx

sbin/nginx

ps -ef |grep nginx

更改nginx 的配置文件增加注册时候生成的配置文件目录

cd /usr/local/nginx/conf

mkdir vhost

vim nginx.conf
----
在最后增加一个目录

include vhost/*.conf
----

4.6 配置consul-template

172.17.100.11 上面配置

unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin/

mkdir consul
cd consul
vim nginx.ctmpl
----
upstream http_backend {
#  ip_hash;
{{range service "nginx"}}
server {{ .Address }}:{{ .Port }};
{{ end }}
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://http_backend;
}
}
----

nohup consul-template -consul-addr 172.17.100.11:8500 -template "./nginx.ctmpl:/usr/local/nginx/conf/vhost/site.conf:/usr/local/nginx/sbin/nginx -s reload" -log-level=info & > /var/log/site-nginx.log &

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  docker compose CI/CI
相关文章推荐