docker 是一个开源的应用容器引擎,开发者打包他们的应用以及依赖包到一个轻量级、可移植的镜像中,然后发布Linux 机器上安装容器。使得本机也有一样的工作环境,实现虚拟化。
docker通过打包镜像,本地安装容器,可以实现容器内的环境纯净,不受本机影响,避免各种环境冲突问题,另外一个docker更大的应用场景是,当你使用分布式集群的很多台主机进行工作的时候,不需要手动的为每一台机子进行环境配置,依赖安装,只需要将打包好的容器安装到每台机子上就可以实现环境的统一。
几个重要的概念:
image
打包好的容器,里面配置了各种需要的环境,可以登录https://hub.docker.com/注册自己的账号,上传自己的容器,也可以在上面搜索自己需要的容器。但是要注意,尽量不要使用不熟悉的容器,因为你不知道它是否被修改过,注入过什么代码。
docker images // 查看本机镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c82521676580 3 weeks ago 109MB
php 7.2-fpm 1d5598895841 4 weeks ago 367MB
mysql 5.7 c356247174ed 4 weeks ago 372MB
debian latest 3bbb526d2608 4 weeks ago 101MB
container
将image下载到本机安装后就形成了本机的一个安装程序,称为容器,我们可以在容器上安装各种需要的软件,建议一个容器安装一个软件,然后容器间关联通信。你也可以打包自己的container成了image上传,之后就直接安装image就可以得到一致的环境。
docker-compose ps // 查看本机容器
xxx_mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp
xxx_nginx nginx -g daemon off; Up 0.0.0.0:80->80/tcp
xxx_php docker-php-entrypoint php-fpm Up 0.0.0.0:9000->9000/tcp
Dockerfile
通过Dockerfile安装的容器是可以复现的,Dockerfile中记录了你安装容器进入容器的每一步linux命令操作。通过运行Dockerfile文件,你可以轻松的实现自动化的容器环境配置,依赖安装,而不需要进入容器中的linux命令一行一行的敲命令。建议对linux命令比较熟悉而且Dockerfile不是很大的时候使用该方式。
docker build 命令启动文件夹下的Dockerfile安装文件。
FROM php:7.2-fpm // 安装的image包
RUN apt-get update // 安装后执行的linux命令
RUN mkdir php
更多关系Dockerfile的信息可以参看Dockerfile命令参数
docker-compose
官网定义Compose is a tool for defining and running multi-container Docker applications。可知compose是一个多容器之间关系的管理工具。在使用docker-compose之前需要先安装,具体的可以参考官网。composer安装
docker-compose的使用依赖docker-compose.yml配置文件,该文件放置于文件夹的根目录,通过docker-compose.yml文件可以实现多个容器的安装,以及之间的依赖关系配置。通过docker-compose.yml不仅支持原生image安装,同时也支持Dockerfile安装,或者混合的安装方式,通过docker-compose我们可以更好的创建多个容器互相依赖工作的环境。
示例:
//版本
version: '3'
// 服务,也即在里面配置多个容器
services:
nginx:
image: nginx:latest // 远程镜像,这里也可以指定Dockerfile文件进行安装
ports: // 端口映射 本机/容器
- "80:80"
volumes: // 共享文件夹 本机/容器
- "./nginx/conf.d:/etc/nginx/conf.d"
- "./nginx/log:/var/log/nginx"
- "./php/www:/var/php-fpm/www"
// 给容器取一个名字
container_name: "zbq_nginx"
// 网络,其实是连接名,参考后面的networks配置
networks:
- app_net
php:
// 使用当前文件夹下的php文件夹中的Dockerfile进行安装
build: ./php
ports:
- "9000:9000"
volumes:
- "./php/www:/var/php-fpm/www"
container_name: "zbq_php"
networks:
- app_net
mysql:
image: mysql:5.7
ports:
- "3306:3306"
// 数据库一定要将数据文件映射出来,不然容器崩溃,里面的数据就没了!!!!
volumes:
- "./mysql/data:/var/lib/mysql/"
// 设置容器内部的环境命令,这里设置mysql的初始密码
environment:
- MYSQL_ROOT_PASSWORD=123456
container_name: "zbq_mysql"
networks:
- app_net
networks:
// 定义桥接网络
app_net:
driver: bridge
ipam:
config:
- subnet: 10.10.0.0/16
关于docker-compose.yml文件的具体配置信息可以参看docker-compose.yml参数
网友评论