4.docker容器
容器是Docker容器又一核心概念。
容器是独立运行的一个或一组应用。可以理解为模拟运行的一整套操作系统。
创建容器
使用docker create
创建的容器处于停止状态,可以使用docker start
来进行启动。
格式:docker create IMAGE [COMMAND]
语法同docker run
新建并启动容器
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
1 | docker run -it -d --name="test_ubuntu" d27b9ffc5667 /bin/bash |
- OPTIONS选项说明:
-d:指定容器运行于后台,默认为前台
-i:打开STDIN,用于控制台交互
-t:分配tty设备,该可以支持终端登录,默认为false,通常与-i一起使用
-p(小写):端口映射,格式为:主机(宿主)端口:容器端口
- -name=:为容器指定一个名称
-u: 指定容器的用户
-w:指定容器的工作目录
-e:指定环境变量,容器中可以使用该环境变量,-e NUM=11,一个-e后只能跟一个环境变量定义
-m:指定容器的内存上限
-h:指定容器的主机名
-v:给容器挂载存储卷,挂载到容器的某个目录,宿主机目录:容器目录
-c:设置CPU权重
- -restart=always :无论容器因何种原因退出(包括正常退出),就立即重启
在执行docker run
时,Docker在后台运行的标准操作包括
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
限制容器对内存的使用
-m :设置内存的使用限额,默认没有限制
–menory-swap= :设置 内存+swap 的使用限额,默认没有限制-m 300M --menory-swap=400M
为内存限制300M,swap限制100M
限制容器对CPU的使用
默认情况下容器可以平等的使用cpu资源并且没有限制。
-c可以设置CPU权重,默认为1024,这个数字并不是CPU资源的绝对数量,能够获取到多少资源取决于这个数字占所有容器CPU权重的比例-c 1024
、-c 512
第一个可以获取到第二个的两倍资源,这只是在CPU资源紧张的情况时,当第一个处于空闲状态时,第二个也可以获取到所有的CPU资源
限制容器对磁盘IO
--blkio-weight
与限制CPU一样这只是一个权重,默认为500。
限制bps与iops
bps 是 byte per second,每秒读写的数据量。
iops 是 io per second,每秒 IO 的次数。--device-read-bps
,限制读某个设备的 bps。--device-read-bps /dev/sda:30MB
--device-write-bps
,限制写某个设备的 bps。--device-read-iops
,限制读某个设备的 iops。--device-write-iops
,限制写某个设备的 iops
后台运行容器
使用docker run -d 镜像ID
将一个镜像的容器放在后台运行,若该镜像有输出结果,此时因在后台执行,所以不会将输出结果打印在屏幕上,但可以使用docker logs 容器
查看容器日志。
容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。例如一个后台运行的容器的主进程只是将一串字符输出,那么当这一串字符输出完毕后容器就会自动停止
容器相关操作
docker stop 容器ID
终止容器docker start 容器ID
启动容器docker restart 容器ID
重启容器docker pause 容器ID
暂停容器docker unpause 容器ID
恢复运行docker rename 容器ID
重命名容器名
进入容器
在使用当使用docker run -d
新建一个容器时,有些时候需要进入到容器中进行操作,可以使用docker attach
或者docker exec
,推荐使用docker exec进入到容器。
docker attach
当使用docker attach 容器ID
进入到一个后台运行的容器中后,使用exit
退出会导致容器中终止
docker exec
使用docker exec -it 容器ID
进入到一个后台运行的容器中后,退出不会导致容器中终止
导出和导入容器
导出容器
如果要导出本地某个容器,可以使用docker export 容器ID
命令。
1 | docker export 7691a814370e > ubuntu.tar |
这样将导出容器快照到本地文件。
导出容器快照
可使用docker import
从容器快照文件中再导入为镜像,并可以重新指定标签等元数据信息(容器快照文件将丢弃历史数据、元数据信息)
1 | docker import nginx-test.tar nginx:imp |
docker load
可以将镜像存储文件导入到本地镜像库,镜像存储文件将保存完整记录,体积较大
export、import、save、load区别
- export命令导出的tar文件略小于save命令导出的。
- export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出。
- 基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。
删除容器
1 | docker rm 容器 |
可以删除已经停止的容器。若要删除一个运行中的容器可以添加-f选项
清理所有处于终止状态的容器
用以下命令来查看所有已经创建的包括终止状态的容器。
1 | docker ps -a |
使用以下命令来删除所有处于终止状态的容器
1 | docker container prune |
查看容器
查看容器详情
docker inspect 容器ID
查看容器的详细信息,结果以json格式返回。
查看容器内进程
docker top 容器ID
类似于linux中的top
命令,会打印出容器内的进程信息。
查看统计信息
docker stats 容器ID
查看CPU、内存、存储、网络等使用情况的统计信息。
其他容器命令
复制文件
docker cp 源文件路径 目标路径
在容器和宿主机本地之间复制文件,容器路径格式:容器ID:容器中的路径
查看容器的具体改动
docker diff 容器名/容器ID
查看端口映射
docker port 容器ID
查看容器的端口映射情况。
输出内容为: 宿主机端口 -> 容器端口
实现容器的底层技术
具体查看 Namespace