最新调查:OpenStack、Docker、KVM被评为最火的云开源项目。
Docker 社区版(CE)和企业版(EE)
说明网易的镜像仓库有使用个数限制,超出个数,我们就使用阿里云你的镜像仓库
云国内:
DevOps:(英文Development和Operations的组合)
IaaS,PaaS及SaaS三种云服务的比较及对应的提供商
物理机/虚拟机,网络资源和其他资源,如:亚马逊的EC2,微软的Azure,Rackspace的OpenStack,IBM,VMWare的vCloud;国内的如阿里云(aliyun),青云(qingcloud)以及移动的大云(big
cloud)等等
为用户提供计算平台通常包括操作系统,编程语言的运行环境,数据库,Web服务器等。一些主要的服务提供商:AWS Elastic Beanstalk,Heroku,Force.com,谷歌的GAE(
Google App Engine),新浪SAE,百度云的开发引擎等
基础设施在最下端,平台在中间,软件在顶端;如:谷歌的Apps,微软的Office 365,Citrix的CloudStack,以及目前比较火的各种云存储(网盘),云相册,云备份,云打印,云监控等正对个人用的云服务产品。
Docker — 从入门到实践-国内镜像
Docker命令详解
# centos 7.5+ docker安装,指定版本 `18.06.x`
# docker 安装命令,参考链接 [yeasy/docker_practice](https://yeasy.gitbooks.io/docker_practice/content/install/centos.html)
#[Docker — 从入门到实践](https://yeasy.gitbooks.io/docker_practice/content/)
#若访问不了,请直接github搜索`docker_practice`
# docker 安装指定版本 [docker 安装指定版本](https://www.cnblogs.com/harlanzhang/p/9965534.html)
#1: 卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 如果卸载旧版本,按照毅然报错: conflicts with file from package docker-ce-cli-1:19.03.8-3.el7.x86_64, 见博客: centos7 安装docker 报错 conflicts with file from package
# $ sudo yum erase docker-ce-cli-1:19.03.5-3.el7.x86_64
#2: 执行依赖安装
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
#3: 国内网络原因,修改yum 源头
$ sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
$ sudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
# 4:安装 Docker CE, 或者指定安装 docker CE版本
$ sudo yum makecache fast
$ sudo yum install docker-ce # 按照默认最新版本
# sudo yum install -y docker-ce-18.06.3.ce-3.el7 # 安装指定版本
#5: 启动 Docker CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
#6 创建docker用户
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# 7 测试 Docker 是否安装正确
$ docker run hello-world
docker 命令文档 — 重要安装命令
# linux centos docker 启停
docker --version #docker 版本
systemctl status/start/stop/enable/restart docker #docker状态查看,启动、停止、开机启动、重启
docker info #查看概要信息
# docker login 登录 docker
# 1: 登录docker 服务器,可以是docker 官网,或者 国内docker 仓库
docker login -u 用户名 -p 密码
# docker login , 默认登录的是国外 docker 的 https://registry-1.docker.io/v2/
# 输入Daoclound 用户名和密码 dazer jiaojiao
# sudo docker login daocloud.io
# docke镜像上传到dockerhub仓库和阿里云docker仓库的方法 https://yq.aliyun.com/articles/70756 aliyun 镜像使用教程
# docker镜像推送到网易蜂巢上面 如何推送本地镜像? https://hub.c.163.com/v2/
# [email protected]/oldpwdab
docker login -u {你的蜂巢邮箱账号或手机号码} -p {你的蜂巢密码} hub.c.163.com
# 拉去一下docker 镜像
docker pull hub.c.163.com/dazer1992/adminserver:latest
# 拉去镜像
docker pull hub.c.163.com/dazer1992/safety:0.01
###运行docker,hub.c.163.com/dazer1992/adminserver:latest是构建的docker镜像的名称;后台运行(-d)、并暴露端口(-p) ; 注意查看容器的时间和本地时间是否一致。 【前面暴露对外端口:容器内部端口】
docker run -p 80:8080 -t hub.c.163.com/dazer1992/adminserver:latest
# 后台运行 增加 -d 参数 ,加入到到端口后面
# 浏览器访问:http://localhost:8999/safety
# 删除一个容器;删除多个容器;进入容器的内部;删除所有的容器;显示镜像的历史;
# 镜像和容器 类似 java 里面的 类 和 对象的关系;
#3 查看镜像的历史
docker history dazer/safety
#4 如果容器被关闭,重新启动
docker start -i 4925cef05d35
# 查看所有docker 镜像, 可以看到 TAG、IMAGE ID
docker image
# 删除镜像
docker rmi IMAGE_ID #删除image
docker rmi -f IMAGE_ID #强行移除该镜像,即使其正被使用;
docker rmi image_name:version #删除指定的docker 镜像
docker ps #查看运行的容器
docker ps -a #查看所有容器(包括运行的和未运行的)
docker ps -q #仅列出容器ID
docker ps -s #显示容器大小。
docker images #查看镜像
docker start|stop|restart|rm #启动、停止和重启、删除一个或多个指定容器。CONTAINER_ID
docker container rm CONTAINER_ID
docker images -q 仅列出镜像ID
docker images –tree 以树状结构列出镜像的所有提交历史。
docker pull IMAGE_ID 下载image
docker push IMAGE_ID 上传image
docker logs -f <容器名orID> 查看容器日志
docker logs -f -t --tail 100 <容器名orID> #最新100条日志
docker inspect rancher/server:stable 查看镜像的挂载目录等详细信息
启动一个container并进入交互模式
docker attach <容器名orID> 进入容器内部, 连接正在运行的容器,小心别把容器停止了,正确的退出姿势 --> 组合键:Ctrl+P+Q; 只能查看log
docker exec -i <容器名orID> ls -l: 这个命令进入容器执行完命令,直接返回了
docker exec -it <容器名orID> bash:这个命令,算是真进入容器了
docker exec -it <容器名orID> /bin/sh 上面如果执行出错,请使用这个bash变成sh
exit 退出伪终端
===============================
[plain] view plain copy
docker tag dazer/safety hub.c.163.com/dazer1992/safety:0.01 步骤1:给本地的镜像打一个标签,标签就是要上传的服务器对应
docker push hub.c.163.com/dazer1992/safety:0.0.1 步骤2:推送本地镜像到服务器
操纵方法见图:
网易蜂巢docker镜像上传使用
======================
[sql] view plain copy
docker pull hub.c.163.com/dazer1992/safety:0.01 第一步:拉去镜像
docker run -p 8999:8999 -t hub.c.163.com/dazer1992/safety:0.01 第二步:运行镜像 , 注意前面端口是对外端口,后面是内部端口
参考-如何在Nginx配置中使用OS环境变量?
参考-论Docker容器中的Nginx配置文件如何读取系统/容器的环境变量?
参考-Dockerfile与docker-compose设置环境变量
参考-Dockerfile文件详解
date
date -R
, 看是否包含+0800ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' >/etc/timezone
docke运行的时候,内部数据 copy 到外部是完全没有问题的。
# 把docker容器 4090bdd861ae 数据copy到 主机.
docker cp 4090bdd861ae:/dump/test.tar.gz /home
#(4090bdd861ae<你的MongodDB容器名>)
# 把 主机数据copy到 容器内部
docker cp /home/test.js testtomcat:/usr/local/tomcat/webapps/test/js
参考1:docker下mongodb数据库备份与恢复
参考2:docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
Docker没运行要记命令来使用,还不好复用。
这里用docker compose 可以使用yml记录命令,可以复用。
参考安装Compose-Linux安装Docker Compose
参考-docker-compose 命令详解
参考-莫小安Docker-compose常用命令 - 特别实用
# docker componse默认使用 GitHub的安装源,太慢了,我们这里使用 daocloud国内镜像安装把
# 1-1: 下载文件(国内源), 镜像加速可以使用阿里云的,如地址:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 1-2:下载文件 (Githunb源, 特变慢)
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2:授权, 别的同,之前的命令。
chmod +x /usr/local/bin/docker-compose
# 3: 设置软连接,方便使用命令
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 4: 测试命令
docker-compose --version
## 5: 说明 windows、macos这里的compose都是默认集成在docker里面,linux需要单独安装的
# Docker version 18.09.0, build 4d60db4
# docker-compose version 1.23.1, build b02f1306
# 6: 设置阿里云加速地址、 修改docker占用磁盘位置,修改/var/lib/docker目录
vi /etc/docker/daemon.json
# 1: registry-mirrors 指定加速镜像地址,可以是多个
# 2: 指定docker使用目录,默认 /var/lib/docker/, 我放到其他目录.<防止磁盘太小>; 用mv 比较靠谱:mv /var/lib/docker/ /usr/local2/ ; \cp -rf /var/lib/docker /usr/local2/docker #前面增加\ 强制 复制粘贴, 复制 太慢了。
# 3: 限制docker日志占用大小,物联网项目海量日志,3-4天就占用高大2-300G日志,必须限制日志大小。其中占用空间最大就是 containers 目录,eg: /usr/local/docker/containers/afeebxxx/ax3xx-json.log
# 4: insecure-registries 如果使用自己搭建的私有docker仓库,并且使用的不是https,这里配置,让docker仓库支持http。所有docker客户端都要配置,这个。
#编辑内容如下:docker默认没有这个文件,需要自己创建
{
"registry-mirrors": ["https://y3uhkhih.mirror.aliyuncs.com"],
"graph":"/usr/local/docker", #单块磁盘,这个就删掉,就默认的配置。
"log-driver":"json-file",
"log-opts": {"max-size":"30m", "max-file":"3"},
"insecure-registries":["47.101.31.90:5000", "10.104.16.46:5000"] #地址不存在的话,可能导致启动失败
}
# 7: 加载配置文件、重启
加载:# sudo systemctl daemon-reload
重启:# sudo systemctl restart docker
https://gitee.com/springcloud_ourslook_groups/shell/
docker运行还是比较占用空间,我们需要定期清理
清理 Docker 占用的磁盘空间
/var/lib/docker空间占用过大迁移–docker文件默认在var/lib/docker迁移到其他磁盘
#磁盘占用排行榜
# df -h 查看磁盘占用情况,最后发现是Docker占用的日志高达300G、90G.
[root@iot_server_test ~]# du -sh /usr/local/docker/*
# du -sh /var/lib/docker/containers/*
329G /usr/local/docker/containers
139G /usr/local/docker/overlay
128K /usr/local/docker/network
20K /usr/local/docker/builder
72K /usr/local/docker/buildkit
1.1M /usr/local/docker/containerd
23M /usr/local/docker/image
#
docker system df #类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker stop $(docker ps -aq) #停止所有的容器镜像
docker rm $(docker ps -aq) -f #强制删除所有的容器
sudo docker rmi $(docker images -f "dangling=true" -q) #删除是的镜像
docker rmi $(docker images -q) -f #一次性删除所有镜像,还原一个干净的服务器。
# Docker 容器镜像删除
docker container rm xx : 删除处于终止状态的容器
docker container prune: 清理所有处于终止状态的容器
# 记得清理之后重启docker服务,否则可能相关的磁盘
物联网项目使用rancher部署,发现两三天服务器磁盘就占用慢了,500G都被占用完了,
发现的是日志文件夹高达百G.
docker日志设置定期清理
docker 容器日志清理方案
参加对daemon.json
的修改
K8S、k3s:、rancher。
k8s: Kubernate, ks之间8个字母。
k3s: 简化版本的容器编排。
rancher主要提供界面操作,进行容器进行编排。
Rancher 2.1平台搭建及使用
Rancher 2 VS Rancher 1: V1 支持多种编排工具(docker Swarm、k8s、cattle),但V2只支持 k8s
k3s: rancher开发,适用于物联网、边缘网关。
helm: 起重机,k8s 包管理工具
参考rancher1x 中文
参考Rancher 2.1平台搭建及使用
参考Rancher2.1.5安装部署
参考 rancher中文官网,【官网资料特别丰富,全中文非常友好】
参考 rancher api, 可以通过代码控制 docker服务的启动、停止
参考项目中调用Rancher Rest API实践
参考Rancher-API使用珠玑 RancherLabs
参考Docker中容器的备份、恢复和迁移
参考copy容器内部文件到主机:Rancher容器目录持久化
Docker是一种linux容器技术,具有类似虚拟机的资源隔离和分配有啥,虚拟化了操作系统而不是硬件,但资源要求远远低于虚拟机,标准化了软件单元。docker有三个重要概念镜像(image)、容器(Container)、仓库(Repository),部署项目使用标准的镜像。
Kubernetes简称k8s,是一个自动化管理、编排、负载均衡、监控检测docker的工具,现在已经成为容器编排的标准。
Kubernetes简称k8s,是一个自动化管理、编排、负载均衡、监控检测docker的工具,现在已经成为容器编排的标准。
Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。
#1: rancher1.x 安装【单击版本,非HA】 (前置条件安装 docker、centos7.2+, 版本不能太低 )
sudo docker run -d -v <host_volome>:/var/lib/mysql --restart=unless-stopped -p 8080:8080 rancher/server:stable
# 注意,rancher server端 1叫做:rancher/server, rancher 2叫做:rancher/rancher ; 注意,这里命令有问题,需要制定备份目录volumn,否则数据丢失就麻烦大了
# 是主机的目录,这里用来存放容器内部的mysql文件位置,如:/usr/local/docker-volume/rancher/mysql
# rancher所有数据都在mysql cattle,备份/持久化mysql非常重要。
#############################################################################
#### rancher 所有的数据都在mysql里面,因此要对mysql进行备份,或者直接使用主机的mysql。
## 参考:[rancher-server 安装单节点](https://edu.51cto.com/center/course/lesson/index?id=370206) 8分钟的地方
#1: 进入容器内部:docker exec -it xxxxxxx /bin/bash
#2:查看运行的端口:netstat -nltp
#3: 进入mysql: mysql -uroot -p #密码为空,直接回车
#4:查看mysql 数据:use cattle; show tables;
#############################################################################
$ sudo docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable \
--db-host myhost.example.com --db-port 3306 --db-user cattle --db-pass cattle --db-name cattle
#大部分的输入参数都有默认值并且是可选的,只有MySQL server的地址是必须输入的。 这里数据库版本必须是mysql1.7 的,1.8的不支持; 如果数据库没有持久化,也可以进入容器内部导出。
--db-host IP or hostname of MySQL server
--db-port port of MySQL server (default: 3306)
--db-user username for MySQL login (default: cattle)
--db-pass password for MySQL login (default: cattle)
--db-name MySQL database name to use (default: cattle)
# 创建rancher1 使用的数据库和用户
#以下是创建数据库和数据库用户的SQL命令例子
> CREATE DATABASE IF NOT EXISTS cattle COLLATE = 'utf8_general_ci' CHARACTER SET = 'utf8';
> GRANT ALL ON cattle.* TO 'cattle'@'%' IDENTIFIED BY 'cattle';
> GRANT ALL ON cattle.* TO 'cattle'@'localhost' IDENTIFIED BY 'cattle';
######## 这里创建挺慢,查看 日志 docker logs -f 等待了 5 - 10分钟 才好
参考springboot指定配置文件启动
参考Java获取系统环境变量(System Environment Variable)和系统属性(System Properties)以及启动参数的方法
# rancher java 部署 环境变量 [springboot指定配置文件启动]
#端口一般不要硬编码到代码里面;
##1:使用idea配置 vm参数里面添加:-Dserver.port=8009
##2:使用jar包运行 java -jar springboot.jar --server.port=8009
##3: jar形式 java -jar -Dspring.profiles.active=test iot-platform.jar
##4: rancher 里面使用环境变量使用第三种,eg: 环境变量名称:spring.profiles.active、取值:test
docker安装一些不需要持久化的数据,还是比较好的,redis、rabbitmq等,非常方便。
docker也可以安装mysql、MongoDB、es这种必须持久化的数据。
参考 docker 安装单机mysql、redis、kibana、elasticsearch、rabbitmq
参考 docker 部署nginx、高可用mysql、MongoDB等
参考 dokcer 部署mysql主从结构
docker安装jenkins,
如过安装报错 touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
chown -R 1000:1000 /usr/local/jenkins_volume/jenkins_home
目录是宿主机的映射目录
s6-svscanctl: fatal: unable to control /service: supervisor not listening
、[Note] /usr/sbin/mysqld (mysqld 5.5.62-0ubuntu0.14.04.1) starting as process 25 ...
rancher运行的时候,有时候报错,启动不了,这里进行处理。
df -h
查看是否是docker占用的空间被撑满了,如果撑满了 100%,就需要清理了。1:参考 Docker 私有Registry、企业级别仓库 【有管理界面、权限、证书等 可用麻烦】
2:我们使用Docker 官方的镜像搭建 私有仓库【简单、只有核心功能】,参考 centos7 Docker私有仓库搭建及删除镜像
## 注意,这里没有管理界面,需要的话,自己要再安装了一个管理界面
# 直接启动一个 docker私有仓库。其他主要事项,看上面的博客
# -p: 指定映射端口:内部端口
# -v: 挂载本地目录, 映射仓库地址、映射配置文件
# --restart=alayes docker开机启动
# --name: 指定启动容器的名称
docker run -v \
/usr/local2/docker_volume/registry/registry:/var/lib/registry \
/usr/local2/docker_volume/registry/config/config.yml:/etc/docker/registry/config.yml \
registry:latest
# 访问docker私有仓库,并且没有配置https的情况,增加配置 vi /etc/docker/daemon.json
"insecure-registries":["47.101.31.90:5000", "10.104.16.46:5000"] #并重启docker,防止报错
#查看所有的私有仓库的镜像:
curl -XGET http://10.104.16.46:5000/v2/_catalog
# 查看指定镜像的所有tags
curl -XGET http://10.104.16.46:5000/v2/镜像名/tags/list
#
1:部署 Docker Registry WebUI 不推荐,4年没有更新了。
2:8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry推荐使用。
# 我们使用 docker-registry-ui
# docker registry增加配置,让支持前端ui跨域访问。
# 具体config.yml文件见上面博客
# -v 挂载卷,/etc/docker/registry/config.yml 是docker内部的一个配置文件,我们进行替换。
docker run -v \
/usr/local2/docker_volume/registry/registry:/var/lib/registry \
/usr/local2/docker_volume/registry/config/config.yml:/etc/docker/registry/config.yml \
registry:latest
#docker registry 配置文件 config.yml配置文件
#对应docker registry内部文件地址:etc/docker/registry/config.yml
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['*']
Access-Control-Max-Age: [1728000]
Access-Control-Expose-Headers: ['Docker-Content-Digest']
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
参考:Maven私有仓库搭建以及使用
参考:使用docker搭建nexus并配置docker私有仓库