Docker入门2——命令全解析!今天就上手docker好吗
上一篇介绍了小鲸鱼的前世今生,和怎么得到小鲸鱼,相信大家都已经在自己的电脑或者服务器上安装了docker了,今天来讲讲docker的各种命令
帮助命令
最重要的还是放最前,还是我们的docker help,因为命令非常多,也没必要全部记住,我们只需要把这个help命令记住即可
docker --help # 帮助
查看版本
docker version # 显示 Docker 版本信息。
docker info # 显示 Docker 系统信息,包括镜像和容器数
镜像相关命令
查看镜像
docker images
可以看到这里有个列表,表头分别是
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
搜索镜像
docker search +镜像名字
比如我们搜索一个redis镜像,命令就是 docker search redis
可以发现同样有很多列,每一列分别是
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
拉取镜像
拉取镜像就是从中央仓库中把镜像下载到本地
docker pull +镜像名称
比如这里我们下一个mysql
#下载命令
[root@xueshan ~]# docker pull mysql
Using default tag: latest # 不写tag,默认是latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete # 分层下载
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实位置
那如果我们要指定版本下载,只需要在后面加一个冒号版本即可
docker pull mysql:5.7
你看,配置镜像以后下载速度是不是老快了
删除镜像
docker rmi +镜像id
别告诉我找不到镜像id哦,上面查看镜像里的列里是不是有一个?
[root@xueshan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 1b12f2e9257b 2 days ago 448MB
mysql latest db2b37ec6181 2 days ago 545MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
[root@xueshan ~]# docker rmi 1b12f2e9257b
Untagged: mysql:5.7
Untagged: mysql@sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Deleted: sha256:1b12f2e9257be96da5c075f186dc371b18442b0f9281728ac64c9a69c6e0e264
Deleted: sha256:b21d85dcc43f7db4e532c3ca07e5adbc1e02beb37646b7079217ea2b1922af91
Deleted: sha256:603c9faa831d58a3f60eb377cd6246a281a97b906406a92bf3452726a6f15b69
Deleted: sha256:2d927a6eb4cc26ba5454193a3f4abf503b6cea710293d4f0e6d061c08578b687
Deleted: sha256:b96c2c2176ca7b5223469ad39c9e17509505233dd81030878bc12b03074baef4
[root@xueshan ~]#
其他删除命令
#全删!删除所有镜像
docker rmi 'docker images -q'
容器相关命令
注:有镜像才能创建容器,我们这里用CentOS的镜像来测试,可以先虚拟一个CentOS
docker pull centos
新建容器并启动
# 命令
docker run [OPTIONS] IMAGE [COMMAND][ARG...]
# 常用参数说明
--name="Name" # 给容器指定一个名字
-d # 后台方式运行容器,并返回容器的id!
-i # 以交互模式运行容器,通过和 -t 一起使用
-t # 给容器重新分配一个终端,通常和 -i 一起使用
-P # 随机端口映射(大写)
-p # 指定端口映射(小结),一般可以有四种写法
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort (常用)
containerPort
# 测试
[root@xueshan ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest db2b37ec6181 2 days ago 545MB
centos latest 0d120b6ccaa8 2 months ago 215MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
# 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令
[root@xueshan ~]# docker run -it centos /bin/bash
可以发现我们这个时候已经进入容器了,是一个虚拟的centos,我们在我们的CentOS里进入了docker给我们虚拟的CentOS(不许套娃)
我们ls一下,发现CentOS该有的都有,五脏俱全
使用exit命令可以退出容器
[root@0c45879c84c5 /]# exit
exit
[root@xueshan ~]#
查看容器
# 命令
docker ps [OPTIONS]
# 常用参数说明
-a # 列出当前所有正在运行的容器 + 历史运行过的容器
-l # 显示最近创建的容器
-n=? # 显示最近n个创建的容器
-q # 静默模式,只显示容器编号。
这里几个列也一眼都能看出来:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
我们发现如果启动一个容器用exit后,容器就退出了,那怎杨保证退出后容器不停止呢?这里有两种方法,
后台启动容器
- 进入时使用守护线程启动容器
docker run -d 容器名称
如
docker run -d centos
或者我们在退出时 使用Ctrl+P+Q,就会exit但不退出容器
容器其他操作
启动停止容器
docker start (容器id or 容器名) # 启动容器
docker restart (容器id or 容器名) # 重启容器
docker stop (容器id or 容器名) # 停止容器
docker kill (容器id or 容器名) # 强制停止容器
删除容器
docker rm 容器id # 删除指定容器
docker rm -f $(docker ps -a -q) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
查看容器中的运行进程信息
#我们先启动一个容器,这里启动一个centos
[root@feng ~]# docker start bf6015c6befc
# 命令
docker top 容器id
[root@feng ~]# docker top bf6015c6befc
UID PID PPID C STIME TTY TIME CMD
root 4741 4717 0 17:45 pts/0 00:00:00 /bin/bash
[root@feng ~]#
进入正在运行的容器
# 命令1
docker exec -it 容器id bashShell
[root@feng ~]# docker exec -it bf6015c6befc /bin/bash
[root@bf6015c6befc /]#
查看容器的元数据/地址
#命令
docker inspect 容器id/容器NAMES
给了很多
文件拷贝(重要)
我们容器不是虚拟的嘛,在实际开发中,如果虚拟一个centos出来,那在这个centos里装一个mysql、redis或者es什么,配置文件怎么弄呢?当然要学会容器内外的文件拷贝和目录挂载(后面说)
- 从容器内拷贝文件到主机上
#命令
docker cp 容器id:容器内路径 目的主机路径
测试
#进入centos容器
#看准容器id
[root@feng ~]# docker exec -it bf6015c6befc /bin/bash
[root@bf6015c6befc /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#进入home目录
[root@bf6015c6befc /]# cd /home
#创建一个f1的文件
[root@bf6015c6befc home]# touch f1
#ls确认文件已创建
[root@bf6015c6befc home]# ls
f1 test.java
#退出容器
[root@bf6015c6befc home]# exit
执行复制命令
[root@feng ~]# docker cp bf6015c6befc:/home/f1 /home
目录挂载
在创建容器时,可以将宿主机的目录与容器内的目录进行映射,这样我们修改宿主机的某个文件会同步到容器对应的文件。创建容器,添加-v参数,后面为宿主机目录,容器目录
比如我想把我宿主机里的/home/ceshi666目录挂载到容器的/home目录下,可以这么来
[root@feng ~]# docker run -it -v /home/ceshi666:/home centos /bin/bash
[root@4fbe6b2c0447 /]#
测试一下挂上没
应用场景就很广了哈,总不能你每个mysql、redis或者别的环境,都重新整配置文件吧?
容器命令小结
其他常用命令
查看日志
# 命令
docker logs -f 容器id/容器的NAMES
docker logs [OPTIONS] CONTAINER
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志