共计 4566 个字符,预计需要花费 12 分钟才能阅读完成。
@[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 命令
- 作用
正文完