Docker是什么
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker组件(C/S)
Docker Client:Docker的客户端
Docker Server:Docker daemon的主要组成部分,接收用户通过Docker Client发送的请求,并按照相应的路由规则实现路由分发。
Docker镜像:Docker镜像运行之后变成容器。(docker run)
Docker Registry:Registry是Docker镜像的中央存储仓库(pull/push)
整个流程:获取镜像->根据镜像创建容器->在容器内创建各种服务[可以分多个容器创建]
Docker For Windows安装
系统要求:支持虚拟化且WIN10 10586版本以上且必须先安装hyper-v
hyper-v属系统自带,开启功能点电脑右下脚-》所有设置-》应用和功能-》程序和功能-》启用/关闭windows功能,开启后需重启
需要注意的是,Hyper-v和主流的虚拟机软件vmware、virtualbox会有冲突,所以如果要玩docker,最好放弃vmware和virtualbox
安装好Hyper-v后,前去http://www.docker.com/ 下载docker for windows安装包后进行安装
安装好后主设置界面如下:
镜像
下载镜像
可以使用docker pull命令来从仓库获取所需要的镜像
下面的例子将从Docker Hub仓库下载一个ubuntu16.04操作系统的镜像
docker pull ubuntu:16.04 [在国内由于网络问题这会很慢或根本下不下来]
此时最好换国内镜像或采用加速器,国内的daoclud.io提供专业的免费解决方案,如下图,更换加速器[http://f71fa5d4.m.daocloud.io],即可保证下载速度
然后重新下载镜像
docker pull daocloud.io/ubuntu:16.04
查看镜像
docker images
移除镜像
docker rmi容器ID[如镜像有被容器使用则需先用docker rm移除容器]
容器
与前台进行交互的容器
以进程方式运行在后台的容器
基于镜像运行容器
docker run -t -i daocloud.io/ubuntu /bin/bash
docker ps -a 列出所有容器
docker logs 显示容器的标准输出
docker stop 停止容器
使用Dockerfile创建镜像并运行容器
简单的说:以前docker run创建一个docker容器,有时候会附带不少的参数
比如:
docker run -d -p 22 -p 8080:8080 ruifengyun/ubunt-redis "redis-server redis.conf && /usr/sbin/sshd -D"
会发现很是麻烦,这个时候咱们可以创建编辑一个dockerfile文件,生成新的image,然后从这个新的镜像创建容器,容器里面相关联的启动项和端口,目录都是提前定义好的
cat Dockerfile
```
FROM daocloud.io/mysql
# Write Permission
RUN usermod -u 1000 mysql && chown mysql.mysql /var/run/mysqld/
EXPOSE 3306
VOLUME ["/opt"]
```
FROM 是作为基础的镜像
RUN 可以理解为在FROM下来的镜像做一些环境的部署
CMD 是创建容器后,会运行的命令
EXPOSE 是暴露的端口
MAINTAINER 通知的邮件
ADD 相当于把主机的start.sh脚本传递给了容器里面
VOLUME 是本地的路径的映射
WORKDIR 是执行的路径,也就是cmd entrypoint执行的路径
docker build -t beyound/mysql ./
Docker openresty-php7镜像制作实战[openresty+php7环境]
下载官方centos镜像 [基于官方docker centos7镜像]
docker pull daocloud.io/library/centos
docker images
docker run -t -v E:/FangCloudSync:/data -i daocloud.io/centos /bin/bash #-v表示挂载目录,需在docker设置里挂载盘符才可正确运行
保存对容器的修改[提交为镜像]
docker commit ca01 openresty-php7
下次可以命令 docker run -t -v E:/FangCloudSync:/data -i openresty-php7 /bin/bash 初始化并进入容器
进入已存在的容器
docker start 4a78a7c12bbf
docker attach 4a78a7c12bbf
导出和导入镜像
导出:docker save -o openresty-php7.tar openresty-php7
导入:docker load < openresty-php7.tar
安装openresty及php7
过程略
此步最终实现
/etc/init.d/php-fpm stop|start|restart|reload
系列命令
指定ip开容器,并且和内网在同一个网段
1.创建docker的网络
docker network create --subnet=172.10.0.0/16 shadownet
2.容器内打开包转发
echo 1 > /proc/sys/net/ipv4/ip_forward
3.开服务器测试
docker run -itd --net shadownet --ip 172.10.89.3 --name web --hostname nginx openresty-php7 /bin/bash
4.docker下nginx + php多机集群实战 [docker对外以端口的形式暴露]
nginx:docker run -p 80:80 -itd --net shadownet --ip 172.10.89.3 --name web --hostname nginx -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/web/web.sh
php1:docker run -itd --net shadownet --ip 172.10.89.4 --name php1 --hostname php1 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
php2:docker run -itd --net shadownet --ip 172.10.89.5 --name php2 --hostname php2 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
php3:docker run -itd --net shadownet --ip 172.10.89.6 --name php3 --hostname php3 -v E:/FangCloudSync:/data openresty-php /bin/bash /data/Work/Docker/php/php.sh
如上面的后台方式启动后,可以使用 docker exec -it web bash进入系统
[windows下:winpty docker exec -it web bash]
Tips:[Docker为什么刚运行就退出了?]
http://blog.csdn.net/meegomeego/article/details/50707532
因而此处/data/Work/Docker/php/php.sh写法如下
主机IP在哪:
本文涉及的openresty-php7镜像包下载地址:
链接:http://pan.baidu.com/s/1dFjHV3r 密码:zm1f
网友评论