如果说git是解决代码版本管理的终极方案,那么docker就是解决系统部署需要依赖环境的终极方案。
对于传统的解决服务部署环境依赖的方案可能是虚拟机,例如vmware或者是python的virtualenv等,对比传统的虚拟化技术方案,docker有哪些优势呢
1,启动方面,docker的启动可以说是秒级的,虚拟机可能会耗费分钟级的
2,硬盘使用,docker使用的是MB级别的,虚拟机使用的是GB级别的
3,性能,docker的性能基本解决原生,虚拟机是要弱于原生的
4,容量,docker单机可以支持上千个容器,虚拟机支撑几十个已经是极限了
除此之外,docker还有更轻量,高可用,快速部署和迁移等优点。
至此,我们了解了docker的诸多优点,下面我们就开始docker的最简单实战
1,docker安装(实验环境centos7)
1,1移除旧版docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
1,2安装依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
1,3安装docker
sudo yum install docker
1,4检查docker状态,执行docker命令
docker run hello-world,出现以下界面即为成功
2,制作基础镜像(基于centos的镜像)
2,1拉取centos镜像
docker pull centos
这时候执行docker images可以查看到之前的hello-world镜像和centos镜像
2,2进入镜像并初始化一些工具(crontab,pip, supervisor等)
docker run -it docker.io/centos:latest /bin/bash(此时进入容器的命令行)
执行以下命令安装一些工具(cron,pip,supervisor)
yum install -y epel-release crontabs
yum install -y python-pip
pip install --upgrade pip
pip install supervisor
此时可以用docker ps命令查看运行中的容器并记录下CONTAINER ID
docker commit dd0b0740c970 centos/nginx-proxy-base:latest 创建镜像
docker images查看镜像(此时可以看到centos/nginx-proxy-base已经在镜像列表了)
3,编写Dockfile制作镜像
创建Dockfile所在目录 mkdir /data/docker_nginx-proxy
在该目录下创建supervisor配置文件supervisord.conf
[supervisord]
user=root
nodaemon=true
[program:crond]
user=root
command=crond -n
[program:nginx]
user=root
command=/usr/sbin/nginx
创建crontab.list
0 3 * * * /usr/sbin/nginx -s reload > /dev/null 2>&1
编辑Dockfile文件
FROM centos/nginx-proxy-base:latest
#MAINTAINER
#ADD nginx /usr/sbin/nginx
ADD supervisord.conf /etc/supervisord.conf
ADD crontab.list /etc/crontab.list
#ADD etc/nginx /etc/
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo Asia/Shanghai > /etc/timezone && \
yum -y install nginx && \
echo 'daemon off;' >> /etc/nginx/nginx.conf && \
crontab /etc/crontab.list
CMD ["/usr/bin/supervisord"]
构建镜像
docker build -t="centos/nginx-proxy:v1" ./
运行容器
docker run -v /data/docker:/data/wwwlogs -ti -p 8083:80 centos/nginx-proxy:v1
4,私有仓库
之前的操作只是在本地生成了镜像和创建了容器,如何实现镜像共享呢,可以使用docker registry 创建一个私有仓库
1,拉取私有仓库registry
docker pull registry
2,拉起仓库
docker run -d -p 5000:5000 -v /data/images:/tmp/registry docker.io/registry
3,推送镜像
通过docker images找到要推送的image id
docker tag a234ca1493ee localhost:5000/centos/nginx-proxy:latest (为镜像打标记)
docker push localhost:5000/centos/nginx-proxy:latest(推送)
4,测试
删除本地的镜像
docker rmi localhost:5000/centos/nginx-proxy
重新拉取镜像
docker pull localhost:5000/centos/nginx-proxy
全文完
加qq群交流:994625692(可以聊天聊地的那种)