Docker与自动化部署

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云解析 DNS,旗舰版 1个月
简介: Docker安装与基本使用虚拟机系统centOS7 miniDocker的应用场景1.简化配置,同一Docker的配置可以在不同 环境中使用,降低了硬件要求和应用环境之间的耦合度.

Docker安装与基本使用

虚拟机系统centOS7 mini

Docker的应用场景

1.简化配置,同一Docker的配置可以在不同 环境中使用,降低了硬件要求和应用环境之间的耦合度. 
2.代码的流水线管理.代码从开发者的假期到最终在生产环境上的部署,需要经过很多的中间环境.而每一个中间环境都有自己微小的蛤贝,Docker给应用提供一个从开发到上线均一致的环境,让代码的流水线变得简单. 
3.提高开发效率 
4.隔离应用,使应用松耦合 
5.快速部署 
docker [CMD] [options] 
基本命令与释义 
attach进入到正在运行的容器 
build由Dockerfile构建镜像 
commit由容器的改变创建一个新的镜像 
cp在容器中复制文件或文件夹到本地文件或文件夹中. 
logs获取容器日志 
network管理Docker网络 
node管理Docker集群节点 
pause暂停一个或多个容器内的所有进程 
port列表端口映射或用于容器的特定的映射 
ps列出容器 
pull从镜像仓库中拉出镜像 
push上传镜像 
rename重命名镜像 
restart重启一个容器 
rm 删除容器 
rmi删除镜像 
run在容器中运行命令 
search在Docker Hub中查找镜像 
service管理Docker服务 
start启动停止的容器 
stats显示容器的实时流资源使用统计信息 
stop停止正在运行的容器 
swarm管理Docker集群 
tag将镜像标记到存储库中 
top显示容器的正在运行的进程 
volume管理Docker卷

docker run [options] 
常用参数与释义(主要介绍docker run)

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; 
-d: 后台运行容器,并返回容器ID; 
-i: 以交互模式运行容器,通常与 -t 同时使用; 
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; 
–name=”nginx-lb”: 为容器指定一个名称; 
–dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; 
–dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; 
-h “mars”: 指定容器的hostname; 
-e username=”ritchie”: 设置环境变量; 
–env-file=[]: 从指定文件读入环境变量; 
–cpuset=”0-2” or –cpuset=”0,1,2”: 绑定容器到指定CPU运行; 
-m :设置容器使用内存最大值; 
–net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/Container: 四种类型; 
–link=[]: 添加链接到另一个容器; 
–expose=[]: 开放一个端口或一组端口;

1.安装Docker 
这里写图片描述 
2.加入开机启动 
这里写图片描述 
3.启动Docker 
这里写图片描述 
4.下载镜像 
这里写图片描述 
5.查看本地镜像 
这里写图片描述 
6.启动容器 
这里写图片描述 
7.查看容器 
这里写图片描述

搭建本地镜像仓库

仓库IP 192.168.247.142

1.拉取registry镜像 
这里写图片描述

2.启动镜像仓库容器并且映射虚拟机端口5000和容器端口5000 
这里写图片描述

3.将本地目录/opt/data/registry挂载到容器内目录/tmp/registry中 
这里写图片描述

4.用busybox做试验 
这里写图片描述

5.在需要拉取镜像的虚拟机上创建/etc/docker/daemon.json(这一步很关键,解决的http和https服务冲突问题) 
这里写图片描述

6.向私有仓库中上传镜像

这里写图片描述

docker的网络配置

1.查看docker的所有网络 
这里写图片描述

2.指定查看bridge网络的配置 
这里写图片描述

3.启动两个busybox做实验,分别是container1和container2 
这里写图片描述

4.再次查看bridge,这时可以看到container1和container2已经被加入bridge中了 
这里写图片描述

5.也可以进入到container1中,用ifconfig查看网络配置 
这里写图片描述 
6.ping 
这里写图片描述 
7. 
这里写图片描述 
8.自建桥接模式的网络isolated_nw 
这里写图片描述 
9.查看网络能看到已经建立的isolated_nw 
这里写图片描述 
10.启动container3时指定网络isolated_nw,则可以加入自建网络中 
这里写图片描述

Tomcat与Mysql

这部分我把网上的教程基本都做了一遍,但是由于我对javaweb项目的结构了解不透彻,web应用部署也不熟悉,所以没能达到预期的要求。以下我分别列出Tocmcat和Mysql容器的启动和使用。还有部分参数解释。

  1. docker run -it –rm -p 8888:8080 tomcat:8.0

虚拟机端口:容器端口 tomcat镜像指定 
这里写图片描述

这里写图片描述

  1. docker run –name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 
    指定容器名,mysql密码,镜像

这里写图片描述

将mysql与web应用容器相连的命令是: 
docker run –name some-app –link some-mysql:mysql -d application-that-uses-mysql 
启动web应用容器,用–link连接mysql容器

官方文档指出,–link几乎已经废弃

单容器应用部署实践

说明:部署一个单页面的应用 
参考网址:https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md

1.启动容器会自动下载dockersanples/static-site镜像 
这里写图片描述

2.启动容器 
这里写图片描述

3.查看端口 
这里写图片描述

4.查看容器运行情况 
这里写图片描述

5.在浏览器中输入地址和端口号,就可以看到网页 
这里写图片描述

6.创建文件夹flask-app 
这里写图片描述

7.flask-app下有四个文件 
这里写图片描述

8.构建镜像 
这里写图片描述

9.启动容器,将虚拟机8888端口映射到容器的5000端口 
这里写图片描述

10.在浏览器中输入网址,查看运行效果 
这里写图片描述

多容器应用部署实践

说明:用docker compose和docker deploy stack 部署 
参考网址:https://github.com/docker/labs/blob/master/beginner/chapters/votingapp.md 
应用说明:该应用基于以下镜像搭建 
Python 
Node.js 
redis 
.net 
postgress

1.下载工程 
这里写图片描述

2.创建Docker Swarm 
这里写图片描述

3.docker stack deploy是在Docker Swarm模式下docker-compose的替代 
这里写图片描述

4.查看启动的服务 
这里写图片描述

5.查看容器的运行情况 
这里写图片描述

6.浏览器中输入虚拟机地址,这是5000端口,是投票服务 
这里写图片描述

7.浏览器中输入虚拟机地址,这是5001端口,投票统计服务 
这里写图片描述

8.镜像更新,只需要修改虚拟机中的配置文件 
这里写图片描述 
9. 
这里写图片描述

10.重启app 
这里写图片描述

11.在浏览器中查看运行情况 
这里写图片描述

12. 
这里写图片描述
13. 
这里写图片描述 
14. 
这里写图片描述

Kubernetes安装和配置

1.创建多台centOS7 mini 系统的虚拟机备用 
2.修改主机名 
这里写图片描述
3.设置hosts 
这里写图片描述 
4.关闭防火墙 
这里写图片描述
5.安装etcd 
这里写图片描述 
6.修改etc配置文件/etc/etcd/etcd.conf 
这里写图片描述 
7.安装Docker 
这里写图片描述 
8.修改配置/etc/sysconfig/docker 
这里写图片描述 
9.将Docker设为开机启动项,启动Docker 
这里写图片描述 
10.安装Kubernetes 
这里写图片描述 
11.修改/etc/kubernetes/apiserver 
这里写图片描述 
12.修改/etc/kubernetes/config 
这里写图片描述 
13.启动服务并设置开机项自启动 
这里写图片描述 
14.修改/etc/kubernetes/config 
这里写图片描述 
15.修改/etc/kubernetes/kubelet 
这里写图片描述 
16.启动服务并设置开机自启动 
这里写图片描述 
17.在master上查看节点和各节点状态 
这里写图片描述 
18.安装flannel 
这里写图片描述 
19.修改配置/etc/sysconfig/flanneld 
这里写图片描述

用kubeadm安装kubernetes并且部署微服务

因为GFW问题导致遇到很多下载失败问题

1.安装Docker

2.安装k8s工具包

3.kubeadm 初始化 
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

Kuberbernetes基础概念

Pod

Pod是Kubernetes的最小操作单元,一个Pod可以由一个或多个容器组成;同一个Pod只能运行在同一主机上,共享相同的volumes,network,namespace

ReplicationController(RC)

RC用来管理Pod,一个RC可以由一个或多个Pod组成,在RC被创建后,系统会根据定义好的副本数来创建Pod数量. 
在运行过程中,如果Pod数量小于定义的,就会重启停止的或重新分配Pod,反之则kill多余的.当然,也可以动态伸缩运行的Pods规模或熟悉.

Service

Service定义了一个Pod逻辑集合的抽象资源,Pod集合中的容器提供相同的共而过. 
集合根据定义的Label和Selector完成,当创建一个Service后,会分配一个ClusterIP,这个IP与定义的端口提供这个集合一个统一的访问接口,并且实现负载均衡.

Label

Label是用于区分Pod,Service,RC的key/value键值对;Pod,Service,RC可以有多个label,但是每个label的key只能对应一个;主要是将Service的请求通过label转发给后端提供服务的Pod集合.

kubectl

客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口.

kube-apiserver

作为整个系统的控制入口,以REST API服务提供接口.

kube-controller-manager

用来执行整个系统中的后台任务,包括节点状态状况,Pod个数,Pods和Service的关联等.

kube-scheduler

负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点.

etcd

负责节点间的服务发现和配置共享.

kube-proxy

运行在每个计算节点上,负责Pod网络代理.定时从etcd获取到service信息来做相应的策略.

kubelet

运行在每个计算节点上,作为agent,节后分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver.

DNS

一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就都可以通过DNS访问服务了.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
2月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
26 1
|
3月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
5月前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
149 1
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
|
5月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【5月更文挑战第29天】 在现代云计算环境中,自动化运维已成为提升服务效率、确保系统稳定性的关键因素。本文深入探讨了如何利用Docker容器化技术和Kubernetes集群管理工具来构建一个高效且灵活的自动化运维体系。通过分析具体实施步骤和策略,我们旨在为读者提供一个清晰的指导框架,以支持他们在不断变化的技术需求中快速部署和扩展应用程序。本指南不仅涉及技术的基础知识,还涵盖了持续集成/持续部署(CI/CD)流程的集成,以及监控和日志管理的优化实践。
|
5月前
|
运维 Kubernetes 监控
构建高效自动化运维系统:基于Docker和Kubernetes的实践
【5月更文挑战第28天】在现代云计算环境中,自动化运维已成为提升服务效率、减少人为错误和应对快速变化需求的关键。本文以实际案例为依托,详细探讨了如何利用Docker容器化技术和Kubernetes集群管理系统搭建一套高效的自动化运维平台。通过深入分析Docker的轻量级虚拟化特性及Kubernetes的编排能力,本文展示了从基础设施搭建到持续集成、部署和监控的全自动化流程,旨在为运维工程师提供一种提高生产力、降低运营成本的可行解决方案。
|
5月前
|
jenkins Java 持续交付
Jenkins与Docker的自动化CI/CD实战
Jenkins与Docker的自动化CI/CD实战
|
5月前
|
jenkins Java 持续交付
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)(上)
Jenkins 快速入门 (含Jenkins + Docker + Git 简单的自动化实操)
|
5月前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
140 6
|
5月前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
下一篇
无影云桌面