文章目录
- Docker常用命令
- 帮助命令
- 镜像命令
- 容器命令
- 常用的其它命令⭐
- 小结
Docker常用命令
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息
docker 命令 --help # 帮助命令
镜像命令
docker images 查看本地主机上所有的镜像
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 11 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all #列出所有的镜像
-q, --quiet #只显示镜像的id
docker search 镜像搜索
#可选项,通过收藏来过滤
--filter=STARS=3000 #搜索出来的镜像的收藏数是大于3000的
docker pull 下载镜像
#下载镜像 docker pull 镜像名[:tag]
若不加版本号默认下载最新版本
docker pull mysql
加版本号
docker image mysql:5.7
docker rmi 删除镜像
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像
docker rmi -f $(docker image -aq) #删除全部的镜像
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
#测试,启动并进入容器
[root@localhost /]# docker run -it centos /bin/bash
[root@c6b64bddbb8c /]# ls #查看容器内的centos,基础版本,很多命令不完善
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器中退回主机
[root@c6b64bddbb8c /]# exit
exit
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@localhost /]#
列出所有正在运行的容器
docker ps #查看正在运行的容器
-a #列出当前正在运行的容器+历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
退出容器
exit #直接容器停止并退出
ctrl+P+Q #容器不停止退出
删除容器
docker rm 容器id #删除指定容器,不能删除正在运行的容器,如果要强制删除则用rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止容器
常用的其它命令⭐
后台启动容器
#命令 docker run -d 镜像名
[root@localhost /]# docker run -d centos
# 问题docker ps,发现centos停止了
#常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#例如在docker容器中装了一个nginx,将该容器启动后发现自己并没有提供服务,就会立刻停止
查看日志
docker logs -f -t --tail number 容器id
#自己编写一段shell脚本
[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo zlw;sleep 1;done"
865ae2720b00c7b4959f1a923912a6409204054d3aac5625dc748bc26c5b08be
[root@localhost /]# docker ps
CONTAINER ID IMAGE
865ae2720b00 centos
#显示日志
-tf #显示日志
--tail number #要显示日志条数
[root@localhost /]# docker logs -tf --tail 5 865ae2720b00
查看容器中的进程信息
top命令
[root@localhost /]# docker top 865ae2720b00
UID PID PPID C STIME
root 5084 5064 0 21:53
root 5616 5084 0 22:00
查看容器的元数据
用于查看容器的详细信息(挂载,网络等)
#命令
docker inspect 容器id
#测试
[root@localhost /]# docker inspect 865ae2720b00
进入当前正在运行的容器
#我们通常容器都是使用后台方式运行的,需进入容器,修改一些配置
#命令
docker exec -it 容器id bashShell
#测试
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
865ae2720b00 centos "/bin/sh -c 'while t…" 18 minutes ago Up 18 minutes competent_elbakyan
[root@localhost /]# docker exec -it 865ae2720b00 /bin/bash
[root@865ae2720b00 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:53 ? 00:00:00 /bin/sh -c while true;do echo zlw;sleep 1;done
root 1173 0 0 14:12 pts/0 00:00:00 /bin/bash
root 1192 1 0 14:12 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 1193 1173 0 14:12 pts/0 00:00:00 ps -ef
#方式二
docker attach 容器id
#测试
docker attach 865ae2720b00
正在执行当前的代码
#docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目的主机路径
#查看运行的容器
[root@localhost home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
912c9ac7851b centos "/bin/bash" About a minute ago Up About a minute sad_snyder
#进入docker容器内部
[root@localhost home]# docker attach 912c9ac7851b
[root@912c9ac7851b /]# cd /home
#在容器内创建一个文件
[root@912c9ac7851b home]# touch zlw.java
[root@912c9ac7851b home]# ls
zlw.java
#退出容器,退出容器并不影响里面的数据,因此即便不运行也可以将容器内的文件拷贝到主机
[root@912c9ac7851b home]#exit
[root@localhost home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
912c9ac7851b centos "/bin/bash" 2 minutes ago Up 2 minutes sad_snyder
#将文件拷贝出来到主机上
[root@localhost home]# docker cp 912c9ac7851b:/home/zlw.java /home
[root@localhost home]# ls
zl.java zlw.java
#拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现同步文件
小结