介绍
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 // 停止容器
容器停止以后,日志也不再进行输出