回忆上一篇。我们学习了怎么安装docker,然后再利用docker拉取了镜像,构建了镜像,最后教大家怎么在docker运行我们自己构建的镜像。到这里相信你对docker的基本原理有了一定了解,同时也知道怎么在docker部署简单的单机版本jar项目了。
现在,可能新同学对docker的命令还不是了解。那么,这一节,我们就一起来加强学习下docker的常用命令。
docker命令也分为三大块,分别对应我们所说的三件套(仓库,镜像,容器)。现在我就分三个模块给大家讲解,所以docker命令其实就对三个部位的不通操作,明白了这点命令就很好记住,很好查了,否正很难记住那么多命令的。我们看着下面这张图,主要讲解一些项目中经常用到的命令。
一、仓库镜像管理命令
功能 | 指令 | 备注 | 示例 |
---|---|---|---|
从镜像服务器中查找镜像 | docker search [OPTIONS] <镜像名> | OPTIONS可选指令: –automated :只列出 automated build类型的镜像; –no-trunc :显示完整的镜像描述; -s :列出收藏数不小于指定值的镜像。 | sudo docker search -s 10 java |
拉取镜像 | docker pull <镜像名称 : tag> | 相当于下载。tag,镜像版本号 | sudo docker pull java:8 |
创建镜像 | docker build -t <镜像名> | 需要编码dockerfile文件才能使用该命令 | sudo docker build -t web . |
查找所有镜像 | docker images | 查询所有本地仓库的镜像,并不去是远端仓库的 | sudo docker images |
删除本地一个或多少镜像。 | docker rmi [OPTIONS] <镜像名:tag> | OPTIONS可选指令: f:强制删除 | sudo docker rmi java:8 |
查看指定镜像的创建历史 | docker history [OPTIONS] <镜像名:tag> | OPTIONS可选指令: -H :以可读的格式打印镜像大小和日期,默认为true; –no-trunc :显示完整的提交记录; -q :仅列出提交记录ID。 | sudo docker history web |
二、镜像运行命令
功能 | 指令 | 备注 | 示例 |
---|---|---|---|
运行一个新容器 | docker run [OPTIONS] <镜像名:版本> | OPTIONS说明: -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; -d: 后台运行容器,并返回容器ID; -p:指定暴露的内部端口和外部端口 -i: 以交互模式运行容器,通常与 -t 同时使用; -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; –name=”web”: 为容器指定一个名称; –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; -h “mars”: 指定容器的hostname; -e username=”ritchie”: 设置环境变量; –env-file=[]: 从指定文件读入环境变量; –cpuset=”0-2” or –cpuset=”0,1,2”: 绑定容器到指定CPU运行; -m :设置容器使用内存最大值; –net=”bridge”: 指定容器的网络连接类型,支持bridge/host/none/container: 四种类型; –link=[]: 添加链接到另一个容器; –expose=[]: 开放一个端口或一组端口; | sudo run –name web -d -p 8080:8080 web |
三、容器管理命令
功能 | 指令 | 备注 | 示例 |
---|---|---|---|
查看容器日志 | docker logs [OPTIONS] <容器名或者ID> | OPTIONS说明: -f : 跟踪日志输出 –since :显示某个开始时间的所有日志 -t : 显示时间戳 –tail :仅列出最新N条容器日志 | sudo docker logs -f web |
查看正在运行的容器 | docker ps [OPTIONS] | OPTIONS说明: -a :显示所有的容器,包括未运行的。 -f :根据条件过滤显示的内容。 –format :指定返回值的模板文件。 -l :显示最近创建的容器。 -n :列出最近创建的n个容器。 –no-trunc :不截断输出。 -q :静默模式,只显示容器编号。 -s :显示总的文件大小。 | sudo docker ps |
删除多个容器 | docker rm [OPTIONS] <容器名称或者ID> | OPTIONS说明: -f :通过SIGKILL信号强制删除一个运行中的容器 -l :移除容器间的网络连接,而非容器本身 v :-v 删除与容器关联的卷 | 删除web1和web2容器 sudo docker rm -f web1、web2 删除所有容器 sudo docker rm $(docker ps -a -q) |
删除当个容器 | docker rm <容器名或ID> | 删除单个容器 | sudo docker rm web1 |
停止一个容器 | docker stop <容器名或ID> | 停止一个容器 | docker stop web |
杀死一个容器 | docker kill <容器名或ID> | 杀死一个容器 | docker kill web |
将停止的容器拉起(启动) | docker start <容器名或ID> | 将停止的容器拉起(启动) | docker start web |
进入容器内部 | docker exec -it 容器名或ID /bin/bash | 进入容器 | sudo docker exec -it 775c7c9ee1e1 /bin/bash |
拷贝文件 | docker cp | 拷贝文件 | sudo docker cp de84eaa7e453:/home/web/logs/2018-06-05/info.log . |
案例实践:
1、如何从容器里面拷文件到宿主机?
需求:将容器/home/web/logs/2018-06-05/info.log拷贝到宿主机上
命令:docker cp <容器名>:<要拷贝的文件在容器里面的路径> < 要拷贝到宿主机的相应路径>
示例:
#在宿主机执行下面的命令
docker cp de84eaa7e453:/home/web/logs/2018-06-05/info.log .
注:“.”表示拷贝到当前路径,也可是设定如:/home/xxx/xxx/xxxx
执行过程展示:
root@ubuntu:/home/kim/project/web# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de84eaa7e453 web "java -Djava.securit…" 30 minutes ago Up 30 minutes 0.0.0.0:8080->8080/tcp web
2730dee4f305 mysql:5.7 "docker-entrypoint.s…" 5 hours ago Up 5 hours 0.0.0.0:13306->3306/tcp apollo-db
root@ubuntu:/home/kim/project/web# ls
Dockerfile web-1.0.1.jar web-1.0.2.jar
root@ubuntu:/home/kim/project/web# docker cp de84eaa7e453:/home/web/logs/2018-06-05/info.log .
root@ubuntu:/home/kim/project/web# ls
Dockerfile info.log web-1.0.1.jar web-1.0.2.jar
root@ubuntu:/home/kim/project/web#
2、如何从宿主机拷文件到容器里面?
需求:从宿主机当前文件夹下,将web-1.0.2.ja拷贝到de84eaa7e453容器的 /home/web下面
docker cp <宿主机文件路径> <容器ID>:<容器存放文件路径>
示例:
# 在宿主机执行下面的命令
docker cp web-1.0.2.jar de84eaa7e453:/home/web
执行过程展示:
root@ubuntu:/home/kim/project/web# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de84eaa7e453 web "java -Djava.securit…" 16 minutes ago Up 16 minutes 0.0.0.0:8080->8080/tcp web
2730dee4f305 mysql:5.7 "docker-entrypoint.s…" 5 hours ago Up 5 hours 0.0.0.0:13306->3306/tcp apollo-db
root@ubuntu:/home/kim/project/web# ls
Dockerfile web-1.0.1.jar web-1.0.2.jar
root@ubuntu:/home/kim/project/web# docker cp web-1.0.2.jar de84eaa7e453:/home/web
root@ubuntu:/home/kim/project/web# docker exec -it de84eaa7e453 /bin/bash
root@de84eaa7e453:/# cd home/web
root@de84eaa7e453:/home/web# ls
app.jar logs web-1.0.1.jar web-1.0.2.jar #拷贝进来的文件
root@de84eaa7e453:/home/web#
好了,常用命令就用到这里了。