本文接着上一篇文章,继续讲讲Docker的知识点。
解决从官方(即Docker Hub)拉取镜像不成功且速度慢的问题
对于这个问题,我们可以用DaoCloud提供的Docker加速器解决。解决步骤如下:
- 注册成为DaoCloud用户
- 登录进入DaoCould用户的控制台页面
- 选择”加速器”,按操作进行
- sudo service docker restart
更改Docker镜像安装目录
在Linux系统下,默认的docker镜像安装路径是/var/lib/docker
,但由于var目录一般容量较低,所以我们经常要更改镜像安装的路径,在stackoverflow的这个问答下,也有很多人给出了自己的解决方案,本人的实验环境是CentOS,亲测的解决方案是Sudeepta提供的,具体如下:
-
编辑文件
/lib/systemd/system/docker.service
,添加信息大概如下:ExecStart=/usr/bin/dockerd -g /path/to/docker/
-
执行以下命令载入设置:
systemctl daemon-reload systemctl restart docker
-
执行以下命令查看docker镜像安装目录
docker info | grep "loop file\|Dir"
构建镜像
构建镜像有两种方法:
-
使用
docker commit
命令 -
使用
docker build
命令和Dockerfile文件
Dockerfile更抢到、灵活,推荐使用。
一般来说不是真的“创建”新镜像,而是基于一个已有的基础镜像,比如Ubuntu、Fedora等,构建新的镜像而已。
用commit构建镜像
-
去Docker Hub上创建帐号
-
docker login进行登录。如果登录不成功的话,十有八九是GFW的问题,可以借鉴https://github.com/docker/docker/issues/3203的解决方法
-
接下来可以做一些修改,然后就可以commit了
sudo docker commit 614122c0aabb aoct/test
-
查看新创建的镜像:
sudo docker images aoct/test
-
也可以像git一样,在提交镜像时指定更多信息来描述所做的修改:
sudo docker commit -m='A new image' --author='Aomine' 614122c0aabb aoct/test
-
查看新创建的镜像的详细信息:
sudo docker inspect aoct/test
-
使用docker run命令从刚创建的新镜像运行一个容器:
sudo docker run -t -i aoct/test /bin/bash
-
需要的话使用
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