Docker从入门到项目部署一条龙

1.什么是linux容器?

  • Linux容器是与本机系统其他部分隔离开的一系列进程,从一个镜像运行,并由该镜像提供支持进程所需的全部文件(包含了所需要的服务,依赖)

  • 容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性

优点:

你在开发一个应用,你的开发环境具有特定的配置与环境,你正在开发的应用依赖于你当前的环境,其他开发人员身处的环境配置可能是不同的,要依赖于他自己的某些特定文件,与此同时,比如说三翼服务器又有自己的一套环境,具有自身的配置和一系列支持文件,你想要的是尽可能多在本地模拟这些环境,而不是去重新耗时耗力地去搭建服务器环境。

与虚拟化的区别:

  • 虚拟化:许多操作系统可同时在单个系统上运行,比方说就是一台电脑你可以装linux系统,也可以是windows系统,你到操作中心去上课的时候,可能会看到让你选操作系统地页面,这也就是多个OS在单个系统上运行。

  • 容器:容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开,也就意味着linux容器在单个操作系统中运行,所有的容器共享这个操作系统,而容器里可以是各种服务,也可以是操作系统。

2.什么是Docker

  • IT 软件中所说的 “Docker” ,是指容器化技术,用于支持创建和使用 Linux 容器。开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益

  • Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用程序,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。是一种容器工具

  • Docker的目标:

    • 构建:做一个docker镜像

    • 运输:docker pull

    • 运行:启动一个容器

  • Docker官网Docker社区

Docker的用处

为什么要用

  • 更快速的交付和部署:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序

  • 更轻松的迁移和扩展

  • 更简单的管理

应用场景

  • 本地依赖:使用虚拟的话,经常需要为开发环境的机器加内存,而通过 Docker 可以轻易的让几十个服务在 Docker 中跑起来,也能我们快速搭建开发环境

  • 微服务:微服务架构 ,即将一个整体式的应用拆分成松耦合的单个服务

  • 自动测试,持续部署,多租户环境,扩容

3.安装

4.使用

  • 使用docker的目的是为了搭建一个轻量的环境供我们使用,一个项目跑起来需要很多服务,比如一个项目的技术栈包含有php,mysql,redis,以及调用这些的nginx服务器所以第一步是拉取这些服务

    • 镜像(之前也有提到,镜像提供支持进程所需的全部文件,所以拉去了镜像也就拉下了服务)

      • docker search centos        //docker搜索官方仓库镜像
        NAME                      DESCRIPTION                    STARS    OFFICIAL               AUTOMATED
        centos                    The official build of CentOS.  3992     [OK]      
        ansible/centos7-ansible   Ansible on Centos7             105
      • docker pull centos          //根据镜像名称拉取镜像
      • docker image list           //查看当前主机镜像列表
        REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
        centos              latest              ff426288ea90        3 weeks ago         207MB
        nginx               latest              3f8a4339aadd        5 weeks ago         108MB
      • docker image rm centos:latest       //删除镜像
      • docker image inspect centos(镜像名)
    • 容器(创建介绍下我自己的写法)

      • docker run -itd --name 镜像名 -v 目录挂载 -p 端口映射 /bin/bash    //自动创建并跑起来了一个容器
      • docker exec -it clsn1  /bin/bash            //进入容器
      • -p参数端口映射

        • [root@docker01 ~]# docker run -d -p 80:80  nginx:latest
          079786c1e297b5c5031e7a841160c74e91d4ad06516505043c60dbb78a259d09
      • -v挂载卷

        • [root@docker01 ~]# docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
          079786c1e297b5c5031e7a841160c74e91d4ad06516505043c60dbb78a259d09

          宿主机/data目录映射到容器内部/usr/share/nginx/html目录下,在宿主机的文件或内容的增删改查都会同步至容器内,所以一般的用途是数据备份,配置文件的修改调试,日志的查看

      • 剩余的有容器的保存为镜像,以及上传到社区内等等自行拓展,这里就不展开,菜鸟

5.Dockerfile

  • 构建镜像命令的集合

  • 命令:

    FROM (指定基础镜像)
    MAINTAINER (指定维护者信息,可以没有)
    RUN (在命令前面加上RUN即可)
    ADD (COPY文件,会自动解压)
    WORKDIR (设置当前工作目录,也就是cd)
    VOLUME (设置卷,挂载主机目录)
    EXPOSE (指定对外的端口)
    CMD (指定容器启动后的要干的事情)
  • [root@docker01 base]# vim Dockerfile
    FROM centos:6.8
    RUN yum install openssh-server -y 
    RUN echo "root:123456" |chpasswd
    RUN /etc/init.d/sshd start 
    CMD ["/usr/sbin/sshd","-D"]

6.Docker Composer

  • 创建容器的命令集合

  • 命令:(很简单明了,直接看示例文件)

  • version: '3'
    services:
      web:
        image: "/laravel:nginx1.17.5"
        container_name: "res_nginx"
        ports:
          - "10308:80"
        volumes:
          - ./:/var/www/html/
          - ./dockercnf/nginx1.17.5/etc:/etc/nginx
    #      - ./dockercnf/nginx1.17.5/conf.d:/etc/nginx/conf.d
    #      - ./dockercnf/nginx1.17.5/ssl/:/etc/nginx/ssl/
          - ./dockercnf/run:/sock
        depends_on:
          - php
      php:
    #    build: ./dockercnf/php7.3-fpm/
        image: "/laravel:php7.4-fpm"
        container_name: "res_php"
        privileged: true
        volumes:
          - ./dockercnf/run:/sock
          - ./:/var/www/html/
          - ./dockercnf/php7.3-fpm/php-fpm.d:/usr/local/etc/php-fpm.d
          - ./dockercnf/php7.3-fpm/php:/usr/local/etc/php/php
        depends_on:....
  • 启动

      #启动方法:docker-compose up
      #后台启动方法:docker-compose up -d

7.容器连接

  • Docker中的四种网络模式:(介绍下bridge模式)

    • bridge模式:bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将并将一个主机上的Docker容器连接到一个虚拟网桥上。当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配IP了,Docker会从RFC1918所定义的私有IP网段中,选择一个和宿主机不同的IP地址和子网分配给docker0,连接到docker0的容器就从这个子网中选择一个未占用的IP使用。如一般Docker会使用172.17.0.0/16这个网段,并将172.17.42.1/16分配给docker0网桥(在主机上使用ifconfig命令是可以看到docker0的,可以认为它是网桥的管理端口,在宿主机上作为一块虚拟网卡使用

    • host模式

    • none模式

    • container模式

  • 在这里,我们可以看到Docker0相当于一个路由器的作用,任何一个容器启动默认都是docker0网络,docker默认会给容器分配一个可用ip,这个ip就是这个容器的ip(Docke服务中的),并把它同docke0相连,而各个容器之间并没有相连

互联

  • 方法一:--link命令

 docker run -d -p 8083:8080 --name tomcat03 --link tomcat02 tomcat

但是link是单向的,方法比较过失

  • 方法二:自定义网络(推荐)

思路:创建一个的网段,然后将各个容器放进其中,相当于这个创建了一个微型局域网,在这个网络内各个容器之间是相通的,且与其他网络隔离

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 
//默认使用的driver也就是在docker0上创建一个网段 subnet是划分的子网地址 gateway即给这个网段划分的网关,要是报错没有地址了换成24等
docker inspect mynet					  //查看网络

docker network connect mynet 容器名		//将容器放入网络中

值得注意的是网络里的ip地址由于是虚拟的,所以很容易改变,所以在用到容器的时候尽量使用容器名

架构:

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值