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
FROM scratch
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
RUN ["yum", "install", "-y", "vim"]
Shell运行方式
使用Shell执行时,当前shell是父进程,生成一个子shell进程
在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。
Exec运行方式
使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变
执行完毕,直接退出,并不会退回之前的进程环境
ENTRYPOINT启动命令
ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT[“ps”]
CMD默认命令
CMD用于设置默认执行的命令
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略
CMD["ps", "-ef"]
构建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需安装