Docker和Kubernates

158 阅读4分钟
Docker和Kubernates
	经历的过程:
		物理机时代 -> 虚拟机时代 -> 容器化时代
		物理机时代:
			部署非常慢
			成本高
			资源浪费
			难于扩展与迁移
			受制于硬件
		虚拟机时代
			多部署
			资源池
			资源隔离
			很容易扩展
			VM需要安装操作系统
			了解:Hypervisor
	Docker介绍:
		开源的应用容器引擎,基于Go语言开发
		容器是完全使用沙箱机制,容器开销极低
		Docker就是容器化技术的代名词
		Docker也具备一定虚拟化职能
	yum install -y yum-utils device-mapper-persistent-data lvm2
	yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
	yum makecache fast
	yum -y install docker-ce
	service docker start
		docker version
	docker pull hello-world
	docker run hello-world
	Docker是容器化平台
		Docker是提供应用打包,部署与运行应用的容器化平台
		 应用程序 Docker Engine(Docker引擎) 可用资源(物理机/虚拟机)
		常用命令:
			docker pull 镜像名<:tags> -从远程仓库抽取镜像
			docker images -查看本地镜像
			docker run 镜像名<:tags> -创建容器,启动应用
			docker ps -查看正在运行中的镜像
			docker rm <-f> 容器id -删除容器
			docker rmi <-f> 镜像名<:tags> -删除镜像
		hub.docker.com (国外网站)
		docker pull tomcat
		docker run -p 8000:8080 tomcat
			netstat -tulpn
		docker run -p 8000:8080 -d tomcat (-d后台运行)
	在容器中执行命令:
		格式:docker exec [-it] 容器id 命令
		exec 在对应容器中执行命令
		-it 采用交互方式执行命令
		实例:docker exec -it 0738edfkjkds /bin/bash
	Docker镜像描述文件:
		Dockerfile是一个包含用于组合镜像的命令的文本文档
		Docker通过读取Dockerfile中的指令按步自动生成镜像
		docker build -t 机构/镜像名<:tags> Dockerfile目录
	Dockerfile自动部署tomcat应用
		FROM tomcat:latest
		MAINTAINER renmingwang.com
		WORKDIR /usr/local/tomcat/webapps
		ADD docker-web ./docker-web
	镜像分层(layer)概念
	FROM - 基于基准镜像
		FROM centos #制作基准镜像(基于centos:lastest)
		FROM scratch #不依赖任何基准镜像base image
		FROM tomcat:9.0.22-jdk8-openjdk
		尽量使用官方提供的Base Image
	LABEL & MAINTAINER - 说明信息
		MAINTAINER renmingwang.com
		LABEL version = "1.0"
		LABEL description = "renminwang"
	WORKDIR - 设置工作目录
		WORKDIR /usr/local
		WORKDIR /usr/local/newdir #自动创建
		尽量使用绝对路径
	ADD & COPY -复制文件
		ADD hello / #复制到根路径
		ADD test.tar.gz / #添加根目录并解压
		ADD 除了复制,还具备添加远程文件功能
	ENV - 设置环境常量
		ENV JAVA_HOME /usr/local/openjdk8
		RUN ${JAVA_HOME}/bin/java -jar test.jar
		尽量使用环境常量,可提高程序维护性
	RUN & CMD & ENTRYPOINT
		RUN : 在Build构建是执行命令
		ENTRYPOINT :容器启动时执行的命令
		CMD:容器启动后执行默认的命令或参数
		不同的执行时机
			docker build 创建镜像   / RUN执行 在构建镜像时执行命令
			docker run 创建容器     / CMD|ENTRYPOINT 在容器创建时执行命令
		RUN - 构建时运行
			RUN yum install -y vim #Shell 命令格式
			RUN ["yum", "install", "-y", "vim"] # Exec命令格式
			Shell运行方式
				使用Shell执行时,当前shell是父进程,生成一个子shell进程
				在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。
			Exec运行方式
				使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变
				执行完毕,直接退出,并不会退回之前的进程环境
		ENTRYPOINT启动命令
			ENTRYPOINT(入口点)用于在容器启动时执行命令
			Dockerfile中只有最后一个ENTRYPOINT会被执行
			ENTRYPOINT[“ps”] #推荐使用Exec格式
		CMD默认命令
			CMD用于设置默认执行的命令
			如Dockerfile中出现多个CMD,则只有最后一个被执行
			如容器启动时附加指令,则CMD被忽略
			CMD["ps", "-ef"] #推荐使用Exec格式
	构建Redis镜像
		FROM centos
		RUN ["yum", "install", "-y", "gcc", "gcc-c++", "net-tools", "make"]
		WORKDIR /usr/local
		ADD redis-4.0.14.tar.gz .
		WORKDIR /usr/local/redis-4.0.14/src
		RUN make & make install
		WORKDIR /usr/local/redis-4.0.14
		ADD redis-7000.conf .
		EXPOSE 7000
		CMD ["redis-server", "redis-7000.conf"]
	容器间Link单向通信
		docker run -d --name web tomcat
			docker ps
		docker run -d --name database -it centos /bin/bash
			docker ps
		docker inspect [CONTAINER_ID]
		docker exec -it [web_CONTAINER_ID] /bin/bash
		exit
			docker ps
		docker rm -f [web_CONTAINER_ID]
			docker ps
		docker run -d --name web --link database tomcat
			docker ps
		docker exec -it [web_CONTAINER_ID] /bin/bash
			ping database
	Bridge网桥双向通信
		docker run -d --name web tomcat
		docker run -d -it --name database centos /bin/bash
			docker ps
		docker network ls
		docker network create -d bridge my-bridge
		docker network ls
		docker network connect my-bridge web
		docker network connect my-bridge database
		docker exec -it [web_CONTAINER_ID] /bin/bash
			ping database
		docker exec -it [database_CONTAINER_ID] /bin/bash
			ping web
	Volume容器间共享数据
		通过设置-v挂在宿主机目录
			格式:docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
		    实例:docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
		通过--volumes-from 共享容器内挂载点
			创建共享容器
			docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
			共享容器挂载点
			docker run --volumes-from webpage --name t1 -d tomcat
		1.
		docker run --name t1 -p 8000:8080 -d -v /usr/webapps:/usr/local/tomcat/webapps tomcat
			docker ps
		docker exec -it [tomcat_CONTAINER_ID] /bin/bash
		2.
		docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true
		docker run -p 8002:8080 --volumes-from webpage --name t3 -d tomcat
		docker run -p 8003:8080 --volumes-from webpage --name t4 -d tomcat
	docker compose
		Docker Compose 单机多容器部署工具
		通过yml文件定义多容器如何部署
		WIN/MAC默认提供Docker Compose,Linux需安装