请按以下顺序阅读
- docker命令(镜像+帮助)
- docker命令(容器)
- docker数据容器卷
- Dockerfile基础知识
- 自定义mycentos镜像
- CMD与ENTRYPOINT的区别
- 自定义Tomcat镜像
- jar包镜像的构建以及war包镜像的构建
- docker的一些常用安装
什么是容器
容器与镜像的关系将相当于Java中对象与类的关系,对象是类new出来的,容器是镜像run出来的,镜像每run一次,就产生一个容器。
Docker容器是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖的包到一个可移植的容器中,然后发布到任何的Linux机器上,也可以实现虚拟化。它是一个轻量级独立可执行的软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。宿主机与容器是通过套接字socket进行连接的。
- 轻量级
在一台机器上运行的docker容器,共享该机器的操作系统的内核;不需要模拟其他硬件,只需要能够进行运算,图像由文件系统层构建并共享公用文件,所以docker容器的内存小,极大限度地节省了磁盘的使用量。 - 标准
Docker容器基于开放标准,可在所有的Linux上运行。当然也可以在Windows上运行,但是没有任何意义 - 安全
docker容器将应用程序彼此之间相互隔离开,容器与容器之间是独立的,他们互不影响,将应用程序的问题限制在了一个容器中。
查看本机中的容器
docker ps [options]
optioins 的说明:
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器 。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
–no-trunc :不截断输出。
新建一个容器
有镜像才能创建容器,这里使用centos
镜像来演示
语法:
docker run [options] 镜像名 [command][args]
optioins 的说明:
有些操作是一条杠,有些操作是两条杠
–name=“容器名称” : 给容器设置一个名称(前面是两条杠);
-d :后台运行容器,并返回容器id,即启动守护式容器;
-i: 以交互模式运行容器,通常与-t同时使用;
-t : 为容器重新分配一个伪输入终端,通常与-i同时使用;
-P:随机端口映射;
-p : 指定端口映射,有以下四种方式;
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
如果不给容器命名,则NAMES的值是一个系统默认给的。
给容器命名,NAMES属性变成了自定义的值
给容器添加指定端口映射,使用-p
使用大写的-P,表示随机添加端口映射
交互式运行-it
执行如下语句,我们便进入了另一个世界,到了centos 的一个容器里面,可以发现这些文件和Linux上的很像
退出容器
退出容器有种方式:
- 执行命令
exit
- 快捷键ctrl+q+p
那这两种方式有什么区别呢?
先来看一下第一种方式的执行结果,在上面操作的基础上,退出centos容器,可以发现容器已经停止运行了
再比较第二种方式的执行结果,容器依然还在运行的状态
所以这两种方式的区别是,第一种方式退出容器,容器停止运行;
第二种方式退出容器,容器依然继续运行。
启动容器
docker start 容器ID或容器名称
重启容器
docker restart 容器ID或容器名称
停止容器
docker stop 容器ID或容器名称
强制停止容器(用的不多)
docker kill 容器ID或容器名称
删除已停止的容器
删除一个容器
docker rm 容器ID
删除多个容器
docker rm 容器ID1,容器ID2
删除所有容器
docker rm -f $(docker ps -aq)
其他
使用镜像centos:latest以后台模式启动一个容器
docker run -d centos
问题:docker ps -a 进行查看, 会发现容器已经退出
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。
这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动对应的service即可。例如 service nginx start
但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,
这样的容器后台启动后,会立即自杀因为他觉得他没事可做了.
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。
查看日志
- 如果让centos有事可做,它就不会抑郁,也就不会自杀了
运行一个程序,每隔两秒输出一个hello word
docker run -d centos /bin/sh -c "while true;do echo hello word;sleep 2;done"
- 查看日志
docker logs -tf --tail 10 容器id
-t
: 是显示时间戳
-f
: 跟随最新的日志打印
--tail 数字
: 显示最后多少条
查看容器运行进程
docker top 容器id
查询容器内部细节
docker inspect 容器id
执行这条命令后会看到一段很长的文字,这些文字其实是一个比较长的Json字符串
容器的详细信息
一些网络设置
进入容器内拷贝文件到主机
docker cp 容器id:容器内路径 主机目录
先启动一个镜像,mycentos:1.0
进入容器。在/data目录下,创建一个hello.txt文件,往里面写内容,退出容器;
执行docker cp 02ac54429b9f:/data/hello.txt /root
命令,将hello.txt文件复制到主机的根目录下
进入主机的根目录,可以看到hello.txt,文件拷贝成功