Docker入门2——命令全解析!今天就上手docker好吗

Docker入门2——命令全解析!今天就上手docker好吗

上一篇介绍了小鲸鱼的前世今生,和怎么得到小鲸鱼,相信大家都已经在自己的电脑或者服务器上安装了docker了,今天来讲讲docker的各种命令

image-20201025161312210

帮助命令

最重要的还是放最前,还是我们的docker help,因为命令非常多,也没必要全部记住,我们只需要把这个help命令记住即可

docker --help # 帮助

查看版本

docker version # 显示 Docker 版本信息。
docker info # 显示 Docker 系统信息,包括镜像和容器数

镜像相关命令

查看镜像

docker images

image-20201025161728688

可以看到这里有个列表,表头分别是

REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

搜索镜像

docker search +镜像名字

比如我们搜索一个redis镜像,命令就是 docker search redis

image-20201025162033534

可以发现同样有很多列,每一列分别是

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

GIF 2020-10-25 16-26-28

你看,配置镜像以后下载速度是不是老快了

删除镜像

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(不许套娃)

image-20201025163356716

我们ls一下,发现CentOS该有的都有,五脏俱全

image-20201025163519352

使用exit命令可以退出容器

[root@0c45879c84c5 /]# exit
exit
[root@xueshan ~]# 

查看容器

# 命令
docker ps [OPTIONS]
# 常用参数说明
-a # 列出当前所有正在运行的容器 + 历史运行过的容器
-l # 显示最近创建的容器
-n=? # 显示最近n个创建的容器
-q # 静默模式,只显示容器编号。

image-20201025163703282

这里几个列也一眼都能看出来:

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

image-20201025174736041

# 命令
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

image-20201025175129442

[root@feng ~]# docker exec -it bf6015c6befc /bin/bash
[root@bf6015c6befc /]# 

查看容器的元数据/地址

#命令
docker inspect 容器id/容器NAMES

给了很多

image-20201025195012653

文件拷贝(重要)

我们容器不是虚拟的嘛,在实际开发中,如果虚拟一个centos出来,那在这个centos里装一个mysql、redis或者es什么,配置文件怎么弄呢?当然要学会容器内外的文件拷贝和目录挂载(后面说)

  • 从容器内拷贝文件到主机上
#命令
docker cp 容器id:容器内路径 目的主机路径

测试

#进入centos容器

image-20201025200244649

#看准容器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

GIF 2020-10-25 20-12-08

目录挂载

在创建容器时,可以将宿主机的目录与容器内的目录进行映射,这样我们修改宿主机的某个文件会同步到容器对应的文件。创建容器,添加-v参数,后面为宿主机目录,容器目录

比如我想把我宿主机里的/home/ceshi666目录挂载到容器的/home目录下,可以这么来

[root@feng ~]# docker run -it -v /home/ceshi666:/home centos /bin/bash
[root@4fbe6b2c0447 /]# 

测试一下挂上没

GIF 2020-10-25 20-23-43

应用场景就很广了哈,总不能你每个mysql、redis或者别的环境,都重新整配置文件吧?

容器命令小结

image-20201025201653434

其他常用命令

查看日志

# 命令
docker logs -f  容器id/容器的NAMES

docker logs [OPTIONS] CONTAINER

-f : 跟踪日志输出

--since :显示某个开始时间的所有日志

-t : 显示时间戳

--tail :仅列出最新N条容器日志

image-20201025194754952

©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页