提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- [一、Docker 容器操作](#一、Docker 容器操作)
-
- [1.1 创建容器](#1.1 创建容器)
- [1.2 启动容器](#1.2 启动容器)
- [1.3 停止容器](#1.3 停止容器)
- [1.4 查看容器状态](#1.4 查看容器状态)
- [1.5 创建并启动容器](#1.5 创建并启动容器)
-
- [1.5.1 容器的生命周期](#1.5.1 容器的生命周期)
- [1.5.2 创建](#1.5.2 创建)
- [1.6在后台运行docker run 创建的容器](#1.6在后台运行docker run 创建的容器)
-
- 1.6.1创建容器并持续运行容器
- [1.6.2 Docker容器状态](#1.6.2 Docker容器状态)
- [1.7 容器交互](#1.7 容器交互)
- [1.8 复制文件到容器](#1.8 复制文件到容器)
- [1.9 容器的导入与导出](#1.9 容器的导入与导出)
- [1.10 删除容器命令](#1.10 删除容器命令)
- 二、Docker网络管理
-
- [2.1 Docker 网络实现原理](#2.1 Docker 网络实现原理)
- [2.2 Docker几种网络模式](#2.2 Docker几种网络模式)
-
- [2.2.1 host模式](#2.2.1 host模式)
- [2.2.2 Container模式](#2.2.2 Container模式)
- [2.2.3 无网络模式(none)](#2.2.3 无网络模式(none))
- [2.2.4 桥接模式(bridge)](#2.2.4 桥接模式(bridge))
- [2.2.5 自定义模式](#2.2.5 自定义模式)
一、Docker 容器操作
- 首先介绍下镜像与模板的关系:镜像 = 模板,容器 = 实例
容器和镜像的关系,可以用 "模板与实例" 来类比 ------ 镜像就是 "不可修改的模板",容器是 "基于模板创建的可运行实例",就像 "安装包和安装后的软件""类和对象" 的关系。
1.1 创建容器
创建容器:就是将镜像加载到容器的过程。
格式:docker create [选项] 镜像
-it是实现和容器的交互作用。
docker create :创建一个新容器,但没有启动它。
- 返回的长字符串 c6e2fc9bf81a66c7ffa88c1cbe7badeaf80f4b4fc3cf3684486aa27894034c82 是这个容器的唯一 ID(Container ID),后续可以用这个 ID(或前几位简写,比如c6e2fc)操作这个容器(比如启动、进入)。
- /bin/bash 是进入bash终端,让容器启动后默认运行 Bash 终端,方便你进入容器进行命令行交互操作。

1.2 启动容器
docker start:启动已创建的容器。
格式:
bash
docker start <container_id>
docker ps -a:查看已创建的容器
1.3 停止容器
docker stop :停止正在运行的容器。
示例: docker stop <container_id> 。
1.4 查看容器状态
docker ps :查看正在运行的容器。
docker ps -a :查看所有容器,包括已停止的容器

目前是没有运行的容器的

1.5 创建并启动容器
1.5.1 容器的生命周期
- docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid = 1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。
- 容器的生命周期包括创建,启动、停止、重启、删除等操作。容器会根据其进程的状态自动结束,例如当容器中的 PID=1 的进程退出时,容器也会停止。
1.5.2 创建
执行docker run命令,等同于先执行docker create 命令,在执行docker start命令 。

- 当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:
- Dockers引擎会在本地查找镜像
- 本地找到镜像 然后启动镜像
- 本地没有找到镜像,然后根据Docker引擎配置的仓库地址,远程去查找镜像。
- 远程查询到镜像,把镜像下载到本地,然后启动镜像
- 远程没有查询到镜像,Docker返回错误。
- 运行中的镜像支持:停止、启动、重启、删除(先停止才可以删除)操作。
1.6在后台运行docker run 创建的容器
1.6.1创建容器并持续运行容器
bash
docker run -itd --name test1 centos:7 /bin/bash #创建容器并持续运行容器

1.6.2 Docker容器状态
created:已创建,还未运行的容器
running:正在运行中的容器
restarting:容器正在重启中
removing:容器正在迁移中
paused:已暂停状态的容器
exited:停止状态的容器
dead:死亡,主要是操作系统出现异常或者断电关机等有可能引发dead状态,不是很常见。
暂停和停止状态的区别
docker pause 命令挂起指定容器中的所有进程
docker stop 容器内主进程会在指定时间内被杀死,默认为10s后。
1.7 容器交互
需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着 的容器。
使用 docker exec 命令在容器内运行命令。
格式:docker exec -it 容器ID/名称 /bin/bash
1、进入容器前,确保容器正在运行,退出容器,容器还是在运行。

2、不加 -d 选项会创建容器后直接进入容器,但是退出容器,容器也会停止


1.8 复制文件到容器
1、把文件复制到容器id为dba37分39218的容器中。


2、从容器复制到主机


1.9 容器的导入与导出
用户可以将任何一个Docker容器从一台机器迁移到另一台机器,在迁移过程中,可以使用Docker export命令将已经创建好的容器导出为文件,无论这个容器处于运行状态还是停止状态都可以。
1、导出格式:docker export 容器id /名称 > 文件名
2、导入格式:cat 文件名 | docker import - 镜像名称:标签
- Docker容器导出为文件

- 宿主机终端下的 Docker 操作命令,用于将本地 centos7_1.tar 包导入为 Docker 镜像。

1.10 删除容器命令
格式:docker rm [-f] 容器id/名称
1、删除已经终止状态的容器
bash
docker rm 容器id/名称
2、强制正在运行的容器
bash
docker rm -f 容器/名称
3、批量停止容器

4、批量删除容器

6、批量删除镜像
bash
docker images | awk 'NR>=2{print "docker rmi "$3}'| bash
5、批量清理后台停止的容器
bash
docker rm $(docker ps -a -q)
二、Docker网络管理
2.1 Docker 网络实现原理
Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),docker启动一个容器时会根据Docker网桥的网段分配给容器的一个IP地址,成为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。
Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络无法直接通过Contain-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即docker run 创建容器时通过-p或-P参数来启用,访问容器时就通过[宿主机IP]:[容器端口]访问容器。
(【43000】:【80】)

浏览器访问:http://192.168.10.23:43000

2.2 Docker几种网络模式
2.2.1 host模式
host模式:容器与宿主机共享网络环境,不具备独立的IP和网卡 ,而是使用宿主机的IP和端口
2.2.2 Container模式
1、选项可以给容器创建一个自定义名称
docker run -itd --name test1 centos:7 /bin/bash
2、#查看容器进程号
docker inspect -f '{{.State.Pid}}' 3ed82355f811
3、查看容器的进程、网络、文件系统等命名空间编号。

4、第二个容器:输出的27123是容器ff96b43dd27在宿主机上对应的进程 ID。

总结:与指定的容器共享network命令空间
2.2.3 无网络模式(none)
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网
络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网
络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
2.2.4 桥接模式(bridge)
bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。
相当于Vmware中的 nat 模式,容器使用独立network Namespace,并连接到docker0虚拟网卡。通过
docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network
Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。
(1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容
器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交
换机连在了一个二层网络中。
(2)从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上
创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个
设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。
(3)Docker将 veth pair 设备的一端放在新创建的容器中,并命名为 eth0(容器的网卡),另一端放
在主机中, 以 * 这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。可以通过 brctl
show 命令查看。veth
(4)使用 docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用
iptables -t nat -vnL 查看。
2.2.5 自定义模式
自定义网络模式,docker提供了三种自定义网络驱动: bridge overlay macvlan
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能, overlay和macvlan是用于创建跨主机
网络
建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址
Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或
Macvlan网络
bridge 单机网络模式适合在一台宿主机 内容器互联
overlay 跨主机容器互联 docker swarm
macvlan 容器像一台物理机一样 直接获取宿主机的所在的网络的IP (容器像物理机一样直接连接局域
网)