- 1、docker概念
- 2、docker的优点
- 3、docker和虚拟机的区别
- 4、docker的基本概念
- 5、docker容器和镜像的导入导出
- 6、docker网桥
- docker network inspect命令在其输出结果中包含容器ID。对于由多主机网络驱动程序支持的网络(如Overlay),此命令还会显示集群中其他主机上的容器endpoints。这些endpoints在输出中表示为“ep-{endpoint-id}”。 但是,对于群集范围的网络,仅显示该节点本地的endpoints。
#使用自定义网桥启动容器
docker run —network=docker01 -id nginx">新建一个 名为docker02的网络模型
docker network create —subnet=172.30.0.0/16 docker02
docker network create —driver bridge docker02
#创建网桥时自定义网段
docker network create docker03 —subnet=172.30.0.0/16 -o com.docker.network.bridge.name=docker03
#删除名为docker02的网络模型
docker network rm docker02
docker network list
#显示详细的网络信息
docker network inspect docker01
docker network inspect命令在其输出结果中包含容器ID。对于由多主机网络驱动程序支持的网络(如Overlay),此命令还会显示集群中其他主机上的容器endpoints。这些endpoints在输出中表示为“ep-{endpoint-id}”。 但是,对于群集范围的网络,仅显示该节点本地的endpoints。
#使用自定义网桥启动容器
docker run —network=docker01 -id nginx - 从容器内拷贝文件到主机上
docker cp:/file/path/within/container /host/path/target
#直接在主机上拷贝到容器物理存储系统
docker cp 本地路径 容器名字/容器id:容器的路径
1、docker概念
docker是一种技术,能使得应用在任何环境都能用的打包技术。打包出的东西叫镜像。镜像运行时(有对外提供服务能力)叫容器。
Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
2、docker的优点
a、环境的强一致性。docker镜像提供了除内核外完成的运行时环境,保证其他使用人员,能完整复现应用运行时环境。不会出现“这应用在xxx环境没问题”这种情况。
b、迁移方便,持续交付和部署。一次打包,到处运行。
c、敏捷和高性能:直接调用宿主机操作系统,不需要经过虚拟化软件的处理。
d、资源利用率高,普通桌面机可以运行很多台容器
e、启动速度快
3、docker和虚拟机的区别
App在虚拟机中运行时,调用需要经过虚拟化软件的处理,才能调用到真正的宿主机操作系统。
在容器中运行,直接可以使用宿主机操作系统,省事省力,可喜可贺。
4、docker的基本概念
Dockerfile是我们编写指令以构建Docker镜像的载体。这些指令包括:
RUN apt-get y install some-package:安装某软件包
EXPOSE 8000: 开放端口
ENV ANT_HOME /usr/local/apache-ant:传递环境变量接入Docker Client,再由其将指令传递至Docker Daemon。
FROM:定制的镜像都是基于 FROM 的镜像(基础镜像),这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
RUN:用于执行后面跟着的命令行命令。(shell脚本)
COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
ADD:ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)
- ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
- ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。
CMD:
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
- CMD 在docker run 时运行。
- RUN 是在 docker build。
ENV:
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
WORKDIR:
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
USER:
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
docker 的前台模式和后台模式:
Detached:
如果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的会话中。需要注意的是,容器运行在后台模式下,是不能使用—rm选项的。
Foregroud:
在前台模式下(不指定-d参数即可),Docker会在容器中启动进程,同时将当前的命令行窗口附着到容器的标准输入、标准输出和标准错误中。也就是说容器中所有的输出都可以在当前窗口中看到。甚至它都可以虚拟出一个TTY窗口,来执行信号中断。
Docker attach:
Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。
但是需要注意的是,如果从这个stdin中exit,会导致容器的停止。
docker attach 665b4a1e17b6
docker attach loving_heisenberg #by Name
在docker 里面新开了一个bash 进程,在该终端可以通过命令和容器交互,类似于通过ssh和远程linux server 交互。
docker exec -i -t 665b4a1e17b6 /bin/bash
5、docker容器和镜像的导入导出
a、容器保存为镜像
#pinyougou_nginx是容器名称#mynginx是新的镜像名称docker commit pinyougou_nginx mynginx
b、容器导出 export
#test.tar : 这里可以导出tar文件 , 也可以导出二进制镜像文件img
docker export -o test.tar test
c、镜像导出
docker save -o test.tar image_name
或者
docker save image_name > /test.tar
d、镜像导入
test : 为镜像名
docker import test.tar test
load和import的区别:
- docker save保存的是镜像(image),docker export保存的是容器(container);
- docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
- docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
6、docker网桥
新建一个 名为docker02的网络模型
docker network create —subnet=172.30.0.0/16 docker02
docker network create —driver bridge docker02
#创建网桥时自定义网段
docker network create docker03 —subnet=172.30.0.0/16 -o com.docker.network.bridge.name=docker03
#删除名为docker02的网络模型
docker network rm docker02
docker network list
#显示详细的网络信息
docker network inspect docker01
docker network inspect命令在其输出结果中包含容器ID。对于由多主机网络驱动程序支持的网络(如Overlay),此命令还会显示集群中其他主机上的容器endpoints。这些endpoints在输出中表示为“ep-{endpoint-id}”。 但是,对于群集范围的网络,仅显示该节点本地的endpoints。
#使用自定义网桥启动容器
docker run —network=docker01 -id nginx
7、docker集群
8、docker挂载数据卷
-v 容器目录 或 -v 本地目录:容器目录
docker run -v /usr/ToolsAPIDir:/ToolsAPIDir1 -d -p 5005:5004 -it toolsapi:v8 python3 tools_api.py
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。现在镜像内就可以共享宿主机里的文件了。默认挂载的路径权限为读写。如果指定为只读可以用:ro
docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash
从容器内拷贝文件到主机上
docker cp :/file/path/within/container /host/path/target
#直接在主机上拷贝到容器物理存储系统
docker cp 本地路径 容器名字/容器id:容器的路径
#直接在主机上拷贝到容器物理存储系统
docker cp 本地路径 容器名字/容器id:容器的路径
9、docker负载均衡、
a、Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
b、Docker Compose 将所管理的容器分为三层,工程(project),服务(service)以及容器(contaienr)。Docker Compose 运行的目录下的所有文件(docker-compose.yml, extends 文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker Compose 并没有解决负载均衡的问题,因此需要借助其他工具实现服务发现及负载均衡。
c、Docker Compose 是一个用来创建和运行多容器应用的工具。使用 Compose 首先需要编写Compose 文件来描述多个容器服务以及之间的关联,然后通过命令根据配置启动所有的容器。
d、Dockerfile 可以定义一个容器,而一个 Compose 的模板文件(YAML 格式)可以定义一个包含多个相互关联容器的应用。Compose 项目使用 python 编写,基于后面的实验中我们将学习的 Docker API 实现。
docker compose 是一种编排服务,基于python语言实现,可以让用户在集群中部署分布式应用。
服务(service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义**
https://blog.csdn.net/yyh_linux_note/article/details/98848675
10、docker的服务发现
Consul:分布式、高可用的,服务发现和配置的工具,数据中心
Registrator:负责收集dockerhost上,容器服务的信息,并且发送给consul
Consul-template:根据编辑好的模板生成新的nginx配置文件,并且负责加载nginx配置文件
https://www.cnblogs.com/-wenli/p/13750675.html
https://www.jianshu.com/p/c83a9173459f
