美文网首页
docker原理

docker原理

作者: 小张同学_loveZY | 来源:发表于2018-08-19 11:01 被阅读0次

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参数

相关文章

网友评论

      本文标题:docker原理

      本文链接:https://www.haomeiwen.com/subject/nwxtiftx.html