前言
目前正在出一个Docker
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
Docker
大家应该都听说过,特别是在当今云原生爆火的时代,更值得我们去学习,下面会带大家系统性的认识一下Docker
,并结合一些例子,让大家快速上手~
好了, 废话不多说直接开整吧~
TAG 标记镜像
有时候,我们需要将镜像进行归档,可以使用tag
命令
语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest feb5d9fea6a5 2 years ago 13.3 kB [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker tag feb5d9fea6a5 hello-world:test [root@iZ2ze5vrnucj8nu52fq932Z ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world test feb5d9fea6a5 2 years ago 13.3 kB [root@iZ2ze5vrnucj8nu52fq932Z ~]#
这里的SOURCE_IMAGE
也可以使用image id
替换,效果是一样的,因为有时候镜像的名字可能很长,会显得很冗长
history 查看镜像历史
用来查看某一个镜像的创建历史,也就是镜像的提交记录
语法:
docker history [OPTIONS] IMAGE
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker history -H=true hello-world IMAGE CREATED CREATED BY SIZE COMMENT feb5d9fea6a5 2 years ago /bin/sh -c #(nop) CMD ["/hello"] 0 B <missing> 2 years ago /bin/sh -c #(nop) COPY file:50563a97010fd7... 13.3 kB [root@iZ2ze5vrnucj8nu52fq932Z ~]#
-H
: 已可读的格式打印日期和大小,默认为true
save & 将镜像打包成文件
save
命令可以把一个镜像或多个镜像打包到一个文件中,包含镜像的所有信息
语法:
docker save [OPTIONS] IMAGE [IMAGE…]
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker save hello-world > hello-world-docker.tar [root@iZ2ze5vrnucj8nu52fq932Z ~]# ls hello-world-docker.tar [root@iZ2ze5vrnucj8nu52fq932Z ~]#
- 这里的
>
也可以替换成-o
,效果是一样的
感兴趣的小伙伴可以解包看看有啥内容~
load & 从指定文件中加载镜像
从指定文件中加载镜像,该文件需要是save
命令保存的文件
语法:
docker load [OPTIONS]
-i
: 指定文件的路径-q
:安静模式输出
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker load -i hello-world-docker.tar -q Loaded image: hello-world:test [root@iZ2ze5vrnucj8nu52fq932Z ~]#
容器相关命令
run & 创建一个容器并运行
创建一个容器并运行,如果创建容器的镜像不存在则会从远程镜像仓库
下载,运行容器的同时还能给容器发送一个命令
语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
介绍一下相关的参数:
OPTIONS
:可选参数IMAGE
:镜像COMMAND
:需要运行的命令ARG
:命令的参数
OPTIONS
的常用值:
这里只选常用的一些参数,大家也可以使用docker run —help
可以查看run
命令的所有可用参数
-i
: 以交互模式运行,通常与-t一起使用-t
: 为容器分配一个伪终端,通常与-i一起使用-d
: 后台模式运行容器,并返回容器id-p list
: 指定端口映射,格式为宿主机端口:容器端口-P
: 随机分配端口映射—name string
: 给容器指定一个名称-m bytes
: 限制容器可以使用的内存大小,单位可选b、k、m、g-v list
: 把宿主机的磁盘路径挂载到容器的某个路径—volumes-from list
: 绑定别的容器某个路径到此容器的某个路径-w
: 指定容器的工作目录,默认是根目录—rm
: 当容器停止运行时自动删除—hostname string
: 指定容器的主机名
示例:
docker run -it -d —name my-app -p 8888:8080 -v /logs/:/logs/ -m 500M my-app
上述示例(假设这个镜像存在,是一个web服务的镜像,大家不要直接拿过去就执行~),使用了my-app
镜像创建并运行了my-app
容器,并映射到了主机端口8888
,挂载了主机目录/logs/
,限制内存大小为500M
,并且在后台运行
这里可以理解为linux中的nohup
,如果不指定-d
,容器运行的时候不会退出终端,如果强行退出,容器也会随之停止,指定了,容器就可以在后台运行,一般部署服务的时候都会指定-d
start & 启动容器
可以启动一个或多个已经停止的容器
语法:
docker start [OPTIONS] CONTAINER [CONTAINER…]
这里的CONTAINER
可以是指定的container name
也可以是container id
-a
: 将容器的标准输出或标准错误附加到终端-i
: 为容器附加一个标准输入终端
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker start 3f2d1dd782f1 -a Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ [root@iZ2ze5vrnucj8nu52fq932Z ~]#
上述示例运行了已经停止的hello-world
的容器,并向终端输出了相关日志
restart && 重启容器
可以对一个或多个容器进行重启。如果容器是未启动的则会启动,如果是正在运行中的,则会重启
语法
docker restart [OPTIONS] CONTAINER [CONTAINER…]
CONTAINER
:容器
OPTIONS
:可选参数:
-t int
: 在重启之前等待几秒,默认10秒
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker restart -t 3 3f2d1dd782f1 3f2d1dd782f1 [root@iZ2ze5vrnucj8nu52fq932Z ~]#
上述示例在3
秒之后重启hello-world
容器
stop & 停止容器
可以停止一个或多个正在运行的容器
kill
命令也可以用来停止容器,不同的是stop
命令允许容器在停止之前有一定的时间来进行额外操作,如释放链接、关闭请求等kill
命令则会直接强制杀死容器
语法
docker stop [OPTIONS] CONTAINER [CONTAINER…]
OPTIONS
的常用值:
-t int
: 等待n秒后如果还没停止,直接杀死,默认10秒
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker stop -t 3 3f2d1dd782f1 3f2d1dd782f1 [root@iZ2ze5vrnucj8nu52fq932Z ~]#
上述示例,3秒之后停止容器
kill & 杀死容器
杀死一个或多个正在运行的容器
语法
docker kill [OPTIONS] CONTAINER [CONTAINER…]
OPTIONS
的常用值:
-s string
: 给容器发送一个信号,信号编号和linux
原生命令kill
的信号编号一致,默认值9,下文列出一些常用值
-s
参数信号编号常用值:
1:杀死并重新加载,也可用HUP表示 9:强制杀死,也可用KILL表示,默认值 15:正常停止,也可用TERM表示
示例:
docker kill -s 9 3f2d1dd782f1
ps & 查看容器列表
前边学习了运行,停止等命令,那如何判断一个容器是否已经被停止了或者正在运行呢,或者查看所有的容器信息呢。
使用ps
命令,可以列出所有容器的列表,查看容器的基本信息。不加任何参数的情况下,默认只展示正在运行的容器
语法:
docker ps [OPTIONS]
OPTIONS
的常用值:
-a
: 显示所有容器,默认只显示正在运行的-f filter
: 根据条件过滤容器,过滤条件详见下文-n int
:显示最后创建的n个容器,包含所有状态-l
: 显示最新创建的容器,包含所有状态-q
: 只显示容器id-s
: 显示容器大小,默认不显示该列—no-trunc
:显示内容不截断,默认情况下显示的容器是截断后的信息
-f
参数表示根据条件过滤搜索出来的镜像,语法如下
docker ps -f KEY=VALUE
KEY的可选值如下:
id
: 根据容器id过滤name
: 查看容器名称中包含给定字段的容器exited
: 根据容器退出的错误码进行过滤status
: 根据容器的状态进行过滤,状态可选值有:created、paused、exited、dead、running、restarting、removingbefore
: 只显示在某个容器之前创建的容器since
: 只显示在某个容器之后创建的容器volume
: 过滤绑定了某个目录的容器,只针对运行中的容器publish
: 根据宿主机端口过滤,只针对运行中的容器expose
: 根据容器端口过滤,只针对运行中的容器
示例:
[root@iZ2ze5vrnucj8nu52fq932Z ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f2d1dd782f1 hello-world "/hello" 7 days ago Exited (0) 13 minutes ago clever_mcnulty [root@iZ2ze5vrnucj8nu52fq932Z ~]#
列含义如下 :
CONTAINER ID | IMAGE | COMMAND | CREATED | PORTS | NAMES | 容器id | 对应的镜像 | 容器启动时运行的命令 | 创建时间 | 绑定的的端口 | 容器名称 |
学到这里, 基本命令够用了,使用上应该不会有太大问题,大家可以尝试部署一下nginx,redis
之类的第三方镜像了~
总之,多去尝试,没有那么难~
结束语
本节到这里就结束了,docker
命令很多,大家不要去背,如果忘了可以使用docker -h
进行查看,多动手,多尝试,多踩坑,下节继续给大家讲解它的用法~
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注
鼓励一下呗~