Docker

* docker简介
* docker架构
* docker安装
* docker使用

* docker容器使用
* docker镜像使用
* docker容器连接
* docker实例

* docker安装Nginx
* docker安装PHP
* docker安装MYSQL
* docker安装Tomcat
* docker安装Python
* docker安装redis
* docker安装MongoDB
* docker安装Apache
* docker使用参考

* docker命令大全
* docker资源汇总
一 、 Docker简介

* Docker 是一个开源的应用容器引擎 , 基于GO语言并遵从Apache2.0 协议开源 。
Docker可以让开发者打包他们的应用的以及依赖包到一个轻量级 、 可移植性高的容器中 。 然后发布到任何流行的Linux 机器上 , 可以实现虚拟化 。
* 容器完全使用沙箱机制 , 相互之间没有任何接口(类似Iphone的app) , 更重要的是容器性能开销极低 。
* 学习前提:

* 学习Docketr 之前 , 你需要一定的Linux 基础
* Docker 的应用场景

* Web应用自动化打包和发布
* 自动化测试 、 持续集成 、 发布
* 在服务型环境中部署和调整数据库或其他的后台应用
* 从头编译后扩展现有的OpenShit 或Cloud Foundry 平台搭建自己的PaaS 环境 。
* Docker 的优点:

* 简化程序:

* Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux
机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是
Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
* 避免选择恐惧症:

* 如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以
Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
* 节省开支:

* 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker
与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
二 、 Docker 架构

* Docker使用 客户端、服务端(C/S)的架构模式 , 使用远程API来管理和创建Docket 容器
* Docker 容器通过Docker镜像来创建
* 容器和镜像的关系类似于java中对象和类的关系 。
* Docker中的概念:
名词 描述
Docker 镜像 Docker镜像是用于创建Docker容器的模板
Docker 容器 容器是独立运行的一个或一组应用 。
Docker 客户端 Docker客户端通过命令行或者其他工具使用Docker API 与 Docker的守护进程进行通信
Docker主机 一个物理或者虚拟的机器用于执行Docker守护进程和容器
Docker仓库 Docker仓库用来保存镜像 , 可以理解为代码控制中的代码仓库
Docker Machine Docker Machine 是一个简化的Docker安装的命令行工具 ,
通过一个简单的命令行即可在相应的平台上安装Docker
三 、 Docker 安装

* WIN10专业版以下 Docker安装:
* Ubuntu Docker 安装
* CentOS Docker 安装:

* yum install -y docker-io
* sudo service docker start
* 测试docker服务
* MacOs Docker 安装:
四 、 添加镜像

* 鉴于国内网络的原因 , 在拉去镜像的时候会非常缓慢 , 我们可以访问国内的镜像的仓库来拉去镜像 。 , 这里我们使用网易的镜像仓库:
http://hub-mirror.c.163.com <http://hub-mirror.c.163.com>。
*
在 /etc/docker/daemon.json文件中添加:
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
五 、 docker 使用

* Docker hello world

* docker 允许你在容器内运行应用程序 , 使用docker run 命令来在容器内运行一个应用程序 并输出hello world。
* 参数解析:

* docker : docker 的二进制执行文件
* run : 与docker 组合 来运行容器内的镜像
* /bin/echo : 在镜像内运行的命令
* 以上命令的完整解释: 在docker中运行 Ubuntu:15.10 镜像 , 并在镜像内执行 /bin/echo “hello world”
* 运行交互式容器:

* 我们可以通过-i -t 实现docker对话能力:


2. 可以使用 exit 或Ctrl + D退出会话模式
3. 启动镜像(后台模式)
1. docker run -d ubuntu:15.10 /bin/sh -c “while true ; do echo hello world ;
sleep 1 ; done;”
2. 使用ps 查看docker后台进程
3. 在后台启动镜像成功之后 , 返回一串字母+ 数字 , 这是启动的镜像的进程ID
1. 解析:
1. CONTAINER ID : 容器ID
2. NAMES : 自动分配的容器名称
3. 查看进程日志
4. 停止容器
1. docker stop 镜像进程ID| 容器自动为镜像进程分配的Name
2. docker 客户端
1. 输入docker 来查看docker客户端的所有命令:
2. 使用 docker common –help 查看某一命令具体的使用方法
3. 运行一个web 应用:
1. docker pull training/webapp # 拉取training/webapp镜像
2. docker run -d -P training/webapp python app.py
1. 说明: 运行一个 Python Flask 镜像来运行一个web应用。
2. 参数说明:
1. -d : 镜像在后台运行
2. -P : 将容器内部使用的端口映射到我们使用的主机上
3. 查看正在运行的web镜像进程:
1. 可以看到docker 中的Python Flask 框架使用了5000端口 , 并且将5000 端口欧映射到了主句32768端口上 ,
可以使用浏览器访问该端口
2. 我们可以使用-p 参数来指定端口
3. 查看网络端口的快捷方式:
1. 除了在docker ps 中可以看到进程对应的端口之外 , 还可以 通过 docker port ID|名字 查看镜像占用的端口以及主机端口的映射情况
2. 查看日志:
1. docker logs -f ID|名字
1. 参数说明:
1. -f : 让docker像 tail -f一样来输出容器内部的标准输出
2. 查看 镜像内部进程
1. docker top ID|名字
2. 检查运行的镜像信息
1. docker inspect ID|名字 他会返回一个json 格式的数据 , 记录着该镜像的配置和状态信息
2. 容器内镜像的停止 、 重启 、 移除
1. docker stop ID|名字 //停止
2. docker start ID|名字 // 重启
3. docker rm ID|名字 // 移除容器内的应用

六 、 docker 镜像的使用

* 当运行容器中的应用时 , 需要提前获取该应用的镜像 , 如果本地没有这个镜像, 则会自动的从docker 中央仓库拉取镜像
* 列出本地镜像列表

* 选项说明

* REPOSITORY:表示镜像的仓库源
* TAG:镜像的标签
* IMAGE ID:镜像ID
* CREATED:镜像创建时间
* SIZE:镜像大小
* 注意: 同一个镜像可以有多个不同的TAG , 代表镜像的不同版本 , 如果有不同版本的镜像 需要在使用时使用 REPOSITORY:TAG
来指定运行的镜像
* 当运行一个本地不存在的镜像时, docker 会自动拉取资源, 后运行镜像 。 也可以通过docker pull 提前获取一个镜像
* 查找镜像

* 我们可以从docker-hub网站搜索镜像 , docker-hub 网址为 https://hub.docker.com/
<https://hub.docker.com/>
* 我们也可以通过docker search 命令来搜索镜像 。
* 创建镜像:

* 当我们从docker镜像仓库中下载的镜像不能满足我们的需求时, 我们可以通过以下两种方式 对镜像进行更改 。

* 从已经创建的镜像中更新镜像 , 并且提交这个镜像 。
* 使用Dokcerfile 指令来创建一个新的镜像
*
更新镜像

* 在运行的应用内执行 apt-get update
*
此时我们对应用进行了更新操作 , 我们可以通过docker commit 提交对应用的更新
runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161
runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
* 参数说明:

* -m : 提交的信息
* -a : 指定镜像作者
* e218edb10161 : 镜像ID
* runoob/ubuntu:v2: 指定要创建的镜像名
*
构建镜像:

*
可以使用docker bulid , 从零开始构建一个新的镜像 , 为此我们需要创建一个Dockerfile 文件 , 其中包含一组指令来告诉Docker
如何构建我们的镜像 。
runoob@runoob:~$ cat Dockerfile FROM centos:6.7 MAINTAINER Fisher
"[email protected]" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\""
>/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。 第一条FROM,指定使用哪个镜像源 RUN 指令告诉docker
在镜像内执行命令,安装了什么。。。 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
runoob@runoob:~$ docker build -t runoob/centos:6.7 . Sending build context to
Docker daemon 17.92 kB Step 1 : FROM centos:6.7 ---> d95b5ca17cc3 Step 2 :
MAINTAINER Fisher "[email protected]" ---> Using cache ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd ---> Using cache --->
0397ce2fbd0a Step 4 : RUN useradd runoob 参数说明: -t :指定要创建的目标镜像名 . :Dockerfile
文件所在目录,可以指定Dockerfile 的绝对路径 使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec
......
七、 Docker 实例

* docker安装mysql

* docker pull mysql
* 参数说明:

* -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
* -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的
/etc/mysql/my.cnf。
* -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。
* -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。
* -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
八 、 docker命令大全

* 容器生命周期管理

* run
* start /stop /restart
* kill
* rm
* pause /unpause
* create
* exec
* 容器操作

* ps
* inspect
* top
* attach
* events
* logs
* wait
* wait
* export
* port
* 容器rootfs命令

* commit
* cp
* diff
* 镜像仓库

* login
* pull
* search
* push
* 本地镜像管理

* images
* rmi
* tag
* build
* history
* save
* import
* info|version

* info
* version
九、 docker 资源
docker官网:http://www.docker.com Docker
windows入门:https://docs.docker.com/windows/ Docker Linux
入门:https://docs.docker.com/linux/ Docker mac 入门:https://docs.docker.com/mac/
Docker 用户指引:https://docs.docker.com/engine/userguide/ Docker
官方博客:http://blog.docker.com/ Docker Hub: https://hub.docker.com/ Docker开源:
https://www.docker.com/open-source Docker中文资源
Docker中文网站:https://www.docker-cn.com/
Docker安装手册:https://docs.docker-cn.com/engine/installation/ Docker 国内镜像
网易加速器:http://hub-mirror.c.163.com 官方中国加速器:https://registry.docker-cn.com
ustc的镜像:https://docker.mirrors.ustc.edu.cn
daocloud:https://www.daocloud.io/mirror#accelerator-doc(注册后使用)
遇到的问题及解决

*
无法开启docker服务:

*
解决:

* 进入/etc/docker目录 , 没有则创建
*
创建文件daemon.json 并写入内容
{"storage-driver": "devicemapper", "registry-mirrors":
["http://hub-mirror.c.163.com"]}

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信