Docker 再入门

2016/10/05 Tool

本文接着上一篇文章,继续讲讲Docker的知识点。

解决从官方(即Docker Hub)拉取镜像不成功且速度慢的问题

对于这个问题,我们可以用DaoCloud提供的Docker加速器解决。解决步骤如下:

  1. 注册成为DaoCloud用户
  2. 登录进入DaoCould用户的控制台页面
  3. 选择”加速器”,按操作进行
  4. sudo service docker restart

更改Docker镜像安装目录

在Linux系统下,默认的docker镜像安装路径是/var/lib/docker,但由于var目录一般容量较低,所以我们经常要更改镜像安装的路径,在stackoverflow的这个问答下,也有很多人给出了自己的解决方案,本人的实验环境是CentOS,亲测的解决方案是Sudeepta提供的,具体如下:

  1. 编辑文件/lib/systemd/system/docker.service,添加信息大概如下:

     ExecStart=/usr/bin/dockerd -g /path/to/docker/
    
  2. 执行以下命令载入设置:

     systemctl daemon-reload
     systemctl restart docker
    
  3. 执行以下命令查看docker镜像安装目录

     docker info | grep "loop file\|Dir"
    

构建镜像

构建镜像有两种方法:

  • 使用docker commit命令

  • 使用docker build命令和Dockerfile文件

Dockerfile更抢到、灵活,推荐使用。

一般来说不是真的“创建”新镜像,而是基于一个已有的基础镜像,比如Ubuntu、Fedora等,构建新的镜像而已。

用commit构建镜像

  1. Docker Hub上创建帐号

  2. docker login进行登录。如果登录不成功的话,十有八九是GFW的问题,可以借鉴https://github.com/docker/docker/issues/3203的解决方法

  3. 接下来可以做一些修改,然后就可以commit了

    sudo docker commit 614122c0aabb aoct/test
    
  4. 查看新创建的镜像:

    sudo docker images aoct/test
    
  5. 也可以像git一样,在提交镜像时指定更多信息来描述所做的修改:

    sudo docker commit -m='A new image' --author='Aomine' 614122c0aabb aoct/test
    
  6. 查看新创建的镜像的详细信息:

    sudo docker inspect aoct/test
    
  7. 使用docker run命令从刚创建的新镜像运行一个容器:

    sudo docker run -t -i aoct/test /bin/bash
    
  8. 需要的话使用docker push进行提交

使用Dockerfile

使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。

Dockerfile使用Dockerfile 中每一条指令都创建镜像的一层,例如:

# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee [newbee@docker.com](mailto:newbee@docker.com)
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

Dockerfile 基本的语法是

  • 使用 # 来注释
  • FROM 指令告诉 Docker 使用哪个镜像作为基础
  • 接着是维护者的信息
  • RUN 开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
  • 编写完成 Dockerfile 后可以使用docker build来生成镜像。

私有仓库

有时候使用 Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。

# 获取官方 registry 镜像
sudo docker run -d -p 5000:5000 registry
# 列出镜像
sudo docker images
# 重新标记一个本地镜像为私有仓库的版本,这里将本地的ubuntu 12.04标记为localhost:5000/ubuntu:1204。
sudo docker tag ubuntu:12.04 localhost:5000/ubuntu:1204
# 将本地镜像推送到本地仓库中
docker push localhost:5000/ubuntu:1204
# 查看本地仓库中的镜像列表
curl http://localhost:5000/v2/ubuntu/tags/list

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,用于共享和重用。

# 添加一个数据卷
# 可以使用带有 -v 参数的 Docker run 命令给容器添加一个数据卷
sudo docker run -ti -v /data centos /bin/bash 
# 使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去
# 如加载主机的 /src/webapp 目录到容器的 /opt/webapp 目录
sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
# -v 标记也可以从主机挂载单个文件到容器中
sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

Search

    Table of Contents