我们来学习一下Docker常用命令。
1.命令分类
总的来说分为以下几种:
-
Docker环境信息 — docker [info | version]
-
容器生命周期管理 — docker [create | exec | run | start | stop | restart | kill | rm | pause | unpause]
-
容器操作运维 — docker [ps | inspect | top | attach | wait | export | port | rename | stat]
-
容器rootfs命令 — docker [commit | cp | diff]
-
镜像仓库 — docker [login | pull | push | search]
-
本地镜像管理 — docker [build | images | rmi | tag | save | import | load]
-
容器资源管理 — docker [volume | network]
-
系统日志信息 — docker [events | history | logs]
2.镜像操作
我们需要拉取一个最新版的 nginx镜像,我们可以用如下命令:
docker pull [镜像名]
而如果我们想从 DockerHub 上去下载某个指定版本的镜像,我们可以使用以下命令:
docker pull [镜像名:tag版本号]
Docker daemon 发现本地没有我们需要的镜像,会自动去 DockerHub 上去下载镜像。
我们如果想查看下主机下存在多少镜像,我们可以用如下命令:
docker images
那如果我们想运行这个容器中的镜像的话,并且调用镜像里面的 bash ,我们可以使用如下命令:
docker run -t -i [容器名]或[容器ID] /bin/bash
3.容器操作
查看容器
我们要想知道当前有哪些容器在运行,我们可以用如下命令:
docker ps -a
-a
是显示出当前所有正在运行的容器。
操作容器
我们可以用如下命令,对一个容器进行启动、重启、停止:
docker start [容器名]或[容器ID]docker restart [容器名]或[容器ID]docker stop [容器名]或[容器ID]
这个时候我们如果想进入到这个容器中,我们可以使用 attach 命令:
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach
:退出后,容器也停止。
docker exec
:推荐大家使用
docker exec
命令,因为此退出容器终端,不会导致容器的停止。
docker exec -it [容器名]或[容器ID] /bin/bash
查看容器日志
docker logs [容器名]或[容器ID]
删除容器
然后我们用如下命令去删除这个容器:
docker rm [容器名]或[容器ID]
然后这个时候我们再去删除这个镜像:
docker rmi [镜像名]或[镜像ID]
基本的常用命令就介绍到这里。下面进入实际操作。
4.实例演示
下面以操作nginx镜像,来演示一下基本命令的操作。
拉取镜像
从官方仓库中拉取最新版
nginx
➜ docker pull nginxUsing default tag: latestlatest: Pulling from library/nginxbb79b6b2107f: Pull complete111447d5894d: Pull completea95689b8e6cb: Pull complete1a0022e444c2: Pull complete32b7488a3833: Pull completeDigest: sha256:ed7f815851b5299f616220a63edac69a4cc200e7f536a56e421988da82e44ed8Status: Downloaded newer image for nginx:latest
查看拉取的镜像:
➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest f35646e83998 3 days ago 133MB
拉取指定版本nginx镜像:
➜ ~ docker pull nginx:1.19.11.19.1: Pulling from library/nginxbf5952930446: Pull completeba755a256dfe: Pull completec57dd87d0b93: Pull completed7fbf29df889: Pull complete1f1070938ccd: Pull completeDigest: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2Status: Downloaded newer image for nginx:1.19.1
接下来再次查看拉取的指定版本的
nginx
➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest f35646e83998 3 days ago 133MBnginx 1.19.1 08393e824c32 2 months ago 132MB
启动镜像
➜ ~ docker run -d --name my-nginx -p 8080:80 nginx:1.19.19fc9d3cdf10bbead81953de490596a8f1d5b54eb67afde0a769a5d720c274410
查看运行的容器
➜ ~ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES9fc9d3cdf10b nginx:1.19.1 "/docker-entrypoint.…" 33 seconds ago Up 32 seconds 0.0.0.0:8080->80/tcp my-nginx
测试nginx运行
这里运行的本地端口是8080端口。
➜ ~ curl http://localhost:8080<html><head><title>Welcome to nginx!title><style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; }style>head><body><h1>Welcome to nginx!h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.orga>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.coma>.p><p><em>Thank you for using nginx.em>p>body>html>
查看容器日志
➜ ~ docker logs my-nginx/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d//docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh/docker-entrypoint.sh: Configuration complete; ready for start up
进入容器
使用容器名,进入容器:
➜ ~ docker exec -it my-nginx /bin/bashroot@9fc9d3cdf10b:/#
输入
exit
可以退出容器
操作容器
先停止容器,再启动容器
➜ ~ docker stop my-nginxmy-nginx➜ ~ docker restart my-nginxmy-nginx
删除容器
删除前需要先停止容器
➜ ~ docker stop my-nginxmy-nginx➜ ~ docker rm my-nginxmy-nginx
删除镜像
➜ ~ docker rmi nginx:1.19.1Untagged: nginx:1.19.1Untagged: nginx@sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2Deleted: sha256:08393e824c32d456ff69aec72c64d1ab63fecdad060ab0e8d3d42640fc3d64c5Deleted: sha256:16ea6e7b0ecc56682daf0e01d89ffe04aeb702f67e572e94e574b1aa63d2e3d3Deleted: sha256:d1c30fbca15bed39f9d6a613d05885ab2de964ed39c8ad3a7091c94aad935f1cDeleted: sha256:e860d6c3bb27d4d057f6c5412b92afa0ae15664f6914eb460784e755c1a651e5Deleted: sha256:0e6a092cd837c31fb9b85896c5849a2a02ba89131a531fa6ca8811d35bcf25caDeleted: sha256:d0f104dc0a1f9c744b65b23b3fd4d4d3236b4656e67f776fe13f8ad8423b955c
查看镜像,确认指定版本的镜像是否删除完成
➜ ~ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest f35646e83998 3 days ago 133MB
发现镜像只有最新版的,1.19.1版本镜像已经删除。
到此基本的镜像操作就演示到这里了。
小结
更多镜像命令详见下表:
列出
docker -h
中的列有命令:
命令 | 说明 |
---|---|
attach | 将本地标准输入、输出和错误流附加到运行的容器 |
build | 从Dockerfile构建镜像 |
commit | 根据修改的容器创建新镜像 |
cp | 在容器和本地文件系统之间复制文件/文件夹 |
create | 创建一个新的容器 |
diff | 检查容器文件系统上的文件或目录的更改 |
events | 从服务器获取实时事件 |
exec | 在运行的容器中运行命令 |
export | 将容器的文件系统导出为tar归档文件 |
history | 查看一个镜像的历史命令 |
images | 显示所有镜像 |
import | 从压缩文件中导入内容以创建镜像 |
info | 显示整个系统的信息 |
inspect | 返回Docker对象的低级信息 |
kill | 杀死一个或多个正在运行的容器 |
load | 从tar归档文件或STDIN加载映像 |
login | 登录Docker仓库 |
logout | 登出Docker仓库 |
logs | 获取容器的日志 |
pause | 暂停一个或多个容器中的所有进程 |
port | 列出容器的端口映射或特定映射 |
ps | 显示所有容器 |
pull | 从仓库中拉取镜像 |
push | 推送镜像到仓库中 |
rename | 重命名容器 |
restart | 重启一个或多个容器 |
rm | 删除一个或多个容器 |
rmi | 删除一个或多个镜像 |
run | 在新容器中运行一条命令 |
save | 将一个或多个镜像保存到tar归档文件(默认情况下流化到STDOUT) |
search | 在Docker Hub中搜索镜像 |
start | 开启一个或多个停止的容器 |
stats | 显示容器资源使用统计数据的实时流 |
stop | 停止一个或多个运行中的容器 |
tag | 从原镜像中创建一个标签镜像 |
top | 显示容器正在运行的进程 |
unpause | 在一个或多个容器中取消暂停所有进程 |
update | 更新一个或多个容器的配置 |
version | 显示Docker版本信息 |
wait | 阻塞,直到一个或多个容器停止,然后打印它们的退出代码 |