Docker 基本概念
镜像(Image)
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
容器(Container)
镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的 “类”和“实例”一样,镜像是静态的定义,容器是镜像运行时的实体。多个容器在一个宿主机上运行时是相互隔离的,每个运行中的容器都有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。这有点像虚拟机,但是不一样,虚拟机是设备虚拟化,而容器是应用虚拟化。
仓库(Registry)
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Docker Hub
就是官方提供的镜像仓库,但是由于祖国伟大的墙,我们push
和pull
镜像都十分痛苦,所以可以考虑搭建 私有Docker Registry
。
基础命令
查找镜像
从镜像仓库中查找相关的镜像 : docker search [OPTIONS] TERM
OPTIONS 属性 :
-s :列出收藏数不小于指定值的镜像。
$ docker search -s 10 nginx
拉取镜像
我们需要拉取一个新镜像的时候,可以使用 docker pull 命令
$ docker pull nginx
列出镜像
当我们下载了很多镜像到本地的时候,我们想要知道都有那些,我们可以使用 docker images 命令
$ docker images
删除镜像
当我们不要想某个镜像的时候,我们可以使用 docker rmi 命令来删除, 加上参数 -f 是强制删除
$ docker rmi -f nginx
创建镜像
当我们像创建一个新镜像的时候,可以有两种方式:
一种是 先拉取镜像,运行镜像,对镜像进行修改,然后 利用 使用docker commit 命令创建镜像
可以使用的参数 : -a:提交的镜像作者; -m :提交时的说明文字;
$ docker commit -a "作者" -m "说明文字" a404c6c174a2 nginx:v1
另外一种方式就是使用 Dockerfile 创建镜像,先编写Dockerfile 文件,然后使用 docker build 命令创建镜像
# 使用当前目录的Dockerfile创建镜像。 -t 指定 tag
$ docker build -t nginx:v1 .
镜像标签
docker tag : 标记本地镜像,将其归入某一仓库。
# 将镜像 nginx 标记为 runoob/nginx:v1 镜像。
$ docker tag nginx runoob/nginx:v1
存出和载入镜像
docker save: 将指定镜像保存成本地文件。
#将镜像 nginx:v1 生成mynginx.tar文档
$ docker save -o mynginx.tar runoob/nginx:v1
- 载入导出的镜像文件;
$ docker load mynginx.tar
发布镜像
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
–disable-content-trust : 忽略镜像的校验,默认开启
# 上传本地镜像runoob/nginx:v1到镜像仓库中。
$ docker push runoob/nginx:v1
创建容器
docker create :创建一个新的容器但不启动它
#使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob
$ docker create --name myrunoob nginx:latest
运行容器
docker run :创建一个新的容器并运行一个命令
#使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
$ docker run --name mynginx -d nginx:latest
#使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
$docker run -P -d nginx:latest
#使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。
$docker run -p 80:80 -v /data:/data -d nginx:latest
#使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
$ docker run -it nginx:latest /bin/bash
进入容器
对于正运行于后台的容器,我们可以使用 docker exec 命令进入到容器中
docker exec :在运行的容器中执行命令
# 进入到 mynginx 容器,并开启一个交互模式的终端
$ docker exec -it mynginx /bin/bash
删除容器
docker rm :删除一个或多少容器
# 强制删除容器 nginx1、nginx2
$ docker rm -f nginx1、nginx2
# 删除容器nginx01,并删除容器挂载的数据卷
$ docker rm -v nginx01
其他命令:
docker ps : 列出容器
docker ps -a:列出所有的容器信息;
docker ps -a | grep nginx ;过滤nginx 容器信息;
docker start 容器ID; 启动一个或多少已经被停止的容器
docker stop 容器ID; 停止一个运行中的容器
docker restart :重启容器