首页 > 其他分享 >docker-02

docker-02

时间:2022-12-21 20:47:07浏览次数:43  
标签:02 容器 compose mysql redis luffy docker

一、私有仓库

  docker pull拉取,都是从hub.docker上拉取的,公司自己做的docker镜像,放在哪比较合适?docker push 推到 hub.docker,如果是公开,大家都可以下载,公司内部只希望公司的人用,其他人不能用

公司内部,需要有个仓库管理自己的镜像——>私有仓库或者叫私服

以后拉取镜像时,先从自己服务器拉取没有再去hub.docker拉取,咱们自己制作的镜像,传到私有仓库中,别人看不到

把自己制作的镜像,上传到hub.docker

操作步骤

1、给镜像打标签 (id号还是一样)

  • docker tag 03cf0f47aec0 curry/djagno_books
    • 注意:标签的名字一定要跟hub.docker上账号名字一样

2、登录

  • docker login  # 输入用户名密码

3、推送

  • docker push curry/djagno_books

搭建私有仓库

harbor私有仓库:企业中使用多一些,有好看的图形化界面

  • 使用docker搭建harbor

咱们讲的是:registry,老一点,没有图形化界面,不太好看,使用docker搭建

搭建步骤

1、拉取registry镜像

  • docker pull registry

2、把镜像运行成容器(做了个端口映射)

  • docker run -di --name=registry -p 5000:5000 registry
    • 你使用浏览器访问宿主机5000端口,就能看到一个web服务

3、宿主机浏览器访问:http://10.0.0.205:5000/v2/_catalog

4、修改配置文件

vi /etc/docker/daemon.json
# 我
{"insecure-registries":["10.0.0.205:5000"]} 
# 你们
{"insecure-registries":["192.168.1.143:5000"]} 

5、重启docker

  • systemctl restart docker

6、启动私有仓库容器

  • docker start registry

7、给镜像打标签(镜像名字或者镜像id号都行  后面是地址+端口+名字)

  • docker tag books_django 10.0.0.205:5000/books_django

8、把自己制作的镜像,传到私有仓库 

  • docker push 10.0.0.205:5000/books_django

9、公司内部的人,你们都要能访问到这个,都可以把镜像拉取下来

  • http://10.0.0.205:5000/v2/_catalog
  • docker pull    10.0.0.205:5000/books_django

二、docker-compose介绍

铺垫:使用了docker 面临一个比较大的问题,如果一个djagno项目,使用mysql,redis,不要一次性把所有服务都放到一个容器中,每个服务一个容器,同时启动删除比较麻烦,批量的管理多个容器比较难以操作,于是有了docker-compose

Docker Compose是一个能一次性定义和管理多个Docker容器的工具,单机容器编排【单机的容器管理】

  • docker swarm(docker自己出的):公司里用的不多
  • k8s是多机容器编排工具,go语言写了k8s(大公司)

详细点说

  • Compose中定义和启动的每一个容器都相当于一个服务(service)
  • Compose中能定义和启动多个服务,且它们之间通常具有协同关系

管理方式

  • 使用YAML文件来配置我们应用程序的服务
  • 使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务

安装

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.14.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

yaml文件写法(下面案例演示)

三、docker-compose部署flask项目

3.1 第一步:编写一个Dockerfile

FROM python:3.8
COPY . /app  # 当前路径下的东西放到/app下
WORKDIR /app
RUN pip install flask redis -i https://pypi.tuna.tsinghua.edu.cn/simple
EXPOSE 5000
CMD [ "python", "app.py" ]

3.2 第二步:编写flask代码

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)

@app.route('/')
def hello(): 
    redis.incr('hits')  # 访问一次就加一
    return '你好! 查看 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

3.3 第三步:docker-compose的yaml文件 docker-compose.yml(文件名必须叫

docker-compose.yml)

  • version:3  是版本
  • 有redis和web两个容器  镜像后面可以写版本,不写就用的最新的
  • 书写规范,前面必须有空格
version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis
  • 如果redis服务的名字叫redis,我在web服务中(容器中),根据redis名字就能拿到容器,正常的话滴
    根据IP地址才能拿到,现在不用了,因为都在同一个网络里
	ping redis
    
    # 进入到了web,ping redis
    # 安装ping命令,
    apt-get update
    apt-get install inetutils-ping
    ping redis
    
    
# 一键部署:redis,和flask ,每个都在一个容器中
docker-compose up

 小总结逻辑:

  docker-compose up执行把当前路径下写的docker-compose.yml运行,得到基于image:redis的容器和刚刚构建出来web镜像的容器并且做了8080:5000端口映射,把REDIS_HOST: redis参数传进来,容器一运行就会执行CMD [ "python", "app.py" ]的代码,然后就会执行flask的项目

 

 四、启动管理容器

docker-compose up 会自动搜索当前路径下的 docker-compose.yml文件
docker-compose up -d 后台执行,一般我们看日志输出,不用这个
docker-compose stop 停止,不会删除容器和镜像
docker-compose down 停止,并删除关联的容器
docker-compose start 启动yml文件管理的容器
docker-compose ps 正在运行的容器
docker-compose images docker-compose管理的容器
docker-compose exec yml文件中写的service /bin/bash 进入到容器内

 五、docker-compose部署luffy前后端

 一台服务器

  • python3.8 环境 djagno +uwsgi+代码
  • nginx软件
  • mysql 5.7
  • redis 5

每个都做成一个容器

  • djagno项目容器:python3.8 构建的django,第三方模块,uwsgi,代码
  • nginx容器:目录映射,映射到宿主机,代理vue前端,编译后的静态文件
  • mysql 容器:创建,创建用户,创建密码,创建luffy库
  • redis 容器,跑起来即可

以上这一堆都可以通过docker-compose yml文件配置,一键启动

  • git clone https://gitee.com/liuqingzheng/luffy.git

目录结构

luffy

  • luffy_api  # 后台项目
    • Dockerfile
  • luffycity  # 前台项目
  • docker_compose_files # 放数据的文件夹
  • docker-compose.yml #ymal文件
  • docker-compose.yml内容
  • Dockefile 文件

修改前端链接后台的地址:luffycity/src/access/xx.js

编译:npm run build

提交到git

要部署的服务器:git clone 

  • https://gitee.com/curry/luffy.git
  • docker,docker-compose装好
  • docker-compose up
  • 访问宿主机的 80 端口

Dockerfile

#依赖镜像名称和ID
FROM python:3.8
#指定镜像创建者信息
MAINTAINER lqz
#切换工作目录
RUN mkdir /soft
WORKDIR /soft
COPY ./requestment.txt /soft/requestment.txt
RUN pip install -r requestment.txt -i https://pypi.doubanio.com/simple
#CMD ["uwsgi", "-x", "./luffy.xml"]
CMD ["uwsgi", "./luffy.ini"]
#CMD ["python", "manage_pro.py", "runserver"]

docker-compose yml文件配置,一键启动


        version: "3"

        services:
          nginx:
            image: nginx
            container_name: luffy_nginx
            ports:
              - "80:80"
              - "8000:8000"
            restart: always
            volumes:
              - ./luffycity/dist:/var/www/html
              - ./docker_compose_files/nginx:/etc/nginx/conf.d
            depends_on:
              - django
            networks:
              - web

          django:
            build:
              context: ./luffy_api
              dockerfile: Dockerfile
            container_name: luffy_django
        #    command: python manage_pro.py makemigrations && python manage_pro.py migrate && uwsgi ./luffy.ini
            restart: always
            ports:
              - "8080:8080"
            volumes:
              - ./luffy_api:/soft
            environment:
              - TZ=Asia/Shanghai
            depends_on:
              - mysql
              - redis
            networks:
              - web
          redis:
            image: redis:6.0-alpine
            container_name: luffy_redis
            ports:
              - "6379:6379"
            volumes:
              - ./docker_compose_files/redis/data:/data
              - ./docker_compose_files/redis/redis.conf:/etc/redis/redis.conf
            command: redis-server /etc/redis/redis.conf
            networks:
              - web
          mysql:
            image: mysql:5.7
            container_name: luffy_mysql
            restart: always
            ports:
              - "3306:3306"
            env_file:
              - ./docker_compose_files/mysql.env
            volumes:
              - ./docker_compose_files/mysql/data:/var/lib/mysql
              - ./docker_compose_files/mysql/logs:/var/log/mysql
              - ./docker_compose_files/mysql/conf:/etc/mysql/conf.d
            networks:
              - web

        networks:
          web:

图解析

虚拟机上跑了个Nginx容器,做了个目录映射,映射到luffy/luffy_city/dist,又跟宿主机做了个80:80映射,返回index能看到前端项目,前端项目加载好像8000端口发送请求,又做了个端口映射,8000映射到8000,接着转发给django容器。uwsgi监听的是8080端口里面有django+代码,通过名字luffy_mysql连接mysql容器和通过名字luffy_redis连接redis容器。后面想扩容的话再启动个容器就行

标签:02,容器,compose,mysql,redis,luffy,docker
From: https://www.cnblogs.com/zzjjpp/p/16996444.html

相关文章

  • Node.js(笔记02) - fs文件系统模块
    fs 文件系统模块fs 模块是 Node.js 官方提供的,用来操作文件的模块。提供了一系列的方法和属性,用来满足用户对文件的操作需求;例如:fs.readFile() 方法,用来读取指定文件中......
  • 今日内容 docker-compose部署项目
    私有仓库#dockerpull拉取,都是从hub.docker上拉取的,公司自己做的docker镜像,放在哪比较合适#dockerpush推到hub.docker,如果是公开,大家都可以下载,公司内部只希......
  • 【限时免费领取】2020-2022音视频 & 元宇宙行业报告精华合集,可单份或一次性打包下载!
     各位开发者小伙伴,社区运营小姐姐为大家准备了一份技术大礼包。涵盖音视频、元宇宙两大领域2020-2022年度精选行业分析报告,现开启限时免费领取!微信扫码获取行业报告,开......
  • 将微服务项目利用Docker部署到服务器
    一、Docker基本知识写DockerFile文件创建自己的镜像volumn挂载目录容器间通信:同一network下docker-compose进行多容器部署二、部署过程(docker-hub网站里有现成容器部......
  • SQL0289N Unable to allocate new pages in table space
    db2-tvfzhangsan.sql报错:"SQL0289NUnabletoallocatenewpagesintablespace"USERSPACE1".SQLSTATE=57011"表空间大小不够了可以在备份库下执行db2listtablespace......
  • Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到
    场景CentOS中使用Docker安装Jenkins:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119911722在上面使用Docker部署起来Jenkins的基础上,怎样拉取SpringBoo......
  • Media Encoder 2021 for Mac(ame 2021永久版) v15.4.1中文版
    MediaEncoder2021中文版是一款优秀的视频音频编码器,能够将多种设备格式的音频或视频进行导出,提供了丰富的硬件设备编码格式设置以及专业设计的预设设置,方便用户导出与特定......
  • 2022年总结
    转眼,2022年就剩下十多天了。 倒是应了那句老话:“人生天地之间,若白驹过隙,忽然而已。” 不管你是否准备好,2022年倒计时的钟表已经敲响,最后十天,请记得好好地谢谢自己!......
  • DPU02是一个高度集成的USB转UART的桥接控制器
    DPU02是一个高度集成的USB转UART的桥接控制器,该产品提供了一个简单的解决方案,可将RS-232设计更新为USB设计,并简化PCB组件空间。该DPU02包括了一个USB2.0全速功能控制器、U......
  • Docker挂载
    1.挂载的概念预备:你需要了解docker的基本知识docker实现了容器部署,那当我们需要配置或者查看容器生成的日志文件怎么办?docker提供了挂载机制:挂载能够将容器内的目录/文......