基本概念
镜像 image 容器 container 仓库 repository
镜像
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
容器
镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会把容器和虚拟机搞混。
仓库
镜像构建完成后,可以很容易的在当前宿主上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,DockerRegistry 就是这样的服务。
基本应用
1) 查看所有镜像
docker images
2) 拉取镜像
docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
3) 运行一个新容器并给它起个名字
docker run -it --name temp ubuntu:16.04 # -i 交互式操作 # -t 终端 # --name temp 容器起名字为temp # ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器
输入命令vim,git等命令,可以看到命令都无法使用,可以确定我们使用的是一个纯净的容器。
4) 查看容器列表
docker ps # 查看启动了的容器docker ps -a # 查看所有的容器(启不启动都算)
5) 启动容器
docker start temp # temp可以是容器名或者id(id在ps命令中可以看到)
6) 运行容器
docker exec -it temp bash # -i 交互式操作 # -t 终端# bash:放在镜像名后的是命令。这里我们希望有个交互式 Shell,因此用的是 bash(开启一个人机交互的窗口)。
7) 删除镜像
1)查询容器
docker ps -a 查询容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6adbd1b933a9 nginx:alpine "nginx -g 'daemon of…" 11 minutes ago Up 11 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp dnmp-nginx 7ba3e71d7310 nginx "/bin/bash" 47 hours ago Exited (127) 47 hours ago goofy_bhaskara 70278207ab92 mysql:8.0.11 "docker-entrypoint.s…" 12 days ago Up 11 minutes 0.0.0.0:3306->3306/tcp dnmp-mysql884a717efe4e dnmp_php "docker-php-entrypoi…" 12 days ago Up 11 minutes 9000/tcp dnmp-php
2)删除指定容器
docker rm 884 //删除PHP
3)查询镜像
docker images REPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 7042885a156a 11 days ago 109MBdnmp_php latest 172f496bb458 12 days ago 535MBnginx alpine 315798907716 13 days ago 17.8MBredis 4.0 b00f982f9bf7 3 weeks ago 83.4MBphp 7.2-fpm 2bd622691e6e 4 weeks ago 371MBmysql 8.0.11 5dbe5b6313e1 5 months ago 445MB
4)删除镜像
docker rmi 5db
1. 删除前需要保证容器是停止的 stop 2. 需要注意删除镜像和容器的命令不一样。 docker rmi ID ,其中 容器(rm) 和 镜像(rmi) 3. 顺序需要先删除容器
常用命令
命令 | 说明 | 文档地址 |
---|---|---|
docker search | 寻找镜像 | docker search |
docker pull | 拉取镜像 | docker pull |
docker login | 登录DockerHub | docker login |
docker push | 推送镜像到 DockerRegistry | docker push |
docker images | 查看本地镜像 | docker images |
docker rmi | 删除本地镜像 | docker rmi |
docker run | 创建并运行容器(不能重复创建) | docker run |
docker stop | 停止指定容器 | docker stop |
docker start | 启动指定容器 | docker start |
docker restart | 重新启动容器 | docker restart |
docker rm | 删除指定容器 | docs.docker.com |
docker ps | 查看容器 | docker ps |
ocker logs | 查看容器运行日志 | docker logs |
docker exec | 进入容器 | docker exec |
docker cp | 容器和宿主机文件拷贝 | docker cp |
docker save | 保存镜像到本地压缩文件 | docker save |
docker load | 加载本地压缩文件到镜像 | docker load |
docker inspect | 查看容器详细信息 | docker inspect |
案例:
教学环节说明:以 Nginx 为例演示上述命令。
# 第1步,去DockerHub查看nginx镜像仓库及相关信息 docker search nginx # 第2步,拉取Nginx镜像 docker pull nginx # 第3步,查看镜像 docker images # 结果如下: _REPOSITORY TAG IMAGE ID CREATED SIZE_ _nginx latest 605c77e624dd 16 months ago 141MB_ _mysql latest 3218b38490ce 17 months ago 516MB_ # 第4步,创建并允许Nginx容器 docker run -d --name nginx -p 80:80 nginx # 第5步,查看运行中容器 docker ps # 也可以加格式化方式访问,格式会更加清爽 docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" # 第6步,访问网页,地址:http://虚拟机地址 # 第7步,停止容器 docker stop nginx # 第8步,查看所有容器 docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" # 第9步,再次启动nginx容器 docker start nginx # 第10步,再次查看容器 docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" # 第11步,查看容器详细信息 docker inspect nginx # 第12步,进入容器,查看容器内目录 docker exec -it nginx bash # 或者,可以进入MySQL docker exec -it mysql mysql -uroot -p # 第13步,删除容器 docker rm nginx # 发现无法删除,因为容器运行中,强制删除容器 docker rm -f nginx
更多功能:
1、开机自启
默认情况下,每次重启虚拟机我们都需要手动启动 Docker 和 Docker 中的容器。通过命令可以实现开机自启:
# Docker开机自启 systemctl enable docker
# Docker容器开机自启 docker update --restart=always [容器名/容器id]
2、容器保存
a. 容器保存为镜像
docker commit mynginx mynginx_i
b. 将镜像保存为tar 文件
docker save -o mynginx.tar mynginx_i
c. 镜像恢复与迁移,先删除掉mynginx_img镜像,然后执行此命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
更多相关:
1. Docker快速入门;
2. 常用基本命令;
3. 快速学习Docker;
4. 如何修改容器端口?
5. Docker相关文章;
http://www.savh.cn/thread-1161.htm
转载请注明:Savh.Cn 发表