Docker 学习笔记(一)

安装Docker

Mac 安装地址
关于在Ubuntu、CentOS和Debian系统安装Docker,Docker —— 从入门到实践书里有安装教程
其他系统安装Docker,参考官网

Boot2Docker

Boot2Docker 是一个包含了 VirtualBox 虚拟软件、Docker 程序和Boot2Docker Management Tool的一个集合软件。Boot2Docker Management Tool是一个运行在Mac系统上的轻量级Linux虚拟机。
这个轻量级虚拟机完全运行在内存中,启动很快,体积很小。
通过Boot2Docker安装的Docker相当于运行在一个 VirtualBox 虚拟机中,而客户端运行在Mac OS 上。
(Mac直接安装Docker,不通过Boot2Docker安装感觉起来没什么区别啊?)

Docker 三大组件

仓库
镜像
容器

仓库

Docker 官方维护了一个公共仓库Docker Hub

登录

本地命令:docker login
会有提示输入用户名和密码,一次登录后,会记住登录信息。本地用户目录的 .dockercfg 中将保存用户的认证信息。

搜索

命令为docker search 命令来查找官方仓库中的镜像,并利用docker pull 命令来将它下载到本地。

1
$ docker search centos -s 3

-s N(仅显示评价为 N 星以上的镜像)
下载命令

1
$ sudo docker pull centos

私有仓库配置

参考书籍Docker —— 从入门到实践

Docker 镜像

Docker 镜像分层

有3层,分别为:
基础镜像
中间件镜像
应用镜像

获取镜像

1
docker pull 镜像版本

将从 Docker Hub 仓库下载一个符合要求的镜像
完整的命令为:

1
$ sudo docker pull registry.hub.docker.com/ubuntu:12.04

即从注册服务器registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。

镜像操作

下载镜像完成后,可以使用该镜像了,摘自书中的例子:创建一个容器,让其中运行 bash 应用。

1
$ sudo docker run -t -i ubuntu:12.04 /bin/bash

显示本地已有的镜像

命令:docker images

修改镜像:

1.docker commit 来扩展一个镜像
镜像启动容器:

1
$ sudo docker run -t -i ubuntu:12.04 /bin/bash

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开

在容器中添加json package:

1
root@0b2616b0e5a8:/# gem install json

退出: exit
提交更新后的副本:

1
sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2

ouruser/sinatra:v2为目标镜像的仓库名和 tag 信息,如v2

2.docker build 来创建一个新的镜像
新建一个文件Dockerfile,里面的每一条指令都创建镜像的一层。

Dockerfile 基本的语法是:
使用 # 来注释
FROM 指令告诉 Docker 使用哪个镜像作为基础
接着是维护者的信息
RUN 开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get来安装了一些软件

编写完成 Dockerfile 后可以使用 docker build 来生成镜像。例如:

1
$ sudo docker build -t ouruser/sinatra:v2 .

其中 -t 标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。

改变镜像标签内容

1
$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel #5db...是镜像ID 后面的是修改后的标签

本地导入镜像:

1
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04

镜像上传到远程仓库:

Docker Hub 上完成注册后,可以推送自己的镜像到仓库中

1
$ sudo docker push ouruser/sinatra

保存镜像到本地文件:

1
docker save -o ubuntu_14.04.tar ubuntu:14.04

从导出的本地文件中再加载到本地镜像库:

1
2
3
$ sudo docker load --input ubuntu_14.04.tar
$ sudo docker load < ubuntu_14.04.tar

移除镜像

1
docker rmi training/sinatra

在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。

清理所有未打过标签的本地镜像

1
2
$ sudo docker rmi $(docker images -q -f "dangling=true")
sudo docker rmi $(docker images --quiet --filter "dangling=true")

Docker 容器

容器是独立运行的一个或一组应用,以及它们的运行态环境。

启动容器

有两种方式:
1.基于镜像新建一个容器并启动

1
$ sudo docker run -t -i ubuntu:12.04 /bin/bash

使用docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

2.将在终止状态(stopped)的容器重新启动
docker start命令,直接将一个已经终止的容器启动运行。可以利用 ps 或 top 来查看当前的进程信息。

查看容器信息

命令:docker ps
可以查看所有的容器及进程

容器在后台运行

普通的docker run命令会在当前宿主机输出结果。
加上-d,此时容器会在后台运行并不会把输出的结果打印到宿主机上面,而是返回一个ID。

1
sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

查看输出结果可以用docker logs

1
$ sudo docker logs [container ID or NAMES]

里面可以是刚刚返回的ID也可以是NAME

终止容器

使用命令docker stop ID来终止

当Docker容器中指定的应用终结时,容器也自动终止。所以之前通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。
查看终止状态的容器可以用 docker ps -a命令。

重启已经终止的容器

处于终止状态的容器,可以通过 docker start 命令来重新启动。
docker restart 命令会将一个运行态的容器终止,然后再重新启动它。

进入容器

当容器进入后台时,需要进入容器的操作
使用Attach命令:

1
2
3
docker run -idt ubuntu #后台运行
docker ps #查看进程
docker attach 容器名或者ID

使用nsenter 命令
nsenter工具在 util-linux 包2.23版本后包含,设备上没有的,需要手动安装。
详细步骤参考书籍Docker —— 从入门到实践

导出容器

导出本地某个容器,使用 docker export 命令:

1
$ sudo docker export 容器ID > ubuntu.tar(文件名)

导入容器

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

1
2
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0(镜像名和标签)
$ docker images #查看结果

或者通过指定 URL 或者某个目录来导入,例如:

1
$sudo docker import http://example.com/exampleimage.tgz example/imagerepo

用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,
也可以使用 docker import 来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除容器

使用 docker rm 来删除一个处于终止状态的容器

1
$sudo docker rm trusting_newton

如果要删除一个运行中的容器,可以添加 -f 参数。
清理所有处于终止状态的容器,使用以下命令:

1
docker rm $(docker ps -a -q)

书籍:
Docker —— 从入门到实践此处有电子书的下载途径

本站总访问量 次, 访客数 人次, 本文总阅读量
靡不有初,<br><br>鲜克有终。<br><br>不断努力,一步一步往前走,做最好的自己