在开始这篇文章之前,有几个需要了解的概念
docker镜像是什么
docker镜像是什么(有兴趣可以参考一下这篇知乎的回答) 文章这里引用一个回答
电脑装系统的时候,需要一张盘,我们称其为镜像,镜像是一个固定的文件,这次读盘和下次读盘内容是一样的。
但有些开发者会把这个镜像安装到电脑上,再在这个电脑上删删改改,再重新打包一个镜像刻盘,固化出一个镜像来,这就是镜像打包。
镜像 => 修改打包 => 镜像 => 修改打包 => 镜像
如国内以前泛滥的盗版XP系统,从微软官方镜像出发,添加小工具,系统设置修改优化,加主题,造出番茄花园,雨林木风,深度之类的盗版安装碟。
镜像装到电脑后,这个电脑就是个容器,里面包含使用者的数据和设置。从玩盗版系统到玩 docker,区别只是电脑从实体变成虚拟机罢了。
Docker 上虚拟机被设计得很廉价,一台物理机上可以开很多虚拟机。廉价到可以为每一个软件专开一个虚拟机,像银行的ATM机器,虽是Windows系统的电脑,但终其一生只跑一个程序只显示一个界面。
虚拟机的廉价,加上镜像里又打包好了所需的软件,导致了大家想装某个软件的时候,可以直接开个新虚拟机,然后找这个软件的 Docker 镜像,啪一下装上去跑起来。
比起把软件往一个现成系统上装,要省事千倍,尤其是装那些需要编译,系统内核兼容,各种库依赖,缺少帮助文档的开源软件。
所以 Docker 流行了起来。
docker容器是什么
docker容器是什么
容器技术和虚拟机技术有一定区别的,虚拟机中操作系统是一个很重而且很笨的程序,没有办法划分出过多的虚拟机,可是我们部署的是应用程序,要用的也是应用程序而不是操作系统。这时候容器技术就发挥了作用(详细可以参考上述文章),与虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。容器技术为打包服务栈提供了一种更加高效的方式。 这里我们介绍的docker便是容器技术。
docker的容器使用
Docker 客户端是与 Docker 守护进程(Docker Daemon)交互的命令行工具。
docker 客户端非常简单,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。
可以看到如下图所展示的内容
通过下面的代码就可以更深入的了解指定的 Docker 命令使用方法。
docker (指令) --help
docker run | 启动一个新的容器并运行命令 | docker run -d ubuntu |
docker ps | 列出当前正在运行的容器 | docker ps |
docker ps -a | 列出所有容器(包括已停止的容器) | docker ps -a |
docker build | 使用 Dockerfile 构建镜像 | docker build -t my-image . |
docker images | 列出本地存储的所有镜像 | docker images |
docker pull | 从 Docker 仓库拉取镜像 | docker pull ubuntu |
docker push | 将镜像推送到 Docker 仓库 | docker push my-image |
docker exec | 在运行的容器中执行命令 | docker exec -it container_name bash |
docker stop | 停止一个或多个容器 | docker stop container_name |
docker start | 启动已停止的容器 | docker start container_name |
docker restart | 重启一个容器 | docker restart container_name |
docker rm | 删除一个或多个容器 | docker rm container_name |
docker rmi | 删除一个或多个镜像 | docker rmi my-image |
docker logs | 查看容器的日志 | docker logs container_name |
docker inspect | 获取容器或镜像的详细信息 | docker inspect container_name |
docker exec -it | 进入容器的交互式终端 | docker exec -it container_name /bin/bash |
docker network ls | 列出所有 Docker 网络 | docker network ls |
docker volume ls | 列出所有 Docker 卷 | docker volume ls |
docker-compose up | 启动多容器应用(从 docker-compose.yml 文件) | docker-compose up |
docker-compose down | 停止并删除由 docker-compose 启动的容器、网络等 | docker-compose down |
docker info | 显示 Docker 系统的详细信息 | docker info |
docker version | 显示 Docker 客户端和守护进程的版本信息 | docker version |
docker stats | 显示容器的实时资源使用情况 | docker stats |
docker login | 登录 Docker 仓库 | docker login |
docker logout | 登出 Docker 仓库 | docker logout |
-d
:后台运行容器-it
:以交互式终端运行容器-t
:为镜像指定标签
我们可以通过以下指令来列出docker中存在的容器
docker ps -a
-a表示同时列出未运行的容器
我们可以通过
docker start 容器id
来启动对应的容器,这里注意run和start的区别, run是重新建立一个容器,而start仅仅只是启动一个容器
docker镜像的基本使用
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub(docker hub网站) 公共镜像源下载。
我们可以使用指令
docker images
来获取我们当前系统拥有哪些镜像
-
REPOSITORY:表示镜像的仓库源
-
TAG:镜像的标签
-
IMAGE ID:镜像ID
-
CREATED:镜像创建时间
-
SIZE:镜像大小
我们想获取新镜像的时候
docker pull 镜像名
然后docker就会自动在docker hub(默认)里面进行下载
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:
docker rmi hello-world
当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可能会对镜像进行修改,这里就不继续写了 没保存上已经没心情了 docker修改镜像大家有兴趣可以参考一下以下网站
参考网站
- https://www.runoob.com/docker/docker-image-usage.html
- https://zhuanlan.zhihu.com/p/187505981
- https://www.zhihu.com/question/27561972/answer/3071494487