运行容器
- docker run是启动容器的命令。我们可以用三种方式来指定容器启动执行的命令
1 CMD指令
2 ENTRYPOINT指令
3 在docker run命令行中指定
docker ps -a查看所有状态下的容器:
-a:显示所有状态下的容器
容器长期运行
docker run centos /bin/bash -c “while true;do sleep 1;done”
while语句让bash不会退出。缺点:始终占用一个终端- 可以加参数-d以后台方式启动容器
-
CONTAINER ID是容器的短ID,启动容器显示的是长ID
NAMES字段显示容器的名字,可以通过–name参数来自行定义,如果不指定,docker会自动分配名字。 -
停止一个容器:
docker stop CONTAINER ID
- 查看历史运行命令
docker history IMAGE NAME
进入容器的方法
- docker attach
docker run -d ubuntu /bin/bash -c “while true;do sleep 1;echo nmsl;done”
docker attach CONTAINER ID 长ID
Ctrl+p与Ctrl+q组合键退出
(一般不用) - docker exec
docker exec -it cb466d90225d bash
-
attach与exec的区别
①attach直接进入容器启动命令的终端,不会启动新的进程
②exec则是在容器中打开新的终端,并且可以启动新的进程
③如果想直接在终端查看启动命令的输出用attach,其他时候用exec -
总结
-
容器运行:
1 当CMD,ENTRYPOINT和docker run命令行指定的命令运行结束时,容器停止。
2 通过-d参数在后台启动容器
3 通过exec -it可进入容器并执行命令 -
指定容器三种方法:
1 短ID
2 长ID
3 容器名称 --name定义的名字,docker rename重命名 -
容器按用途分为两类:
1 服务类容器
2 工具类容器
停止/开始/重启容器
docker stop
可以停止运行的容器,其命令的本质上是向该进程发送一个SIGTERM信号。如果想快速停止容器,可以使用docker kill命令,其作用是向容器进程发送SIGKILL信号。docker start
是对于停止的容器,重新启动,docker start会保留第一次启动时的所有参数。docker restart
可以重启容器,相当于先执行docker stop再执行docker start。容器可能会因为某种错误而停止运行,对于服务类容器,我们通常希望在这种情况下拿能够自动重启,可以设置--restart=always
达到此效果。或者--restart=on-failure:3
,意思是如果启动进程退出代码非0,则重启容器,最多重启3次。
暂停/恢复容器
docker pause
是让容器暂停工作一段时间docker pause NAME
docker unpause NAME
恢复容器运行
容器删除
docker rm CONTAINER ID
- 批量删除容器
docker rm -v $(docker ps -aq -f status=exited)
容器底层技术
cgroup
- cgroup全称Control Group。Linux操作系统通过cgroup可以设置进程使用CPU,内存和IO资源的限额。我们可以在/sys/fs/cgroup中找到。
- 在/sys/fs/cgroup/cpu/docker目录中,Linux会为每个容器创建一个cgroup目录,以容器长ID命名。
namespace
- namespace管理着host中全局唯一的资源,并可以让每个容器都觉得只有自己在使用它。namespace实现了容器间资源的隔离。
- Linux使用了6种namespace,分别对应六种资源。
- Mount namespace
让容器拥有整个文件系统 - UTS namespace
让容器拥有自己的hostname - IPC namespace
让容器拥有自己的共享内存和信号量 - PID namespace
让容器在host以进程的形式运行 - Network namespace
让容器拥有自己独立的网卡,IP,路由等资源 - User namespace
让容器能够管理自己的用户