docker安装与使用

介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

详细介绍:http://baike.baidu.com/item/Docker
官方网站:https://www.docker.com/
docker知识库:http://lib.csdn.net/base/docker
docker 源码:https://github.com/docker/docker

Ubuntu Docker 安装

前提条件

Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 Ubuntu 版本是否支持 Docker。

uname -r //查看你当前的内核版本

脚本安装 Docker

获取最新版本的 Docker 安装包

wget -qO- https://get.docker.com/ | sh

输入当前用户的密码后,系统会自动开始下载脚本并安装Docker及依赖包 安装完成后提示:

If you would like to use Docker as a non-root user, you should now consider
	adding your user to the "docker" group with something like:

	sudo usermod -aG docker runoob
   Remember that you will have to log out and back in for this to take effect!  

当要以非root用户可以直接运行docker时,需要执行sudo usermod -aG docker runoob命令,然后重新登陆,否则会有如下报错

$ docker run hello-world
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host? See 'docker run --help'

docker 使用

docker镜像搜索

docker镜像网站(建议扶墙访问) 网站提供大量的镜像,如果你不确定

docker search centos //搜索docker提供的centos镜像

返回形如下面的类似信息,这里列举部分信息做例子

NAME                 DESCRIPTION                                       STARS      OFFICTAL    AUTOMATED
centos               The official build of Centos.                     2301       [OK]
jdeathe/centos-ssh   CentOS-6 6.7 x86_64 / Centos-7 7.2.1511 x8...              25                     [OK]

NAME 下为镜像的名字,有些镜像有两个部分,如 jdeathe/centos-ssh 。斜线前面是创建者的名字,后面为镜像名字(名字中会简要描述,该镜像的功能)。 DESCRIPTION 镜像描述信息 STARS 喜欢的次数,数量越多说明镜像越受欢迎。 OFFICIAL 表示镜像是否为官方提供,官方提供的镜像一般没有前缀。

下载镜像

docker images //查看本地已有的镜像
docker pull centos //从仓库下载centos镜像

下载完成后再查看本地镜像,返回信息

REPOSITORY      TAG       IMAGE ID        CREATED        SIZE
centis          latest    96eecaf1019a    2 weeks ago    196.7 MB

在国内使用官方提供的镜像下载会有些慢,我们可以使用一些国内提供的镜像服务

使用阿里云镜像加速

阿里云开发者平台 首先,登录你的阿里云帐号 点击 “管理中心” -> “加速器” 你会获得你的专属加速器地址,而且阿里云提供了几种不通系统部署加速器的手册。

Ubuntu

安装/升级你的Docker客户端

推荐安装1.6.0以上版本的Docker客户端。

您可以通过阿里云的镜像仓库下载

或执行以下命令:

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

如何使用Docker加速器 针对Docker客户端版本大于1.10的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["您的专属加速器地址"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

针对Docker客户的版本小于等于1.10的用户

或者想配置启动参数,可以使用下面的命令将配置添加到docker daemon的启动参数中。 Ubuntu 12.04 14.04的用户

echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=您的专属加速器地址\"" | sudo tee -a /etc/default/docker

sudo service docker restart

Ubuntu 15.04 16.04的用户

sudo mkdir -p /etc/systemd/system/docker.service.d

sudo tee /etc/systemd/system/docker.service.d/mirror.conf <<-'EOF'

[Service]
ExecStart=/usr/bin/docker daemon -H fd:// --registry-mirror=您的专属加速器地址
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

CentOS

安装/升级你的Docker客户端

您可以通过阿里云的镜像仓库下载

或执行以下命令:

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

如何使用Docker加速器 针对Docker客户端版本大于1.10的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["您的专属加速器地址"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

针对Docker客户的版本小于等于1.10的用户

或者想配置启动参数,可以使用下面的命令将配置添加到docker daemon的启动参数中。

·系统要求 CentOS 7 以上,Docker 1.9 以上。 ```
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service ```
·Docker 1.12 以下版本使用 docker daemon 命令 ```
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=您的专属加速器地址|g" /etc/systemd/system/docker.service ```
·Docker 1.12 及以上版本使用 dockerd 命令 ```
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=您的专属加速器地址|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload

sudo service docker restart ``` #### Windows 安装/升级你的Docker客户端

对于Windows 10以下的用户 推荐使用 Docker Toolbox
    Toolbox的介绍和帮助:mirrors.aliyun.com/help/docker-toolbox
    Windows系统的安装文件目录:http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/
对于Windows 10以上的用户 推荐使用 Docker for Windows
    Windows系统的安装文件目录:http://mirrors.aliyun.com/docker-toolbox/windows/docker-for-windows/

如何使用Docker加速器

创建一台安装有Docker环境的Linux虚拟机,指定机器名称为default,同时配置Docker加速器地址。 ```
docker-machine create --engine-registry-mirror=您的专属加速器地址 -d virtualbox default ```
查看机器的环境配置,并配置到本地,并通过Docker客户端访问Docker服务。 ```
docker-machine env default
eval "$(docker-machine env default)"
docker info ``` 相关文档 [Docker 命令参考文档](https://docs.docker.com/engine/reference/commandline/cli/?spm=a2c1q.8351553.0.0.EvabyU) [Dockerfile 镜像构建参考文档](https://docs.docker.com/engine/reference/builder/?spm=a2c1q.8351553.0.0.EvabyU) #### Mac 安装/升级你的Docker客户端

对于10.10.3以下的用户 推荐使用 Docker Toolbox
    Toolbox的介绍和帮助:mirrors.aliyun.com/help/docker-toolbox
    Mac系统的安装文件目录:http://mirrors.aliyun.com/docker-toolbox/mac/docker-toolbox/
对于10.10.3以上的用户 推荐使用 Docker for Mac
    Mac系统的安装文件目录:http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/

如何使用Docker加速器

创建一台安装有Docker环境的Linux虚拟机,指定机器名称为default,同时配置Docker加速器地址。 ```
docker-machine create --engine-registry-mirror=您的专属加速器地址 -d virtualbox default ```
查看机器的环境配置,并配置到本地,并通过Docker客户端访问Docker服务。 ```
docker-machine env default
eval "$(docker-machine env default)"
docker info ``` 相关文档 [Docker 命令参考文档](https://docs.docker.com/engine/reference/commandline/cli/?spm=a2c1q.8351553.0.0.EvabyU) [Dockerfile 镜像构建参考文档](https://docs.docker.com/engine/reference/builder/?spm=a2c1q.8351553.0.0.EvabyU)

按照手册配置完成之后,你在去 pull 一个镜像,就会发现下载速度变快了。

创建容器

$docker run centos /bin/echo 'hello' //使用docker run命令来在容器内运行一个应用程序。输出Hello world
Hello World

docker: Docker 的二进制执行文件。 run:与前面的 docker 组合来运行一个容器。 centos指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库下载公共镜像。 /bin/echo “Hello world”: 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 centos 镜像创建一个新容器,在容器里执行 bin/echo “Hello world”,然后输出结果。

$docker ps //查看正在运行的容器
CONTAINER ID     IMAGE     COMMAND              CREATED           STATUS                            PORTS         NAMES

因为刚才运行的容器运行完成后会自动停止,所以不会显示相关信息

$docker ps --all //查看所有的容器
CONTAINER ID     IMAGE     COMMAND              CREATED           STATUS                           PORTS        NAMES
324acc052fc0     centos    "/bin/echo hello"    13 seconds age    Exited (0) 13 seconds ago                     sleepy_bell

CONTAINER ID 容器的ID,我们可以使用它去表示这个容器 IMAGE 容器使用的镜像 COMMAND 在容器中执行的命令 CREATED 创建的时间 STATUS 表示容器状态 PORTS 表示端口 NAMES 容器的名字,docker会自动的给容器分配一个名字,我们也可以手工指定一个名字,可以使用名字表示这个容器。

管理容器

基于一个镜像可以创建多个容器,我们在容器里面执行一下 ls 命令

$docker run centos ls //输出内容为容器里的目录和列表
anaconda-post.log
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

查看容器

$docker ps -a //docker ps -all 简写
CONTAINER ID     IMAGE     COMMAND              CREATED           STATUS                     PORTS        NAMES
4f57703b1081     centos    "ls"                 10 seconds ago Exited (0) 10 seconds ago                  goofy_babbage
324acc052fc0     centos    "/bin/echo hello"    3 hours ago    Exited (0) 3 hours ago                     sleepy_bell

使用容器的ID或者名字可以对该容器进行操作

docker rm 324acc052fc0  //同一个容器的两种删除方法
docker rm sleepy_bell

创建容器的时候可以手工给容器指定一个名字,这样用户使用的时候更方便一些

docker run --name greeting centos /bin/echo 'hello'

名字为 greeting 的 Docker 以 centos 镜像创建一个新容器,在容器里执行 bin/echo “Hello”,然后输出结果。

docker logs greeting //查看容器日志,后面可跟容器id或者名字
docker stop greeting //停止容器
docker restart greeting //重启容器
doucker start greeting //运行容器

带交互的容器

现在我们来创建一个带交互的容器,也就是可以登录到容器里面进行操作

$docker run --interactive --tty centos /bin/bash
[root@ /]# pwd
/
[root@ /]# ls
araconda-post.log  dev  home  lib64       media  opt  root  sbin  sys  usr
bin                etc  lib   lost+found  mnt    proc run   srv   tmp  var
[root@ /]# exit
exit

–interactive 表示使用一个带交互的容器,可以简写为 -i –tty 为容器附加一个终端可以,简写为 -t /bin/bash 终端的位置

在后台运行的容器

$docker run --detach centos ping baidu.com//创建一个在后台运行ping baidu.com 的容器

反馈内容并没有输出结构,只是显示了一个ID号

$docker ps  //查看当前正在运行的容器
CONTAINER ID     IMAGE     COMMAND              CREATED           STATUS                            PORTS         NAMES
59710b7cd935     centos    "ping baidu.com"     6 seconds ago     Up 5 seconds                                    determined_lichterman
$docker logs --follow 59710b7cd935

查看该容器的日志,你会发现容器在后台不停发出ping命令

$docker stop 59710b7cd935 // 停止容器

容器停止以后,日志也不再进行输出