• docker和Jenkins


    本节内容:

    1:docker的安装

    2:docker的使用

    文档可以参考菜鸟教程:

    https://m.runoob.com/docker/

    docker和Jenkins之前有写到语雀:https://www.yuque.com/cranr/qcxvha

    一、docker安装

    推荐使用菜鸟教程的官网安装脚本:

    curl -sSL https://get.daocloud.io/docker | sh

    二、docker的使用

    Docker 01 概述

    Docker 02 基本命令

    Docker 03 镜像命令

    Docker 04 容器命令

    Docker 05 常用命令

    Docker 06 部署Nginx

    Docker 07 部署Tomcat

    Docker 08 部署Elasticsearch

    Docker 09 可视化

    Docker 10 镜像原理

    Docker 11 自定义镜像

    Docker 12 数据卷

    Docker 13 Dockerfile

    Docker 14 网络

    Docker 15 Compose、swarm

    三、docker-compose

    3.1:问题引入

    如果你看了上面的docker网络之后,就可以知道我们的docker容器是有一个网关的概念还有局域网的概念。

    比如说我们有两个容器一个是Nginx提供80端口服务,一个是alpine【最小的linux系统】,我的alpine容器想访问Nginx可以有两种实现方式的!

    上面我们可以使用:
    curl 172.17.0.2 IP的方式去访问我们的Nginx。
    也可以通过类似dns域名【myng】的方式访问
    

    3.2:实现第二访问Nginx方式

    docker run -dit --link myng:myng alpine #--link 将其他容器加到本容器中去

     

     3.3:docker-compose引出

    上图,我们要对外暴露Nginx的服务,但是Nginx使用到了php,pho又使用了mysql做一个增删改查的。按之前说的,我们

    Nginx上面要--link php,然后php 容器上面也要 --link mysql 。并且这是有优先级的,我们比如先启动mysql,再启动phh,最后启动Nginx。

    这整个过程是比较繁琐的!你之后比如服务宕机 重启、或者到别的服务器也要部署。这太麻烦了

    那么有没有一种方式能够我们部署的这些指令全部弄到一个配置文件里,然后我们统一的进行配置?

    -----》这个就是docker compose

    3.4:docker-omopose安装

    我们知道docker-compose是docker的组件,不是集成的所以我们可以直接去下载他。

    3.4.1:GitHub上面搜索docker/compose

    3.4.2:下载docker-compose

     3.4.3:chomd + x 并且移动到Path环境中去

    chmod +x docker-compose-linux-x86_64
    mv docker-compose-linux-x86_64 docker-compose
    echo $PATH
    mv docker-compose /usr/bin/
    

    3.4.4:验证是否成功

    3.5:docker-compose实现

    实现docker官网的计数功能  https://docs.docker.com/compose/gettingstarted/

    app.py

    import tornado.ioloop
    import tornado.web
    import redis
    conn = redis.StrictRedis(host="redis",db=0) #这里的host使用redis
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            conn.incr("pv",1)
            result = conn.get("pv").decode("utf8")
            self.write("Hello, world,I has been seen %s times"%result)
    
    def make_app():
        return tornado.web.Application([
            (r"/", MainHandler),
        ],debug=True)
    
    if __name__ == "__main__":
        app = make_app()
        app.listen(8888)
        print("服务开启了:",8888)
        tornado.ioloop.IOLoop.current().start()
    

    requirements.txt

    tornado==6.1
    redis
    

    Dockerfile

    FROM python:3.8
    WORKDIR /data
    COPY . /data
    EXPOSE 5000
    RUN pip3 install -r requirements.txt
    CMD ["python","app.py"]
    

    docker-compose.yml

    官网地址:https://docs.docker.com/compose/compose-file/#image

    version: "3"
    services:
      web:
        build: .
        ports:
          - "8080:8888"
      redis:
        image: "redis:alpine"
    

    启动:

     3.6:docker-compose的其他命令

    docker-compose up -d --build  #--build 重新构建
    

    四、使用比较忘记混淆的点

    3.1:dockerfile-expose

    首先 EXPOSE命令只是起到一个声明的作用。告诉查看Dockerfile的人,这个容器想暴露5000这个端口,如果你有之后一些关于容器端口的操作可以使用5000端口。

    在宿主机上运行Docker时并不会因为这个声明应用就会开启这个端口的服务,如果你想在宿主机上访问对应5000端口的服务是,需要使用命令将端口进行映射

    docker run -p 宿主机端口:容器端口 image 
    

     3.2:使用swarm集群启动命令

    docker stack deploy -c docker-compose.yml myswarm 
    

      

  • 相关阅读:
    yocto添加源码并编译进文件系统
    yocto编译加速及单独编译内核与uboot
    mysql 创建索引
    redis初使用
    mysql修改时区
    linux修改时间
    服务器环境配置安装(mysql+redis+nodejs+nginx)
    由于找不到MSVCP20.dll,无法继续执行代码
    sequelize初使用
    css flex
  • 原文地址:https://www.cnblogs.com/hero799/p/16139992.html
Copyright © 2020-2023  润新知