首先我们要说明一点:容器是由镜像创建来的,也就是说有镜像才能有容器
1、新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTION说明(常用):有些是一个减号,有些是两个减号
--name="新容器的名字":为容器指定一个名称
-d :后台运行容器,并返回容器ID,即启动守护式容器
-i: 以交互模式运行容器,通常与-t同时使用
-t: 为容器重新分配一个伪输入终端,通常与-i同时使用
-P:大写的P,随机端口映射
-p:小写的p,指定端口映射,有以下四种形式
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
我们启容器常用的有2中方式 -it 和 -d
-it 的方式我们称之为前台运行
-d 的方式我们称之为后台运行
[[email protected] ~]# docker run -it centos #-it参数之后可以是镜像名也可以是镜像ID
[[email protected] /]# ps -ef #提示符为[[email protected] /]说明进入了docker容器的终端,dca8587afa2a为生成的容器
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 15:51 ? 00:00:00 /bin/bash
root 14 1 0 15:51 ? 00:00:00 ps -ef
使用ps -ef命令查看进程,显示结果为很少的进程,我们主机的进程不可能这么少,所以说明我们已经进入到docker容器的命令行里边了。使用-it打开的容器exit命令容器停止并退出,使用ctrl+p+q键容器不停止退出。
[[email protected] ~]# docker run -it --name myCentosTest centos
创建并启动容器,使用--name参数给容器定义一个别名,这样docker ps显示的时候"NAMES"那一列显示的就是我们自定义的名字
[[email protected] ~]# docker run -d --name test101 centos #使用-d启动守护式容器83053ed07f56c62744f69e0d2676b39356f22bf2ab50561bf9f572de57b1a35d
[[email protected] ~]# docker ps -a
使用docker ps -a 查看,我们刚才运行的守护式容器STATUS为Exited(0),但为何状态是Exited(0)呢?
很重要的要说明一点:docker容器后台运行必须有一个前台进程。
容器运行的命令如果不是那些一直挂起的命令(比如top,tail),就会自动退出
这是docker机制的问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务器只需要启动相应的service即可。例如service nginx start
但是,这样做,nginx为后台进程模式运行,在linux上没有问题,
但docker run -d centos是这样致docker前台没有运行的应用
这样的容器后台启动,会立即自杀,因为他觉得他没事儿可做了。
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行
来看下面的例子
[[email protected] ~]# docker run -d --name test102 centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"a7a247b735d96f9d71a50b5130c487e5ffc6d5789303f987680faf29eb560054
使用docker ps -a 查看状态就不为Exited(0)
2、列出所有正在运行的容器
docker ps [OPTIONS]
不加任何参数,则表示显示当前正在运行的容器,不包括历史上运行的
options说明(常用):
-a: 列出当前所有正在运行的容器+历史上运行的
-l: 显示最近创建的容器
-n: 显示最近n个创建的容器
-q: 静默模式,只显示容器编号
--no-trunc:
[[email protected] ~]# docker ps #显示正在运行的容器
[[email protected] ~]# docker ps -l #显示最新的一个容器
[[email protected] ~]# docker ps -n 2 #显示最近的2个容器
[[email protected] ~]# docker ps -q #显示容器号
3、退出容器(使用-it模式启动的容器)
exit 容器停止并退出
ctrl+p+q 容器不停止退出
4、启动容器
docker start 容器ID 或者 容器名
5、重启容器
docker restart 容器ID
6、非强制停止容器
docker stop 容器ID
7、强制停止容器
docker kill 容器ID
8、删除已经停止的容器
docker ps输出为空,则说明当前没有容器运行,但是在docker的缓存记录里边,它记录着你到现在为止已经启动过哪些容器
,我们可以使用如下命令将已停止的容器删除掉,注意是已经停止的
docker rm 容器ID
如果我们就像删除正在运行的容器呢,加上-f 参数即可
docker rm -f 容器ID
9、一次性删除多个容器
方法一:docker rm -f $(docker ps -a -q)
方法二:docker ps -a -q | xargs docker rm
10、查看容器日志:
docker logs -f -t --tail 容器ID
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字显示最后多少条
为了实验说明,我们先启动一个容器
[[email protected] ~]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
然后使用docker logs查看日志
[[email protected] ~]# docker logs -t -f --tail 3 f00a15cba7f6 #f00a15cba7f6为容器ID,可以使用docker ps 命令获得
2018-11-14T16:46:33.398479288Z hello zzyy
2018-11-14T16:46:35.404098248Z hello zzyy
2018-11-14T16:46:37.408717369Z hello zzyy
2018-11-14T16:46:39.415078746Z hello zzyy
11、查看容器内运行的进程
[[email protected] ~]# docker top f00a15cba7f6 #f00a15cba7f6为容器ID
12、查看容器内部的细节
[[email protected] ~]# docker inspect f00a15cba7f6 #f00a15cba7f6为容器ID
13、进入正在运行的容器并以命令行交互
方式一:
[[email protected] ~]# docker attach f00a15cba7f6 #进入容器
方式二:
[[email protected] ~]# docker exec -t f00a15cba7f6 ls -l /tmp
total 4
-rwx------ 1 root root 836 Oct 6 19:15 ks-script-7RxiSx
-rw------- 1 root root 0 Oct 6 19:14 yum.log
f00a15cba7f6 为容器ID
ls -l /tmp 为要执行的命令
docker exec 是不需要进入容器,就可以在容器内执行命令,然后返回结果给docker宿主机
方式三:
当然exec也可以加上-i参数进入交互式模式
[[email protected] ~]# docker exec -it f00a15cba7f6 /bin/bash[[email protected] /]#
14、从容器拷贝文件到主机上
为什么会有这个命令呢?假设我使用命令docker stop 停止了一个容器,被停止的容器内产生的数据就没有了,但是有时候我们想将容器内的数据持久化,我想将它保存下来,所以要将容器内的数据拷贝到主机上边。
使用docker cp命令即可,命令格式如下
docker cp 容器ID:容器内路径 目的主机路径
[[email protected] ~]# docker cp f00a15cba7f6:/tmp/yum.log /root/
原文地址:http://blog.51cto.com/2638441/2317150