简介:Docker 是一个开源的应用容器引擎,基于 Go 语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

Docker 三个核心概念

镜像(Image)

是一个包含有文件系统的面向 Docker 引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个 Ubuntu 镜像就是一个包含 Ubuntu 操作系统环境的模板。Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

容器(Container)

类似于一个轻量级的沙盒,可以将其看作一个极简的 Linux 系统环境(包括 root 权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker 引擎利用容器来运行、隔离各个应用。

容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。

注意:镜像本身是只读的,容器从镜像启动时,Docker 在镜像的上层创建一个可写层,镜像本身不变。

仓库(Repository)

镜像仓库,是 Docker 用来集中存放镜像文件的地方。

Docker常用命令

Docker 的常用命令一般分为:镜像管理、容器管理。

查看 Docker 版本

docker version

列出常用命令

docker --help

镜像管理命令

下面使用 busybox 软件作为示例,busybox 软件是一个集成了非常多最常用的 Linux 命令和工具的软件集合。

查看所有镜像

docker images
docker images ls
  • REPOSITORY:镜像来自哪个仓库

  • TAG:镜像的标签信息,版本之类的信息

  • IMAGE ID:镜像创建时的id

  • CREATED:镜像创建的时间

  • SIZE:镜像文件大小

下载软件镜像

docker pull busybox:latest

备注:latest 表示使用 busybox 软件的最新版本,所以软件默认下载都是 latest 版本。

导出镜像

docker save busybox > busybox.tar

备注:把 busybox 镜像导出为 busybox.tar 文件,可以把 busybox.tar 文件复制到别的操作系统上使用,免除下载时网络慢的问题。

删除镜像

docker rmi busybox:latest

备注:镜像一般都会根据版本打包,如果有下载一个软件的多个版本就需要指定具体版本信息。如 busybox:1.26 就会删除 busybox 软件的 1.26 版本的镜像,不会删除latest 版本的镜像。

导入镜像

docker load < busybox.tar

备注:使用导出命令导出的镜像,可以通过此命令导入到没有下载此软件的操作系统,方便网络条件差的情况使用。

更改镜像名

docker tag busybox:latest busybox:test

备注:busybox:latest原镜像名,busybox:test要改成的镜像名

容器管理命令

运行容器

docker run -d --name=busybox busybox:latest ping 114.114.114.114
docker container run -p 8000:3000 -it demo:0.0.1 /bin/bash
  • run:run参数代表启动容器
  • -d:以后台daemon的方式运行
  • --name:指定一个容器的名字,此后操作都需要使用这个名字来定位容器。
  • busybox:latest:容器所使用的镜像名字
  • ping 114.114.114.114:启动容器执行的命令

查看运行的容器

docker ps
docker container ls

查看所有容器

docker ps -a
  • CONTAINER ID:容器启动的id
  • IMAGE:使用哪个镜像启动的容器
  • COMMAND:启动容器的命令
  • CREATED:创建容器的时间
  • STATUS:容器启动时间
  • PORTS:容器映射到宿主机的端口
  • NAMES:容器启动的名字

启动容器

docker start busybox

重新启动容器

docker restart busybox

停止容器

docker stop busybox

杀死容器

docker kill busybox

清理所有终止状态的容器

docker container prune

列出容器映射的端口

docker port busybox

查看容器内部运行的进程

docker top busybox

查看容器或镜像底层信息

docker inspect busybox

删除运行中的容器

docker rm -f busybox

执行容器内命令

docker exec -it busybox ls
docker exec -it busybox /bin/bash

备注:-it 交互终端

复制容器内文件

docker cp busybox:/etc/hosts hosts

查看容器日志

docker logs -f busybox
docker logs [OPTIONS] busybox

OPTIONS说明:

  • -f:跟踪日志输出
  • --since:显示某个开始时间的所有日志
  • -t:显示时间戳
  • --tail:仅列出最新N条容器日志

docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 compose命令大多依赖于yml文件,默认使用当前目录下的“docker-compose.yml“,也可以通过-f指定。

构建建启动nignx容器

docker-compose up -d nginx          

进入到nginx容器中

docker-compose exec nginx bash     

删除所有nginx容器,镜像

docker-compose down         

重新启动nginx容器

docker-compose restart nginx

在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

docker-compose run --no-deps --rm php-fpm php -v 

构建镜像

docker-compose build nginx  

不带缓存的构建

docker-compose build --no-cache nginx 

参考链接

你必须知道的Dockerfile

Docker-compose常用命令