1.概念
Docker是世界领先的软件容器平台,容器就是将软件打包成标准化单元,以用于开发、交付和部署。
容器镜像是轻量级、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
容器化软件适用于基于Linux和Windows的应用,在任何环境中能够始终如一地运行。
容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
2.思想
集装箱:Docker容器包含了应用程序及其所有依赖项,确保在任何环境中都能以相同的方法运行
标准化:规定了运输方式、存储方式、API接口
隔离:每个Docker容器都在增加的隔离环境中运行,与宿主机和其他容器隔离
3.特点
轻量:在一台机器上运行的多个Docker容器可以共享这台机器的操作系统内核;他们能够迅速启动,只需占用很少的计算和内存资源。镜像时通过文件系统层进行构造的,并共享一些公共文件。这样就能尽量降低磁盘用量,并能更地下载镜像。
标准:Docker容器基于开放式标准,能够在所有主流的Linux版本Windows以及包括VM、裸机服务器和云在内的任何基础设施上运行。
安全:Docker赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此应用出现问题,也是单个容器的问题。
4.基本概念
4.1 镜像
镜像是一个特殊的文件系统,操作系统分为内核和用户空间。对于Linux而言,会挂载root文件系统为其提供用户空间支持,而Docker镜像就相当于是一个root文件系统。
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数。
4.2 容器
镜像运行时的实体,容器可以被创建、启动、停止、删除、暂停等。
容器的实质时进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立命名空间。
容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡,因此,任何保存于容器存储层的信息都会随着容器的删除而丢失。
4.3 仓库
镜像仓库时Docker用来集中存放镜像文件的地方,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。
5.Docker常见命令
5.1 基本命令
docker version #查看docker版本
docker images #查看所有已下载镜像
docker container ls #查看所有容器
docker ps #查看正在运行的容器
docker image prune # 清理临时的、没有被使用的镜像文件
5.2 拉取镜像
docker search mysql #查看mysql相关镜像
docker pull mysql:5.7 #拉取5.7版本的mysql镜像
docker image ls #查看所有已下载的镜像
5.3 构建镜像
运行docker builde命令并指定一个Dockerfile时,Docker会读取Dockerfile中的指令,逐步构建一个新的镜像,并将其保存在本地。
docker build -t imageName:1.0.0
# imageName 是镜像名称 1.0.0 是版本号或标签
Dockerfile的文件名不必须为Dockerfile,也不一定要放在构建上下文的根目录中。使用-f或--file选项,可以指定任何位置的任何文件作为Dockerfile。
5.4 删除镜像
通过docker rmi[image]删除镜像,在删除镜像前要确保这个镜像没有被容器引用。通过docker ps 查看是否被容器引用。
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4cd691d9f80 mysql:5.7 "docker-entrypoint.s…" 7 weeks ago Up 12 days 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
可以看到 mysql 正在被 id 为 c4cd691d9f80 的容器引用,我们需要首先通过 docker stop c4cd691d9f80
或者 docker stop mysql
暂停这个容器。
然后查看 mysql 镜像的 id
➜ ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 f6509bac4980 3 months ago 373MB
通过 IMAGE ID 或者 REPOSITORY 名字即可删除
docker rmi f6509bac4980 # 或者 docker rmi mysql
5.5 镜像推送
docker push
命令用于将本地的 Docker 镜像上传到指定的 Registry/Hub
# 将镜像推送到私有镜像仓库 Harbor
# harbor.example.com是私有镜像仓库的地址,ubuntu是镜像的名称,18.04是镜像的版本标签
docker push harbor.example.com/ubuntu:18.04
6.镜像的数据管理
1 数据卷
数据卷是由Docker管理的数据存储区域,有一下特点:
1可以在容器之间共享重用。
2.即使容器被删除,数据卷中的数据也不会被自动删除,从而确保数据的持久性。
3.对数据卷的修改会立马生效。
4.对数据卷的更新,不会影响镜像。
# 创建一个数据卷
docker volume create my-vol
# 查看所有的数据卷
docker volume ls
# 查看数据卷的具体信息
docker inspect web
# 删除指定的数据卷
docker volume rm my-vol
2.挂载主机目录