docker
什么是docker?什么是docker镜像?
docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。 是docker容器的源代码,用于创建容器
。使用build命令创建镜像。
什么是Docker镜像
一组环境的静态集合,类似操作系统镜像,Docker镜像用于创建容器。使用build命令创建镜像。
什么是Docker容器
Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。
运行:
- 支持以后台模式运行进程
- 支持将容器内的端口映射到宿主机
- 支持以挂载的形式和宿主机共享文件系统
- 容器运行的程序退出后,容器随之退出;容器退出后可以再次打开
Dockerfile中最常见的指令是什么
FROM:指定基础镜像
LABEL:功能是为镜像指定标签
RUN:运行指定的命令
CMD:容器启动时要运行的命令
dokcer 常用命令
类型 | 命令 | 描述 |
---|---|---|
镜像操作 | docker images | 显示存在的当前镜像 |
docker image prune | 删除无用的镜像(被更新的旧镜像) | |
docker rmi 镜像ID | 删除指定的镜像 | |
docker build -t 镜像名称:tag dockerfile所在路径 | 编译镜像 | |
docker login | 登陆dockerhub | |
docker pull 镜像作者/镜像名称:tag | 从dockerhub拉取镜像 | |
docker tag 镜像名称:tag 镜像作者/新名称:tag | 规范重命名镜像 | |
docker push 镜像作者/镜像名称:tag | 推送镜像到dockerhub | |
容器操作 | docker ps -a | 显示当前所有容器 |
docker rm 容器ID | 删除指定容器,运行中容器不能删 | |
docker start -ai 容器ID | 启动之前退出的容器 | |
docker stop 容器ID | 停止指定容器 | |
docker cp 宿主机文件绝对路径 容器ID:容器内绝对路径 | 从宿主机拷贝文件到容器内 | |
docker cp 容器ID:容器内绝对路径 宿主机文件绝对路径 | 从容器内拷贝文件到宿主机 | |
run命令 | docker run 参数 镜像名 执行程序名 | 创建并运行容器 |
-d | 守护模式运行,适用服务,与ti参数互斥 | |
-ti | 打开终端交换模式,适用应用程序,与-d互斥 | |
-v 主机绝对路径:容器内绝对路径 | 将宿主机路径挂载到容器内 | |
-p 主机端口:容器内端口 | 将容器内端口映射到宿主机端口 | |
-e 环境变量名=环境变量值 | 向容器内定义环境变量 | |
–rm | 容器退出后自动删除,适用纯应用程序 |
dockerfile编写
编写思路
- 确定基础镜像
- 安装所需环境
- 定义执行点
指令 | 描述 |
---|---|
FROM 本地镜像名或dockerhub镜像名 | 指定基础镜像 |
WORKDIR 容器内绝对路径 | 指定后续容器内命令的执行路径 |
RUN 命令 | 构建镜像过程中执行的命令,多条可以顺序书写 |
COPY 主机文件路径 容器内路径 | 将主机文件拷贝到容器内,主机文件必须使用dockerfile所在路径的相对路径 |
EXPOSE 端口号 | 定义要映射到主机的端口号,搭配run命令的-P参数可以随机映射 |
ENTRYPOINT [“程序”]或脚本 | 定义镜像执行点,定义后,run命令的最后字段会变成该命令的参数 |
CMD [“命令或参数”] | 若没有定义执行点,则该命令定义的是镜像创建后缺省的指向程序。若定义了执行点,则该命令定义的是执行点的参数。run命令的最后字段会替换该命令的值 |
Dockerfile中的命令COPY和ADD命令有什么区别
COPY与ADD的区别COPY的SRC只能是本地文件,其他用法一致
a.二者都是只复制目录中的文件,而不包含目录本身。
b.COPY能干的事ADD都能干,甚至还有附加功能。
c.ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件),COPY的只能是本地文件
d.只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。
e.docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建更多的镜像层。镜像层的size也大。
启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令
docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
如何在生产中监控Docker
Docker提供docker stats和docker事件等工具来监控生产中的Docker
。我们可以使用这些命令获取重要统计数据的报告。
Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
Docker事件:Docker事件是一个命令,用于查看Docker守护程序中正在进行的活动流。
一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件
Docker如何在非Linux系统中运行容器
通过添加到Linux内核版本2.6.24的名称空间功能,可以实现容器的概念
。容器将其ID添加到每个进程,并向每个系统调用添加新的访问控制检查。它由clone()系统调用访问,该调用允许创建先前全局命名空间的单独实例。
如果由于Linux内核中可用的功能而可以使用容器,那么显而易见的问题是非Linux系统如何运行容器。Docker for Mac和Windows都使用Linux VM来运行容器。Docker Toolbox用于在Virtual Box VM中运行容器。但是,最新的Docker在Windows中使用Hyper-V,在Mac中使用Hypervisor.framework。
CI(持续集成)服务器的功能是什么?
CI功能就是在每次提交之后不断地集成所有提交到存储库的代码,并编译检查错误