Dockerfile定制镜像命令,docker镜像:业务代码和运行环境进行整体的打包:
一个Dockerfile的文件:系统基本所需要的环境和软件
1 2 3 4 5 6 7 8 9 10 11
| vim Dockerfile FROM centos7 RUN ADD . /opt/ EXPOSE 80 8000 VOLUME ["/home/python",""] WORKDIR '/home/xx' CMD ["nginx", "-g", "daemon off;"] docker build -t app .
|
Dockerfile 模板文件,可以很方便的定义一个单独的应用容器,记录了(单)一个镜像的制作过程
如果 dockerhub 的镜像不能满足我的需求就 dockerfile 自己 build 镜像
为什么还要docker-compose,是因为Dockerfile要去执行CMD [“bash”]之后,再去启动nginx,node等其它的服务,不能直观的看到端口之间的映射,以及服务之间的link的原因吗?
但是很多时候,需要多个镜像合作才能启动一个服务,比如前端要有nginx,数据库mysql,邮件服务等等,当然你可以把所有这些都弄到一个镜像里去,但这样做就无法复用了.
更常见的是,nginx,mysql,smtp都分别是个镜像,然后这些镜像合作,共同服务一个项目.
docker-compose就是解决这个问题的.你的项目需要哪些镜像,每个镜像怎么配置,要挂载哪些volume,等等信息都包含在docker-compose.yml里.
要启动服务,只需要docker-compose up就行,停止也只需要docker-compse stop/down
dockerfile+docker-compose, 是因为docker-compose.yml本身没有镜像构建的信息,如果镜像是从docker registry拉取下来的,那么Dockerfile就不需要;如果镜像是需要build的,那就需要提供Dockerfile.
docker-compost:定义和运行多个Docker容器的应用
编排工具,定义并运行基于Docker的分布式应用,简化部署复杂应用的流程,管理容器化应用的完整开发周期
1.允许用户通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目:project
,包括注明需要哪些服务,服务之间的关联,开放的port,对外连结的路径volumes
2.以启动container为目的的、先build image再以此启动container
3.定义好了管理起来轻松,你如果喜欢用docker run带一大串parameters也是可以的
install compose
1 2 3 4 5 6 7 8 9 10
| curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` \ > /usr/local/bin/docker-compose https://github.com/docker/compose/releases/download/1.8.0/docker-compose-Linux-x86_64 cd Download cp docker-compose-Linux-x86_64 /usr/local/bin/docker-compose chmod a+x /usr/local/bin/docker-compose docker-compose -h docker-compose up/down/stop
|
管理server(contient)执行的顺序,但其实这只是希望是这样执行(docker run),但其实真正的启动时的, 还需要其它的工具去控制.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| mkdir 1 cd 1 vim docker-compose.yml nginx: image: nginx ports: - "80:80" volumes: - $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/sites-enabled:/etc/nginx/sites-enabled restart: always node: image: node ports: -"8000:8000" volumes: - $PWD/node:/src/app restart: always mkdir node mkdir nginx cd nginx mkdir sites-enabled vim nginx.conf daemon off; 还要去配置node cd ../ docker-compose up docker-compose down docker ps -l
|
用docker-compose 自动一个一个的安装软件(client)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| vim docker-compose.yml version: '2' services: mongodb: image: tutum/mongodb ports: - "27017:27017" - "28017:28017" environment: - AUTH=no container_name: mongodb restart: always memcached: image: memcached ports: - "11211:11211" container_name: memcached restart: always
|
一个项目的例子