目录
1、什么是容器
容器镜像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来,例如开发环境和生产环境之间的差异,并有助于减少在同一基础架构上运行不同软件的团队之间的冲突。
1.轻量级
在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快。
2.标准
Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行。
3.安全
Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上。
2,演示前提
有镜像才能创建容器,这个是根本要求(下载centos镜像来演示)
docker pull centos
3,创建并启动容器
3.1语法
docker run [options] images [command][args]
3.2options说明
有些是一个减号,有些是两个减号
--name="容器新名字": 为容器指定一个名称;
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
3.3交互式运行
#使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it centos /bin/bash
4,列出当前所有正在运行的容器
4.1语法
docker ps [options]
4.2 options语法说明
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
5,退出容器
1,exit:停止容器并退出
2,ctrl+P+Q 容器不停止退出(仅仅是退出终端,但还在运行着)
6,启动容器
docker start 容器ID或容器名称
7,重启容器
docker restart 容器ID或容器名称
8,停止容器
docker stop 容器ID或容器名称
9,强制停止容器
docker kill 容器ID或容器名称
10,删除已停止的容器
#单个删除
docker rm 容器ID
#多个删除
docker rm -f $(docker ps -aq)
docker ps -aq xargs docker rm
11,其它重点内容
1,启用守护式容器
#使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动是应的service即可。例如 service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
2,查看容器日志
如果是后台运行的程序,那么如何查看运行的日志呢?
1,先运行一个程序 在后台被隔两秒输出[hello laolei]
docker run -d centos /bin/sh -c "while true;do echo hello laolei;sleep 2;done"
2,查看日志
docker logs -tf --tail 10 容器ID
* -t 是加入时间戳
* -f 跟随最新的日志打印
* --tail 数字 显示最后多少条
3,查看容器运行进程
docker top 容器ID
4,查询容器内部细节
docker inspect 容器ID
5,进入正在进行的容器并以命令行交互
#方式1
docker exec -it 容器ID /bin/bash
#方式2
docker attach 容器ID
#两种方式的区别
exec 在容器中打开新的终端(就跟在windows的运行tomcat中的startup.sh一样) 并且可以启动新的进程
attch 直接进行容器终端(就跟在windows的cmd运行tomcat一样),不会启动新的进程
6,进入容器内拷贝文件到主机
docker cp 容器ID:容器内的路径 主机目录