
Docker 命令
上一篇文章我们了解如何在CentOs安装Docker,接下来我们学习Docker 命令
Docker镜像常用命令
| 命令 | 解释 |
|---|---|
| docker images 或者 docker image ls | 列表本地所有镜像 |
| docker search 关键词 | 在Docker Hub中搜索镜像 |
| docker pull 镜像名称 | 下载Docker镜像 |
| docker rmi 镜像id | 删除Docker镜像。加参数-f表示强制删除。 |
| docker run 镜像名称称 | 下载Docker镜像 |
| docker build -t 标签名称 目录 | 构建Docker镜像,-t 表示指定一个标签 |
| docker tag | 为镜像打标签 |
Docker 容器常用命令
| 命令 | 解释 |
|---|---|
| docker ps | 列表所有运行中的Docker容器(包括已停止的容器)。该命令参数比较多,-a:列表所有容器;-f:过滤;-q 只列表容器的id。 |
| docker version | 查看docker 版本信息 |
| docker --version | 查看docker 版本 |
| docker info | 查看Docker系统信息,例如:CPU、内存、容器个数等等 |
| docker kill 容器id | 杀死id对应容器 |
| docker start / stop / restart 容器id | 启动、停止、重启指定容器 |
- 更多命令,请输入--help参数查询;如果想看docker命令可输入docker --help;如果想查询docker run命令的用法,可输入docker run --help。
搜索、下载、删除镜像
# 搜索镜像 nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11281 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker c... 1586 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable ... 708 [OK]
jrcs/letsencrypt-nginx-proxy-companion LetsEncrypt container to use with nginx as... 504 [OK]
webdevops/php-nginx Nginx with PHP-FPM 125 [OK]
zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server ... 96 [OK]
bitnami/nginx Bitnami nginx Docker Image 65 [OK]
linuxserver/nginx An Nginx container, brought to you by Linu... 59
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK]
- NAME:镜像仓库名称。
- DESCRIPTION:镜像仓库描述。
- STARS:镜像仓库收藏数,表示该镜像仓库的受欢迎程度,类似于GitHub的Stars。
- OFFICAL:表示是否为官方仓库,该列标记为[OK]的镜像均由各软件的官方项目组创建和维护。由结果可知,java这个镜像仓库是官方仓库,而其他的仓库都不是镜像仓库。
- AUTOMATED:表示是否是自动构建的镜像仓库。
#下载镜像
docker pull nginx
列出镜像
- docker images 或者 docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 27a188018e18 7 days ago 109MB
hello-world latest fce289e99eb9 3 months ago 1.84kB
-
REPOSITORY:镜像所属仓库名称。
-
TAG:镜像标签。默认是latest,表示最新。
-
IMAGE ID:镜像ID,表示镜像唯一标识。
-
CREATED:镜像创建时间。
-
SIZE:镜像大小。
删除镜像
# 删除指定名称镜像
docker rmi hello-world
#删除所有镜像
docker rmi -f $(docker images)
docker run 命令启动容器
- 该命令即可新建并启动一个容器
| 选项 | 含义 |
|---|---|
| -d | 表示后台运行2 |
| -P | 随机端口映射(指定端口映射) |
# 指定端口映射,有以下四种格式。
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
例子 启动一个nginx容器
# 前面我们已经pull了一个nginx的镜像
# -d # 后台运行
# -p 宿主机端口:容器端口 # 开放容器端口到宿主机端口 (服务器防火墙必须开放91端口)
docker run -d -p 91:80 nginx
浏览器访问 http://服务器地址:91/ 能够成功访问说明我们
# 需要注意的是,使用docker run命令创建容器时,会先检查本地是否存在指定镜像。如果本地不存在该名称的镜像,Docker就会自动从Docker Hub下载镜像并启动一个Docker容器。
Docker基本命令实践
列出容器
- docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ded3613de77d nginx "nginx -g 'daemon ..." 4 hours ago Up About an hour 0.0.0.0:91->80/tcp nervous_curie
-
CONTAINER_ID:表示容器ID。
-
IMAGE:表示镜像名称。
-
COMMAND:表示启动容器时运行的命令。
-
CREATED:表示容器的创建时间。
-
STATUS:表示容器运行的状态。Up表示运行中,Exited表示已停止。
-
PORTS:表示容器对外的端口号。
-
NAMES:表示容器名称。该名称默认由Docker自动生成,也可使用docker run命令的–name选项自行指定。
停止、强制停止、重启、删除容器
# 停止容器
docker stop ded3613de77d
# 强制停止容器
docker kill ded3613de77d
# 启动或者重启已经停止的容器
docker start ded3613de77d
docker restart ded3613de77d
# 删除容器
docker rm ded3613de77d
# 删除所有容器
docker rm -f $(docker ps -a -q)
进入、退出容器
- 使用nsenter工具进入容器(nsenter工具包含在util-linux 2.23或更高版本中)
# 找到容器第一个进程的PID,可通过以下命令获取
docker inspect --format "{{.State.Pid}}" $CONTAINER_ID
# 获得PID,使用nsenter命令进入容器
nsenter --target "$PID" --mount --uts --ipc --net --pid
- 实战例子
[root@gxst_docker_76_16 ~]# docker restart ded3613de77d
ded3613de77d
[root@gxst_docker_76_16 ~]# docker inspect --format "{{.State.Pid}}" ded3613de77d
26878
[root@gxst_docker_76_16 ~]# nsenter --target 26878 --mount --uts --ipc --net --pid
mesg: ttyname failed: No such file or directory
root@ded3613de77d:/#
- 退出容器,在容器中使用exit命令即可
root@ded3613de77d:/# exit
logout
[root@gxst_docker_76_16 ~]#
- 可以结合以上两条命令写一个进入容器脚本
# 新建脚本文件
vim docker-enter.sh
- 脚本代码
#!/bin/bash
#Use nsenter to access docker
CNAME=$1
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
if [ "$#" -gt 1 ]; then
nsenter --target $CPID --mount --uts --ipc --net --pid -- "$2"
else
nsenter --target $CPID --mount --uts --ipc --net --pid -- /bin/bash
fi
- 使用脚本进入容器
sh docker-enter.sh ded3613de77d(容器名称或者ID)