Docker Part02:Docker基础用法(Docker镜像使用、操作容器、数据管理)

文章目录

  • Docker镜像使用
    • 列出镜像
    • 搜索镜像
    • 拉取一个新的镜像
    • 删除镜像
    • 创建镜像
  • Docker操作容器
    • 查看容器
    • 运行创建容器
    • 维护式进入容器
    • 启动已经停止运行的容器
    • 停止容器
    • 删除容器
    • 查看容器信息
  • Docker数据管理
    • 数据卷
    • 创建一个数据卷
    • 删除数据卷
    • 挂载主机目录

Docker镜像使用

列出镜像

$ docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

TAG:镜像的标签,同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本
把所有的镜像的 ID 列出来

$ docker images  -q
5f515359c7f8
05a60462f8ba
fe9198c04d62
00285df0df87
329ed837d508
329ed837d508

搜索镜像

docker search 镜像名称

拉取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

$ docker pull ubuntu:13.10

删除镜像

$ docker image rmi [选项] <镜像1> [<镜像2> ...]

<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

$ docker rmi hello-world

可以使用 docker image ls -q 来配合使用 docker image rm,这样可以成批的删除希望删除的镜像。

$ docker rmi 'docker images -q'

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

1、从已经创建的容器中更新镜像,并且提交这个镜像

在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
$ docker commit -m="has update" -a="coonote" e218edb10161 coonote/ubuntu:v2

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • e218edb10161:容器 ID
  • coonote/ubuntu:v2: 指定要创建的目标镜像名

2、使用 Dockerfile 构建一个新的镜像

使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
这里放在后面详细讲。

Docker操作容器

查看容器

查看正在运行的容器

docker ps

查看所有容器

docker ps -a

运行创建容器

$ docker run httpd

如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:15.10 /bin/bash 
docker run -d -i --name=c1 ubuntu:15.10 /bin/bash 

参数说明:

  • i: 交互式操作。保持容器运行
  • t: 为容器分配一个伪输入终端,容器创建后自动进入容器,输入 exit 命令来退出这个容器。
  • -d:后台运行创建容器,需要使用docker exec进入容器,退出后容器不关闭
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 shell,因此用的是 /bin/bash。
  • –name: 指定容器的名字

维护式进入容器

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

推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

docker exec 参数
docker exec -it 243c32535da7 /bin/bash

启动已经停止运行的容器

docker start 容器名

停止容器

docker stop 容器名

删除容器

docker rm 容器名

查看容器信息

docker inspect 容器名

Docker数据管理

数据卷

数据卷的特点

数据卷是宿主机中的一个文件或目录,
当容器和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷

数据卷作用

容器数据持久化
外部机器和容器间接通信
容器之间数据交换

创建一个数据卷

与绑定挂载不同,可以在任何容器范围之外创建和管理卷。

$ docker volume create my-vol
$ docker volume 

DRIVER              VOLUME NAME
local               my-vol

在主机里使用以下命令可以查看指定 数据卷 的信息

$ docker volume inspect my-vol
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]

删除数据卷

Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

$ docker volume rm my-vol

清理无主的数据卷

$ docker volume prune

挂载主机目录

挂载主机目录有几种方式,其中volume 由容器创建和管理,创建在宿主机,所以删除容器不会丢失,官方推荐,更高效,Linux 文件系统,适合存储数据库数据。可挂到多个容器上
如果你用一个尚不存在的卷启动一个容器,Docker 会为你创建该卷。下面的示例将卷 my-vol2 挂载到容器中的 /app/。
下面的 -v 和 --mount 示例产生相同的结果。

–mount

docker run -d \
  --name devtest \
  --mount source=myvol2,target=/app \
  nginx:latest

-v

docker run -d \
  --name devtest \
  -v myvol2:/app \
  nginx:latest

注意:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷
    如:
docker run -d \
  --name devtest \
  -v :/data1:/root/data1 \
  -v :/data2:/root/data2 \
  nginx:latest

一般来说,–mount 更明确、更详细。最大的区别在于,-v 语法将所有选项合并在一个字段中,而 --mount 语法则将它们分开。下面是每种标记的语法比较。
如果需要指定卷驱动程序选项,必须使用 --mount。

  1. -v或–volume:

由三个字段组成,以冒号字符(:)分隔。这些字段的顺序必须正确,而且每个字段的含义并不是一目了然的。

  • 对于已命名加密卷,第一个字段是加密卷的名称,在指定主机上是唯一的。对于匿名加密卷,第一个字段可以省略。
  • 第二个字段是文件或目录挂载在容器中的路径。
  • 第三个字段是可选的,是一个以逗号分隔的选项列表,如 ro。下面将讨论这些选项。
  1. -mount:

由多个键值对组成,以逗号分隔,每个键值对由 = 元组组成。–mount语法比-v或–volume更冗长,但键值的顺序
并不重要,标志的值也更容易理解。

  • type,可以是绑定、卷或 tmpfs。本主题讨论的是卷,因此类型总是卷。
  • source。对于已命名的加密卷,这是加密卷的名称。对于匿名卷,则省略此字段。可指定为源或 src。
  • destination的值是文件或目录在容器中挂载的路径。可以指定为 destination、dst 或 target。
  • 如果存在readonly选项,绑定挂载会以只读方式挂载到容器中。可以指定为 readonly 或 ro。

你可能感兴趣的:(Docker,docker,容器,运维)