文章目录
目录
文章目录
前言
一、帮助命令
二、镜像命令
1.查看镜像
2.搜索镜像
3.下载镜像
4.删除镜像
三、容器命令
1.启动容器
2.查看容器
3.退出容器
4.删除容器
5.启动和停止容器
四、常用的其它命令
后台运行
查看日志
查看容器中进程的信息
查看镜像的元数据
进入当前正在运行的容器
容器拷贝文件到主机
总结
前言
一、帮助命令
systemctl start docker 启动服务
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
帮助文档的地址:Reference documentation | Docker Documentation
二、镜像命令
1.查看镜像
查看所有本地的主机上的镜像
docker images
# 解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 命令参数可选项
-a, --all # 显示所有镜像 (docker images -a)
-q, --quiet # 仅显示镜像id (docker images -q)
2.搜索镜像
# 解释
# 命令参数可选项 (通过搜索来过滤)
--filter=STARS=3000 # 搜索出来的镜像就是stars大于3000的
docker search mysql --filter=STARS=3000
3.下载镜像
下载镜像:docker pull 镜像名[:tag]
# 两个命令是等价的
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
4.删除镜像
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id # 删除多个镜像(空格分隔)
docker rmi -f $(docker images -aq) # 删除全部的镜像
三、容器命令
下载一个centos 镜像来测试学习。
docker pull centos
1.启动容器
docker run [可选参数] image
# 参数说明
--name="name" 容器名字:用来区分容器
-d 后台方式运行:相当于nohup
-it 使用交互式运行:进入容器查看内容
-p 指定容器的端口(四种方式)小写字母p
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
容器端口
-P 随机指定端口(大写字母P)
# 测试:启动并进入容器
docker run -it centos /bin/bash
ls # 查看容器内的centos(基础版本,很多命令都是不完善的)
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 从容器中退回到主机
exit
2.查看容器
docker ps # 列出当前正在运行的容器
# 命令参数可选项
-a # 列出当前正在运行的容器+历史运行过的容器
-n=? # 显示最近创建的容器(可以指定显示几条,比如-n=1)
-q # 只显示容器的编号
3.退出容器
exit # 容器直接停止,并退出
ctrl+P+Q # 容器不停止,退出
4.删除容器
docker rm 容器id # 删除容器(不能删除正在运行的容器)如果要强制删除:docker rm -f 容器id
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除所有容器
5.启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
四、常用的其它命令
后台运行
# 命令docker run -d 镜像名
docker run -d centos
# 问题:docker ps发现centos停止了
# 常见的坑:docker容器使用后台运行,就必须要有要一个前台进程,docker发现没有应用,就会自动停止。
# 比如:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了建议使用交互模式的启动命令
docker run -it centos /bin/bash
然后ctrl+P+Q # 容器不停止,退出
查看日志
docker logs -tf --tail 容器id
# 自己编写一段shell脚本
docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
docker logs -tf 容器id
docker logs -tf --tail 10 容器id
# 显示日志
-tf # 显示日志
--tail number # 要显示的日志条数
查看容器中进程的信息
# 命令 docker top 容器id
[root@192 ~]# docker top 88d23bcbe1f2
UID PID PPID C STIME TTY TIME CMD
root 21212 21193 0 16:23 ? 00:00:00
root 21600 21212 0 16:29 ? 00:00:00
查看镜像的元数据
# 命令
docker inspect 容器id
进入当前正在运行的容器
# 命令
docker exec -it 容器id /bin/bash
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令
docker exec -it 容器id /bin/bash
# 测试
[root@ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88d23bcbe1f2 centos "/bin/sh -c 'while t…" 13 minutes ago Up 13 minutes silly_lichterman
[root@iZbp13qr3mm4ucsjumrlgqZ ~]# docker exec -it 88d23bcbe1f2 /bin/bash
[root@88d23bcbe1f2 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:23 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 841 0 0 08:37 pts/0 00:00:00 /bin/bash
root 858 1 0 08:37 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 859 841 0 08:37 pts/0 00:00:00 ps -ef
# 方式二
docker attach 容器id
# 测试
[root@ ~]# docker attach 88d23bcbe1f2
正在执行当前的代码...
# docker exec # 进入容器后开启一个新的终端,可以再里面操作(常用)
# docker attach # 进入容器正在执行的终端,不会启动新的进程。
容器拷贝文件到主机
docker cp 容器id:容器内路径 目的主机的路径
[root@192 home]# ll
total 0
[root@192 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@192 home]# docker run -it centos /bin/bash
[root@6eda31ad7987 /]# [root@iZbp13qr3mm4ucsjumrlgqZ home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6eda31ad7987 centos "/bin/bash" 17 seconds ago Up 16 seconds stoic_kepler
# 进入到容器内部
[root@192 home]# docker attach 6eda31ad7987
[root@6eda31ad7987 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@6eda31ad7987 /]# cd /home/
[root@6eda31ad7987 home]# ls
# 在容器的/home路径下创建test.java文件
[root@6eda31ad7987 home]# touch test.java
[root@6eda31ad7987 home]# ls
test.java
[root@6eda31ad7987 home]# exit
exit
[root@192 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@192 home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6eda31ad7987 centos "/bin/bash" About a minute ago Exited (0) 28 seconds ago stoic_kepler
# 将文件拷贝出来到主机上(在主机上执行该命令)
[root@192 home]# docker cp 6eda31ad7987:/home/test.java /home
[root@192 home]# ls
test.java
# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现,自动同步(容器内的/home路径和主机上的/home路径打通)
总结
待补充