Docker概述及常用命令 --- Docker核心技术学习笔记

Before Docker

为什么Docker技术会产生并成为热点?先看看Docker之前出现的若干工具。

虚拟机

步骤多 启动慢

Linux容器

Linux 容器技术能够让您对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。

相比上面的两种工具,Docker更加轻便、实用。

Docker架构

Docker概述及常用命令 --- Docker核心技术学习笔记_第1张图片
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。
容器和镜像的区别:容器最上面一层可读写,镜像只读

Docker的运行原理

Docker概述及常用命令 --- Docker核心技术学习笔记_第2张图片
如图,Docker容器通过后台守护进程和客户端通信。

为什么Docker比VM快?

启动容器

交互模式

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

–name: 命名
-t: 在容器内指定一个伪终端或终端。
-i: 交互模式运行。
it选项经常一起使用。

-P:将容器内部使用的网络端口映射到我们使用的主机上。
-p 设置端口

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

后台模式

使用以下命令创建一个以进程方式运行的容器
加了 -d 参数默认不会进入容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

Docker概述及常用命令 --- Docker核心技术学习笔记_第3张图片
使用以下方式可以避免这个问题:

$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

常用命令

1. 帮助命令

docker version
docker info
docker --help

2.镜像命令

查看本地镜像

$ docker images

tag 是镜像版本,镜像名字是 image_name:tag ,默认tag是latest

Docker概述及常用命令 --- Docker核心技术学习笔记_第4张图片

查找镜像

$ docker search image_name[:tag]

在docker hub上查询对应镜像

–filter=star=?:限制star数量的下限

拉取镜像

$ docker pull image_name[:tag]

删除镜像

$ docker rmi image_name[:tag]
$ docker rmi -f $(docker images .....)

3. 容器命令

新建并启动容器

$ docker run

启动/重启/停止容器

$ docker start/stop/restart 

强制停止容器

$ docker kill

查找容器

$ docker ps

查看正在运行的容器。

Docker概述及常用命令 --- Docker核心技术学习笔记_第5张图片

后台模式进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach:直接进入容器启动命令的终端,不启动新进程
  • docker exec (-it):直接在对应容器运行命令,没有进入容器,启动了一个新进程

退出容器

  • exit:容器停止退出
  • ctrl+P+Q:容器不停止退出

导出和导入容器

如果要导出本地某个容器,可以使用 docker export 命令。

$ docker export 1e560fca3906 > ubuntu.tar

导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
这样将导出容器快照到本地文件。

可以使用 docker import 从容器快照文件中再导入为镜像。

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 ;将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
$ docker import http://example.com/exampleimage.tgz example/imagerepo ;根据URL导入

删除已经停止的容器

删除容器使用 docker rm 命令:

$ docker rm -f 1e560fca3906
$ docker rm $(docker ps....)

下面的命令可以清理掉所有处于终止状态的容器。

$ docker container prune

4. 容器高级命令

后台模式运行容器

$ docker run -d 

查看容器日志

$ docker logs -f -t --tail container_id

查看容器内进程

$ docker top container_id

查看容器内细节

$ docker inspect container_id

从容器copy数据到主机

$ docker cp container_id:conatiner_path/file host_path

从容器创建镜像

$ docker commit

数据卷(Data Volume)

Docker数据卷用来将容器中的数据持久化,保存容器的数据。

  • 数据卷可以在容器间共享数据
  • 卷中更改可立即生效
  • 数据卷的更新不包含在镜像的更新中
  • 当没有容器使用它时,数据卷的生命周期结束
  • 容器停止退出后,主机修改的数据依然可以同步

在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。多次重复使用-v标记可以创建多个数据卷。

$ docker run -it -v /host_path:/container_path container_id

可用docker inspect 查看数据卷(volumes)的设置。

可以设置在容器内的数据卷只读,只可在宿主机修改。

$ docker run -it -v /host_path:/container_path:ro container_id

容器数据卷

容器之间可以互相挂载,实现数据的传递依赖。
容器需要命名。
挂载是双向的,父容器和子容器之间的数据可以双向共享。

$ docker run -it --volume-from father_container_name container_id

父容器的消失不会导致数据卷丢失数据,直到没有容器使用它时,数据卷的生命周期才结束。

Dockerfile

什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
可以用docker build+DockerFile生成镜像。

在Dockerfile中添加数据卷

利用VOLUME关键字,可添加多个数据卷。用docker inspect可以查看run容器之后的宿主机对应路径。

你可能感兴趣的:(Docker,Docker)