再次强调:可以运行镜像来得到一个容器。
运行容器
docker run [option] image-name [command][arg...]
- -d : 以后台运行的形式存在, 并返回容器id
- -i : 以交互的模式运行容器,通常与 -t 配合使用
- -t :返回一个伪终端,通常与-i配合使用
- -p : 端口映射
查看容器
docker ps
- 查看正在运行的docker容器
- -a : 查看所有容器,包括关闭(exited)
# CONTAINER ID 容器短id
# IMAGE 镜像名
# COMMAND 容器启动命令
# CREATED 容器创建时间
# STATUS 容器状态和时间。UP:上线;exited:下线。
# PORTS 端口信息
# NAMES 容器名 可以通过启动时用 --name 来指定
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb346c01f574 centos "/bin/bash" 22 minutes ago Up 21 minutes hopeful_clarke
进入容器
docker attach
docker exec -it image-name bash|sh
二者的区别
- attach进入容器后,exit退出容器并且把容器关闭掉
- exec进入容器后,exit退出容器不会把容器关闭
容器操作
-
docker stop
关闭容器(相当于kill),可以在docker ps -a
找到关闭后的容器(exited) -
docker start
启动容器,可以重启exited状态的容器 -
docker restart
重启容器
容器持久化
docker commit container-id image-name
-- 将某个容器保存为镜像docker export container-id > busybox-test.tar
-- 将某个容器保存为文件cat busybox-test.tar| docker import - busybox-test:latest
-- 将导出的容器文件保存为某个镜像docker save image-name > file
-- 保存某个镜像docker load < file
-- 导入某个镜像
容器底层原理
- docker容器的本质是Linux中的进程。
- docker利用
cgroup
技术来限制每个进程的资源(即每个容器的资源),像--cpu-share
来限制cpu的权重;-m --memory-swap
来限制内存。 - docker利用
namespace
来实现资源隔离。让每个容器都以为拥有自己的文件系统,拥有自己的网卡(比如有自己的ip)。Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User。