运行容器
命令格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的高端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=”my-ubuntu”: 为容器指定一个名称;
- –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars”: 指定容器的hostname;
- -e username=”charlie”: 设置环境变量;
- –env-file=[]: 从指定文件读入环境变量;
- –cpuset=”0-2″ or –cpuset=”0,1,2″: 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- –net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- –link=[]: 添加链接到另一个容器;
- –expose=[]: 开放一个端口或一组端口;
- –restart 容器退出时要应用的重启策略。
运行命令:
启动一个ubuntu容器docker run -i -t ubuntu
,如果本地没有镜像会先去下载,然后再启动
[root@izur9gz docker]# docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete
05731e63f211: Pull complete
0bd67c50d6be: Pull complete
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest
root@97e685431765:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18496 2012 pts/0 Ss 07:49 0:00 /bin/bash
root 510 0.0 0.0 34388 1460 pts/0 R+ 08:07 0:00 ps -aux
在这个容器中运行的ubuntu可以像一个正常的ubuntu系统一样运行,可以在里面做任何事情,比如安装个vim软件
root@97e685431765:/# apt update
···
··
·
root@97e685431765:/# apt install -y vim
···
··
·
root@97e685431765:/# vim myfile
当你想退出这个ubuntu命令行界面只需要输入exit就返回到原来状态了,容器也会随之关闭
root@97e685431765:/# exit
exit
[root@izur9gz docker]#
列出容器
命令格式
docker ps [OPTIONS]
OPTIONS说明:
- -a :显示所有的容器,包括未运行的;
- -f :根据条件过滤显示的内容;
- –format :指定返回值的模板文件;
- -l :显示最近创建的容器;
- -n :列出最近创建的n个容器;
- –no-trunc :不截断输出;
- -q :静默模式,只显示容器编号;
- -s :显示总的文件大小。
运行命令:
承接上文测试内容,没有正在运行的容器,有一个未运行的容器,容器名字叫“pedantic_snyder”这是启动之后docker自动起得容器名字
[root@izur9gz docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@izur9gz docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97e685431765 ubuntu "/bin/bash" 25 minutes ago Exited (0) 4 minutes ago pedantic_snyder
容器命名
前文的运行容器命令中有个参数--name
是用来起名字的,这里也特地说下,命名只能有下划线_
,圆点·
,横线-
三种特殊符号
运行命令:
启动个ubuntu容器然后命名为Charlie-ubuntu,退出容器命令行,然后看生成了一个名为Charlie-ubuntu的容器
[root@izur9gz docker]# docker run --name Charlie-ubuntu -i -t ubuntu /bin/bash
root@c9c17b86b97e:/# exit
exit
[root@izur9gz docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9c17b86b97e ubuntu "/bin/bash" 11 seconds ago Exited (0) 7 seconds ago Charlie-ubuntu
97e685431765 ubuntu "/bin/bash" 38 minutes ago Exited (0) 17 minutes ago pedantic_snyder
容器启动
命令格式:
docker start [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- –attach , -a:Attach STDOUT/STDERR and forward signals
- –interactive , -i:Attach container’s STDIN
运行命令:
可以启动一个或多个,启动可以用CONTAINER ID也可以用NAMES
[root@izur9gz docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9c17b86b97e ubuntu "/bin/bash" 11 seconds ago Exited (0) 7 seconds ago Charlie-ubuntu
97e685431765 ubuntu "/bin/bash" 38 minutes ago Exited (0) 17 minutes ago pedantic_snyder
[root@izur9gz docker]# docker start Charlie-ubuntu
Charlie-ubuntu
[root@izur9gz docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9c17b86b97e ubuntu "/bin/bash" 33 minutes ago Up 10 seconds Charlie-ubuntu
[root@izur9gz docker]# docker stop Charlie-ubuntu
Charlie-ubuntu
[root@izur9gz docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@izur9gz docker]# docker start Charlie-ubuntu 97e685431765
Charlie-ubuntu
97e685431765
[root@izur9gz docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9c17b86b97e ubuntu "/bin/bash" 35 minutes ago Up 5 seconds Charlie-ubuntu
97e685431765 ubuntu "/bin/bash" About an hour ago Up 5 seconds pedantic_snyder
容器停止
命令格式:
docker stop [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -t int:在杀死容器之前等待停止的秒数,默认10秒
运行命令:
停止名为Charlie-ubuntu容器
[root@izur9gz docker]# docker stop Charlie-ubuntu
Charlie-ubuntu
容器重启
命令格式:
docker restart [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明:
- -t int:在杀死容器之前等待停止的秒数,默认10秒
运行命令:
重启名为Charlie-ubuntu容器
[root@izur9gz docker]# docker restart Charlie-ubuntu
Charlie-ubuntu
连接到正在运行中的容器
命令格式:
docker attach [OPTIONS] CONTAINER
运行命令:
跟run命令-i -t效果相同,exit退出会停止容器
[root@izur9gz docker]# docker attach Charlie-ubuntu
root@c9c17b86b97e:/#
后台运行容器
前文提到的run
命令的-d
参数表示后台运行容器,并返回容器ID;
后台运行一个ubuntu的容器,里面每隔一秒打印一次hello world
[root@izur9gz docker]# docker run --name Charlie2-ubuntu -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done"
2d543a799a38ad2c00204b633dad77f2ac831b5cd44801d48f5cff59c30b40f8
获取容器的日志
命令格式:
docker logs [OPTIONS] CONTAINER
OPTIONS说明:
- -f : 跟踪日志输出
- –since :显示某个开始时间的所有日志
- -t : 显示时间戳
- –tail :仅列出最新N条容器日志
运行命令:
前文有个每秒打印一次hello world
的ubuntu容器,查看这个容器后五条日志
[root@izur9gz docker]# docker logs --tail 5 Charlie2-ubuntu
hello world
hello world
hello world
hello world
hello world
[root@izur9gz docker]#
查看容器中运行的进程信息
命令格式:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
运行命令:
[root@izur9gz docker]# docker top Charlie2-ubuntu
UID PID PPID C STIME TTY TIME CMD
root 12260 12210 0 18:22 ? 00:00:00 /bin/bash -c while true;do echo hello world;sleep 1;done
root 12894 12260 0 18:30 ? 00:00:00 sleep 1
[root@izur9gz docker]#
在运行的容器中执行命令
命令格式:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
运行命令:
先后台运行创建一个newFile文件,然后进入终端查看,exit不会停止容器
[root@izur9gz docker]# docker exec -d Charlie-ubuntu touch ~/newFile
[root@izur9gz docker]# docker exec -t -i Charlie-ubuntu /bin/bash
root@c9c17b86b97e:/# cd ~
root@c9c17b86b97e:~# ls
newFile
root@c9c17b86b97e:~# exit
exit
[root@izuf6barrnre7hruzsy99gz docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9c17b86b97e ubuntu "/bin/bash" 2 hours ago Up 6 minutes Charlie-ubuntu
重启策略
run
命令的参数--restart
有四种策略
策略 | 用途 |
---|---|
no | 默认策略,退出时不要自动重新启动容器。 |
on-failure[:max-retries] | 指定退出时尝试重启的次数 |
unless-stop | 始终重新启动容器,但是如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart |
always | 无论退出状态如何,始终重新启动容器。当您指定always时,docker守护进程将尝试无限期地重新启动容器。无论容器的当前状态如何,容器也将始终在守护进程启动时启动 |
运行命令:
运行redis如果退出会尝试启动三次
docker run --restart=on-failure:3 redis
获取容器详细信息
命令格式:
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS说明:
- -f :指定返回值的模板文件。
- -s :显示总的文件大小。
- –type :为指定类型返回JSON。
运行命令:
回去容器名为Charlie-ubuntu的详情,然后获取详情中的ip地址信息
[root@izur9gz docker]# docker inspect Charlie-ubuntu
[
{
"Id": "c9c17b86b97e9528535abd1ffce67945442ca985b91ce3dff3ac4fa82e5e2025",
"Created": "2019-05-22T08:27:53.091120726Z",
···
···
···
},
"NetworkSettings": {
···
···
···
"IPAddress": "172.17.0.4",
···
···
···
}
}
}
]
[root@izur9gz docker]# docker inspect --format '{{.NetworkSettings.IPAddress}}' Charlie-ubuntu
172.17.0.4
删除容器
命令格式:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
运行命令:
[root@izur9gz docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc834aace694 ubuntu "-d" 16 minutes ago Created loving_vaughan
[root@izur9gz docker]# docker rm dc834aace694
dc834aace694
[root@izur9gz docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
删除所有已经停止的容器
docker rm $(docker ps --filter status=exited -q)