目录
1.Docker简介1.1哪些是虚拟机?
虚拟机(VirtualMachine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整的计算机系统。
1.2哪些是Docker
Docker是一个开源的应用容器引擎,基于Go语言并遵照Apache2.0合同开源。
Docker可以让开发者打包她们的应用以及依赖包到一个轻量级、可移植的容器中,之后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,互相之间不会有任何插口(类似iPhone的app),更重要的是容器性能开支极低。
1.3为何选择Docker?
对于开发和运维人员来说,最希望的疗效就是一次创建或则配置后,可以在任意地方、任意时间让应用正常运行linux集群应用实战 pdf,具体来说,Docker优势主要有以下几个方面:
1.4容器与虚拟机比较
下边的图片比较了Docker和传统虚拟化方法的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方法则是在硬件层面实现。
传统虚拟机
Docker
与传统的虚拟机相比linux端口映射,Docker优势彰显为启动速率快、占用容积小。
1.5Docker组件
1.5.1Docker服务器与顾客端
Docker是一个顾客端-服务器(C/S)构架程序。Docker顾客端只须要向Docker服务器或则守护进程发出恳求,服务器或则守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTfulAPI。你可以在同一台宿主机上运行Docker守护进程和顾客端,也可以从本地的Docker顾客端联接到运行在另一台宿主机上的远程Docker守护进程。
dockerclient是一个泛指,它可以是命令行docker,也可以是遵照了dockerapi规则的顾客端,简单地说可以理解为一个用于交互/发送指令的插口。
1.5.2Docker镜像
Docker镜像是一个特殊的文件系统,不仅提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时打算的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在建立以后也不会被改变。
1.5.3Docker容器
容器是打包代码及其所有依赖的软件的标准单元,用于开发、交付和布署,使应用可以从一个环境快速可靠地运行到另一个环境,而Docker则是容器技术的一种实现,是一个开源的应用容器引擎,是拿来管理容器的。
1.5.4Registry(库房)
Docker用Registry来保存用户建立的镜像。Registry分为公共和私有两种。Docker公司营运公共的Registry称作DockerHub。用户可以在DockerHub注册帐号linux基础教程,分享并保存自己的镜像(说明:在DockerHub下载镜像巨慢,可以自己建立私有的Registry)。
用户也可以在DockerHub上保存自己的私有镜像。
1.5.5Docker的优点
1、可以使用镜像快速建立一套标准的开发环境,快速布署代码;
2、高效的资源借助,可以实现更高的性能,同时对资源的额外需求很低;
3、兼容性高,让用户可以在不同平台间轻松的迁移应用;
4、可以实现手动化且高效的容器管理。
1.5.6Docker镜像加速
MacOSDocker安装|新手教程
2.Docker命令3.Docker建立镜像3.1使用dockercommit对已有的镜像进行完善;
dockerps找到运行中的容器,并复制容器ID
使用dockercommit对已有的镜像进行完善;
备注:cbb6666aa476347634763dd3是容器运行ID,jenkins:2023是新的镜像名以及tag
3.2使用dockerbuild-t建立镜像;
3.2.1基于基础镜像进行完善
使用Dockerfile建立镜像:
哪些是dockerfile?
dockerfile就是一个文本文件,其中包含了一个个的指令linux集群应用实战 pdf,用指令来说明要执行哪些操作来建立镜像。每条指令就会产生一层layer。
dockerfile常用指令:
FROM——指定基础镜像
MAINTAINER——指定维护者信息
RUN——运行指令
COPY——复制文件目录
ADD——更中级的复制文件目录
ENV——设置环境变量
ARG——构建参数
EXPOSE——暴露端口
CMD——容器启动命令
ENTRYPOINT——入口点
ENTRYPOINT和CMD组合使用
VOLUME——定义匿名卷
USER——指定当前用户
WORKDIR——指定工作目录
ONBUILD——为别人做嫁衣
Dockerfile注意事项:
指令大小写不敏感,而且为了分辨最好习惯用小写Dockerfile非注释行第一行必须是FROM记住在宿主机新建时文件名必须是Dockerfile,无后缀Dockerfile指定一个专门的目录为工作空间所有引入映射的文件必须在这个工作空间目录下3.2.1Dockerfile基本结构;
Dockerfile由一行行命令句子组成,而且支持以#开头的注释行。
1.通常Dockerfile分为四部份:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。如下:
# 创建文件夹
mkdir Dockerfile
# 创建文件
vi Dockerfile
# 写入以下内容:
FROM nginx #基于 nginx 镜像
RUN echo "This is a nginx image built locally" > /usr/share/nginx/html/index.html # 把内容写入到 nginx 容器某个地址里面
2.使用dockerbuild-t建立镜像;
备注:必须在dockerfile所在目录进行完善,旁边的.表示当前目录。
若果不在dockerfile目录内进行完善,旁边的.就改成dockerfile的绝对路径即可;
3.使用dockerimages|grep查找镜像
4使用dockerrun运行镜像,并进行访问;
备注:-d表示后台运行,-p表示端口映射,nginx:2023使用镜像以及tag
访问容器;
3.2基于jar包进行完善镜像;
1.先把jar包上传到dockerfile文件夹内
2.编撰Dockerfile文件
FROMopenjdk:8-jdk-alpine#基于openjdk作为基础镜像
MAINTAINER"zhaoyehua"#镜像维护人
WORKDIR/Users/xxxx/Desktop/git#指定工作目录(功能和cd命令一样)
COPY./java-maven-demo-0.0.1.jar/tmp/java.jar#把当前目录下的jar拷贝到容器指定文件夹内
EXPOSE8000#对外曝露端口
ENTRYPOINTjava-jar./java.jar#入口点
3.建立镜像
4.运行镜像
3.3基于代码进行完善镜像(单脚本);
1、拉取python镜像
dockerpullpython:3.9.16-alpine#拉取镜像
dockerimages#搜索已安装镜像,查看是否安装成功
2、打开pycharm终端,下载依赖
pipfreeze>requirements.txt#后面的txt文件名可以自定义,敲完命令会发觉早已导入该文件在你的项目根目录下
注意:导出依赖后,可以打开看一下。是否有错误的;
3、创建文件夹
#创建文件夹
mkdirDockerfile
#把python代码放在Dockerfile内
#把requirements.txt依赖包放在Dockerfile内
#创建文件
viDockerfile
#写入以下内容
FROMpython:3.9.16-alpine#基于这个基础镜像镜像建立镜像
USERroot#使用root用户进行操作
WORKDIR/app#设置容器的工作空间目录,自定义名称
ADD./requirements.txt/app#把当前目录内的依赖包放在容器的/app内
RUNpipinstall-rrequirements.txt#下载依赖包
COPY./dpo.py/app#把当前目录内的python代码复制到容器的/app内
CMD["python","./dpo.py"]#执行python代码
注意:dockerfile上面的指令可以理解为,在一个全新的python环境内进行测试。
类似一步一步在python环境内进行操作,最终执行python脚本。
4、构建镜像
5、查找建立的镜像以及运行容器
6、获取容器日志
查找所有容器dockerps-a
找到python容器(处于停止状态,由于在python中就跑了一下脚本,并不会仍然运行python容器)
查看python容器日志dockerlogs容器ID
3.4基于代码进行完善镜像(多脚本、添加守护进程);
后续加入