Docker学习笔记

刚开始学习Docker,在这里做个记录,主要参考Docker从入门到实践 Docker的三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Apache 或用户需要的其它应用程序。镜像可以用来创建 Docker 容器。 Docker 利用容器来运行应用。 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 Docker 仓库用来存储镜像。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式,是集中存放镜像文件的场所,用户也可以在本地网络内创建一个私有仓库。


在Ubuntu14.04上安装Docker 通过apt软件源安装,非最新版本

# apt-get update
# apt-get install -y docker.io
# ln -sf /usr/bin/docker.io /usr/local/bin/docker
# sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
通过Docker源安装最新版本
# apt-get install apt-transport-https
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
# bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
# apt-get update
# apt-get install lxc-docker

14.04之前的ubuntu版本需要先更新内核并重新启动系统

# apt-get update
# apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
# reboot

安装完成之后启动Docker服务

# service docker.io start

用docker pull命令获取镜像

# docker pull ubuntu:12.04
Pulling repository ubuntu
5c97af892079: Pulling dependent layers 
5c97af892079: Download complete 
4739f7844b29: Download complete 
fe4dff09956d: Download complete 
9e450f1461d8: Download complete

上面的命令会从默认注册服务器registry.hub.docker.com上下载Ubuntu12.04的镜像,也可指定其他注册服务器

# docker pull dl.dockerpool.com:5000/ubuntu:12.04

列出获取到的所有镜像

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              12.04               5c97af892079        26 hours ago        133.4 MB

字段说明

  • 来自于哪个仓库,比如 ubuntu
  • 镜像的标记,比如 14.04
  • 它的 ID 号(唯一)
  • 创建时间
  • 镜像大小

使用docker commit命令修改已有的镜像 先使用下载的镜像启动容器

# docker run -t -i ubuntu:12.04 /bin/bash
安装一个ping命令
root@194710f30c1e:/bin# apt-get install ping
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'iputils-ping' instead of 'ping'
The following NEW packages will be installed:
  iputils-ping
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
Fetched 56.1 kB in 4s (12.7 kB/s)       
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package iputils-ping.
(Reading database ... 7560 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...
root@194710f30c1e:/bin# ping baidu.com
PING baidu.com (220.181.57.217) 56(84) bytes of data.
64 bytes from 220.181.57.217: icmp_req=1 ttl=127 time=6.34 ms
64 bytes from 220.181.57.217: icmp_req=2 ttl=127 time=6.18 ms
exit退出,然后使用docker commit命令提交更新后的镜像副本
root@194710f30c1e:/bin# exit
# docker commit -m "Added ping" -a "Docker root" 194710f30c1e myrep/test:v1
19c470e9eb6141c4e2a97ae88028ede73f34157b3c5841c99f43dc3c418e50ff

其中,-m 来指定提交的说明信息;-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。 查看镜像并启动新的镜像

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myrep/test          v1                  19c470e9eb61        11 seconds ago      134 MB
ubuntu              12.04               5c97af892079        27 hours ago        133.4 MB
# docker run -t -i myrep/test:v1 /bin/bash
root@ebf51cd07cac:/# ping baidu.com
PING baidu.com (220.181.57.217) 56(84) bytes of data.
64 bytes from 220.181.57.217: icmp_req=1 ttl=127 time=4.20 ms
64 bytes from 220.181.57.217: icmp_req=2 ttl=127 time=9.88 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 4.208/7.045/9.883/2.838 ms

可以看到在新的镜像中已经可以试用ping命令了


用 Dockerfile 来创建镜像 创建dockerfile文件

# mkdir docker_files
# cd docker_files/
# more Dockerfile
# This is a comment
FROM myrep/test:v1
MAINTAINER Docker cesc <theo14w@163.com>
RUN apt-get -qq update
RUN apt-get -qqy install sysv-rc-conf

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注