@[toc]
一、Docker 的外围概念
概念
Docker是容器技术。在实质上来说它就是主机的汇合,如图:- 什么是主机
这里的主机咱们个别说的是操作系统,世面上比拟风行的零碎:mac windows Linux 。 - 什么样类型的主机的汇合?
次要是Linux零碎主机的汇合。
其实docker外面装置的是精简版的Linux,说白了这个精简版的Linux零碎比拟小,小到什么水平呢?小到只能运行一个应用程序。
- 什么是主机
为什么应用Docker部署
应用Linux单机部署
如图:缺点:
- 端口抵触
- 环境抵触
次要起因是部署藕合造成的。
应用虚拟机部署
如图:缺点
- 消耗资源的问题 【虚拟机须要耗费电脑的cpu 磁盘 内存,如果耗费太大,那么留给微服务的资源就很少的,就会影响微服务的性能】
- 应用艰难的问题 【独自须要装置虚拟机,还得分配内存 cpu 硬盘大小的问题】
应用容器【docker】部署
如图:- Docker 如何解决资源消耗的问题?
它次要是用的是复用资源技术,其实是操作的操作系统资源,与虚拟机则不是【独立占用】,因为装置虚拟机的时候曾经调配好cpu 内存 硬盘。 - Docker 如何解决应用艰难的问题?
只须要一个命令运行容器。 Doker如何解决 端口抵触与环境抵触的
因为Docker中的容器是齐全隔离。二、Docker的利用场景
- Docker 如何解决资源消耗的问题?
利用场景
单体我的项目与微服务项目。三、Docker如何装置
博客地址
https://blog.csdn.net/Fu_Shi_...四、Docker治理命令
治理命令
builder Manage builds 治理构建 config Manage Docker configs 治理配置 container Manage containers 治理容器 context Manage contexts 治理上下文 engine Manage the docker engine 治理引擎 image Manage images 治理镜像 network Manage networks 管理网络 node Manage Swarm nodes 治理节点(集群) plugin Manage plugins 治理插件 secret Manage Docker secrets 治理密钥 service Manage services 治理服务 stack Manage Docker stacks 治理 swarm Manage Swarm 治理集群 system Manage Docker管理系统 trust Manage trust on Docker images 治理信赖 volume Manage volumes 治理数据挂载(数据长久化 === 永恒保留)
五、Docker镜像
- 镜像的概念
镜像其实就是一个没有启动的Linux的主机而已。 生成Docker镜像的条件
- 微服务公布包
- DockerFile文件 【文件地位与公布包文件夹目录同级】
配置DockerFile文件
FROM mcr.microsoft.com/dotnet/aspnet:6:0 WORKDIR /publish EXPOSR 80 EXPOSE 443 COPY publish/ /publish ENTRYPOINT ["dotnet","我的项目.dll"]
生成镜像命令
#在DockerFile同级目录下执行 docker build -t 镜像名称 . #查看镜像列表 docker images
运行镜像
#运行镜像后失去就是容器 #多个端口映射 docker run -p 内部拜访端口[5001]:容器端口[80] -p 内部拜访端口[5002]:容器端口[443] 镜像名称
查看容器
#查看容器 docker exec -it 容器ID /bin/bash
创立镜像版本号
#设置镜像版本号 docker image tag 原有镜像名称 新镜像名称:版本号
六、Docker容器
- 概念
镜像其实就是一个启动的Linux的主机而已。 镜像与容器的区别
- 镜像不可扭转,容器能够批改[能够应用 docker exec -it 容器ID /bin/bash 进行批改,然而镜像不能够]
- 镜像能够生成多个容器,容器只能运行一次。
镜像与容器的关系
- 一对多的关系
长处
- 能够疾速启动集群。
- 容器之间互相隔离。
容器操作
#查看操作容器的所有命令 docker container -h #查看以后容器详细信息 docker container inspect 容器ID
七、Dockerfile的指令
指令
FROM:指定根底镜像(FROM是必备的指令,并且必须为第一条指令)。 RUN: 用来执行命令行命令。其根本格局: shell格局: RUN <命令> ,输出在bash环境中的命令即可,一个dockerfile容许应用RUN不得超过127层,所以,应用一次RUN, 应用 ‘ \ ’ 换行,应用‘ && ’执行下一条命令。个别应用此种格局; exec格局: RUN <"可执行文件", "参数1", "参数2">,此种形式像是函数调用中的格局; COPY: 复制文件。 其根本格局: 格局1:COPY <源门路>...<指标门路> 格局2:COPY [“<源门路1>”,....."<指标门路>"] ADD: 更高级的复制文件,在COPY的根底上减少了一些性能,如果复制的是压缩包的话,会间接解压,而不须要在应用RUN解压; CMD:容器启动命令。其根本格局: shell格局: CMD <命令> exec格局: CMD ["可执行文件", "参数1", "参数2"...] 参数列表格局: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数 ENTRYPOINT: 入口点。其根本格局分为exec和shell, ENTRYPOINT的目标和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行中能够代替,不过比CMD繁琐,须要通过docker run 的参数--entrypoint 来指定。当指定了ENTRYPOINT后,CMD的含意就产生了扭转,不在是间接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了: <ENTRYPOINT> "<CMD>" ENV: 设置环境变量。(都能够应用这里应用的变量)其根本格局: 格局1:ENV <key> <value> 格局2:ENV <key1>=<value1> <key2>=<value>... ARG: 构建参数。构建参数和ENV的成果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在未来容器运行时是不存在的。其根本格局: 格局1: ARG <参数名> [=<默认值>] 格局2: 该默认值能够在构建命令 docker build 中用 --build-arg <参数名>=<值> 来笼罩 VOLUME: 定义匿名卷。 其根本格局: 格局1: VOLUME ["<门路1>", "<门路2>"...] 格局2: VOLUME <门路> EXPOSE: 裸露端口。EXPOSE指令是申明运行时容器所提供的端口,在启动容器时不会在因为这个申明而开启端口。 其根本格局: 格局1: EXPOSE <端口1> [<端口2>...] WORKDIR: 指定工作目录。其根本格局: 格局1: WORKDIR <工作目录门路> USER: 指定以后用户。USER是帮忙你切换到指定用户。 其根本格局: 格局1: USER <用户名> HEALTCHECK: 健康检查,判断容器的状态是否失常。 其根本格局: 格局1: HEALTCHECK [选项] CMD <命令> :设置查看容器健康状况的命令 格局2: HEALTCHECK NONE: 如果根底镜像有健康检查指令,应用此格局能够屏蔽掉其健康检查指令
外围指令
1.1、FROM 指定根底镜像构建 写法: FROM 指定根底镜像 1.2、COPY 复制命令。从上下文目录中复制文件或者目录到容器里指定门路。 写法: COPY 源门路,指标门路 COPY ["源门路","指标门路"] 1.3、RUN运行指令。构建的时候运行的指令 次要在于镜像构建的时候运行,运行build命令的时候 前面接的命令就是shell输出的命令 写法 RUN shell命令 参数1 参数2 RUN ["shell命令 ","参数1"," 参数2"] 例如: RUN ["echo",">"," /usr/share/index.html"] 1.4、CMD运行指令。运行容器时候运行的指令 次要在于镜像运行容器的时候生成,运行run的时候运行 写法 CMD <shell 命令> CMD ["<可执行文件或命令>","<param1>","<param2>",...] 例如: CMD ["dotnet","rmcore.dll"] 毛病:在run 命令前面能够进行笼罩 docker run -d -P rmcore dotnet rmcore.dll 进行笼罩掉 1.5 ENTRYPOINT运行指令。运行容器时候运行的指令(不会被笼罩) 写法 ENTRYPOINT ["<executeable>","<param1>","<param2>",...] 能够和CMD动静联合,设置动静的配置参数 例如 ENTRYPOINT ["nginx", "-c"] 定参 CMD ["/etc/nginx/nginx.conf"]变参 7.6、EXPOSE裸露端口指令 仅仅申明端口,就是指定镜像裸露的端口 在run 的时候,通过docker run -p 会主动随机映射到EXPOSE端口 写法 EXPOSE 端口 EXPOSE 端口 例如 EXPOSE 5000 EXPOSE 5001 1.7、WORKDIR工作目录指令 用于利用在容器内的工作目录,就好比:ruanmou目录 写法 WORKDIR <工作目录门路> 例如 WORKDIR /rmcore 或者 WORKDIR /nginx
八、Docker自定义镜像
DockerFile文件
- 作用
生成镜像文件。 根本配置
FROM mcr.microsoft.com/dotnet/aspnet:6:0 #指定根底镜像和指定环境[Linux+SDK] WORKDIR /publish #新建工作目录 EXPOSR 80 #裸露容器端口 EXPOSE 443 #裸露容器端口 COPT publish/ /publish #将文件copy到docker 文件夹下 ENTRYPOINT ["dotnet","我的项目.dll"] #执行命令
- Nginx自定义镜像
条件
- Linux主机
- 下载
- 解压
- 编译
- 运行
DockerFile文件
FROM centos:7 #指定根底镜像 RUN yum -y install gcc make pcre-devel zlib-devel tar zlib #装置插件 WORKDIR /nginx #创立工作目录 COPY nginx-1.15.2.tar.gz /nginx #将压缩文件拷贝到docker中 RUN tar -zxvf nginx-1.15.2.tar.gz #执行解压命令 RUN cd nginx-1.15.2 && ./configure && make && make install #执行编译命令 EXPOSE 80 #裸露容器端口 COPY nginx.sh /nginx.sh #将 nginx.sh 拷贝到docker 目录中 RUN chmod 775 /nginx.sh #设置批改权限为 775 CMD ["/nginx.sh"] #运行nginx命令
- 作用