设为首页 收藏本站
查看: 1437|回复: 0

[经验分享] docker 学习笔记(二): Docker的项目案例

[复制链接]

尚未签到

发表于 2019-2-21 12:24:56 | 显示全部楼层 |阅读模式
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的常用参数
DSC0000.png

DSC0001.png


1.3 一键部署lnmp

tree compose_lnmp
DSC0002.png


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

DSC0004.png

DSC0005.png


docker-compose -f docker-compose.yml up -d  ### 后台查看
docker-compose -f docker-compose.yml ps     ### 查看运行的容器
DSC0006.png

DSC0007.png

DSC0008.png


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/
DSC0009.png


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


1.5 一键部署 Nginx 反向代理 Tomcat

tree compose_nginx_tomcat/
DSC00012.png


部署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  ### 一直到执行结束

DSC00013.png


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

DSC00015.png


访问测试:
http://172.17.100.12:82/
DSC00016.png


二:构建持续集成环境

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


2.2 发布流程设计
DSC00018.png


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
---

DSC00019.png


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

DSC00020.png
DSC00021.png


打关浏览器:
http://172.17.100.13
用户名: admin  密码: Harbor12345
增加一个项目flyfish
DSC00022.png

DSC00023.png

DSC00024.png


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

DSC00025.png


登录docker 仓库
docker login 172.17.100.13
输入用户名 admin  密码: Harbor12345
DSC00026.png


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

DSC00027.png

三:实现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
DSC00028.png

DSC00029.png


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

DSC00030.png


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 .
DSC00031.png



生成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
----
DSC00032.png


打开jenkins 的web 页面:
http://172.17.100.11:8080

DSC00033.png

DSC00034.png

DSC00035.png

DSC00036.png

DSC00037.png


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

DSC00038.png
DSC00039.png


将镜像上传打一个tag
docker tag 172.17.100.13/tomcat:v1 172.17.100.13/flyfish/tomcat:v1
docker push 172.17.100.13/flyfish/tomcat
DSC00040.png


打开harbor 仓库查看是否提交
DSC00041.png


DSC00042.png

3.3.4 配置jenkins 构建
DSC00043.png

DSC00044.png

DSC00045.png

DSC00046.png

DSC00047.png

DSC00048.png

DSC00049.png

DSC00050.png

DSC00051.png

DSC00052.png

DSC00053.png


新建一个工程
DSC00054.png

DSC00055.png

DSC00056.png

DSC00057.png

DSC00058.png

DSC00059.png

DSC00060.png

DSC00061.png

DSC00062.png

DSC00063.png

DSC00064.png

DSC00065.png

DSC00066.png

DSC00067.png

DSC00068.png


DSC00069.png

四:容器服务注册与发现

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
DSC00070.png
DSC00071.png
DSC00072.png


放在后台运行:
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 # 集群节点详细信息
DSC00073.png
DSC00074.png

  ###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
DSC00075.png

DSC00076.png


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

DSC00077.png


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
DSC00078.png

DSC00079.png


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
DSC00080.png

DSC00081.png


更改nginx 的配置文件增加注册时候生成的配置文件目录
cd /usr/local/nginx/conf
mkdir vhost
vim nginx.conf
----
在最后增加一个目录
include vhost/*.conf
----
DSC00082.png


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;
}
}
----
DSC00083.png


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 &
DSC00084.png

DSC00085.png

DSC00086.png





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-675352-1-1.html 上篇帖子: docker 学习笔记(一)Docker的介绍与安装使用 下篇帖子: 开发自己的 chart
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表