5.Docker-Compose-仓库-harbor-nexus

Docker-Compose-仓库-harbor-nexus

一、Compose

1.1 什么是compose

compose是一个容器编排工具:

例如:我们现在需要启动10个容器,其中3个nginx,2个redis,3个mysql,1个zabbix,1个ansible,有些容器需求先启动,有容器需要后启动,在启动的时候是有先后顺序的。

批量启动容器,而且启动的时候容器之间是有依赖关系,需要考虑启动顺序的

编排的内容全部写到一个yaml文件里,docker的compose根据这个yaml文件里的安排去启动容器。

Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器。

Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高。

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YAML文件来配置应用程序的服务。然后,使用一个命令,就可以从配置中创建并启动所有服务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9fRlYONL-1662222677922)(D:\Typora\photo\image-20220831145422265.png)]

1.2 compose安装

官方文档:https://docs.docker.com/compose/install/

Install Docker Compose CLI plugin | Docker Documentation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-utaTWTbu-1662222677923)(D:\Typora\photo\image-20220831150133967.png)]

# 上传docker-compose程序到自己的linux宿主机里,存放到/root/.docker/cli-plugins/
[root@docker .docker]# cd cli-plugins/
[root@docker cli-plugins]# ls
docker-compose
# 授予可执行权限
[root@docker cli-plugins]# chmod +x docker-compose 
# 测试compose是否可以使用
[root@docker cli-plugins]# docker compose version
Docker Compose version v2.7.0

1.3 compose案例

官方文档:Get started with Docker Compose | Docker Documentation

第一步 :配置

定义应用程序依赖关系。

1、创建compose目录

$ mkdir composetest
$ cd composetest

2、创建一个名为“app”的文件。py`并将其粘贴到项目目录中:

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

3、创建另一个名为“需求”的文件。txt`并将其粘贴到:

flask
redis
第二步:创建Dockerfile

在这一步中,您将编写一个构建Docker映像的Dockerfile。该图像包含Python应用程序所需的所有依赖项,包括Python本身。

在项目目录中,创建名为“Dockerfile”的文件并粘贴以下内容:

# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

这告诉Docker:

  • -从Python 3.7映像开始构建映像。

    -将工作目录设置为/code

    -设置“flask”命令使用的环境变量。

    -安装gcc和其他依赖项

    -复制“要求”。txt`并安装Python依赖项。

    -将元数据添加到图像中,以描述容器正在监听端口5000

    -复制当前目录在该项目中,工作日在图像中。

    -将容器的默认命令设置为“flask run”。

第三步:在组合文件中定义服务

创建一个名为“docker compose”的文件。yml`并粘贴以下内容:

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"	# 要确保端口未被占用
  redis:
    image: "redis:alpine"

这个组合文件定义了两个服务:“web”和“redis”。

Web service

“web”服务使用从当前目录中的“Dockerfile”构建的图像。然后将容器和主机绑定到暴露的端口“8000”。此示例服务使用Flask web服务器的默认端口“5000”。

Redis service

“redis”服务使用公共redis从Docker Hub注册表中提取的图像。

第四步:使用Compose构建并运行应用程序
  1. 从项目目录中,通过运行“docker compose-up”启动应用程序。

    $ docker compose up
    
    Creating network "composetest_default" with the default driver
    Creating composetest_web_1 ...
    Creating composetest_redis_1 ...
    Creating composetest_web_1
    Creating composetest_redis_1 ... done
    Attaching to composetest_web_1, composetest_redis_1
    web_1    |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
    redis_1  | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis_1  | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
    redis_1  | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    web_1    |  * Restarting with stat
    redis_1  | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
    redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    web_1    |  * Debugger is active!
    redis_1  | 1:M 17 Aug 22:11:10.483 # Server initialized
    redis_1  | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    web_1    |  * Debugger PIN: 330-787-903
    redis_1  | 1:M 17 Aug 22:11:10.483 * Ready to accept connections
    

    Compose提取一个Redis映像,为您的代码构建映像,并启动您定义的服务。在这种情况下,代码在构建时静态复制到映像中。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pAIPoSKz-1662222677923)(D:\Typora\photo\image-20220831152540143.png)]

  2. 访问http://localhost:8000/在浏览器中查看应用程序正在运行。

    如果您在Linux、Mac的Docker Desktop或Windows的DockerDesktop上原生使用Docker,则web应用程序现在应该在Docker守护程序主机上的端口8000上监听。将web浏览器指向http://localhost:8000查找“Hello World”消息。如果无法解决,您也可以尝试http://127.0.0.1:8000.

    您应该会在浏览器中看到这样一条消息:

    Hello World! I have been seen 1 times.
    

1.4 Compose and WordPress

官方文档:Quickstart: Compose and WordPress | Docker Documentation

您可以使用Docker Compose在使用DockerContainers构建的隔离环境中轻松运行WordPress。本快速入门指南演示了如何使用Compose设置和运行WordPress。在开始之前,请确保已安装Compose.

定义项目
  1. 创建一个空项目目录。

    您可以为目录命名一些易于记忆的名称。此目录是应用程序映像的上下文。目录应仅包含构建该映像的资源。

    此项目目录包含一个“docker compose”。对于一个好的启动wordpress项目,yml文件本身是完整的。

    提示:您可以使用a或。yml’或‘。yaml此文件的扩展名。他们都在工作。

  2. 更改到项目目录。

    例如,如果您将目录命名为“my_wordpress”:

    $ cd my_wordpress/
    
  3. 创建一个“docker compose”。启动“WordPress”博客的yml文件,以及一个单独的“MySQL”实例,用于数据持久性的卷装载:

    services:
      db:
        # We use a mariadb image which supports both amd64 & arm64 architecture
        image: mariadb:10.6.4-focal
        # If you really want to use MySQL, uncomment the following line
        #image: mysql:8.0.27
        command: '--default-authentication-plugin=mysql_native_password'
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=somewordpress
          - MYSQL_DATABASE=wordpress
          - MYSQL_USER=wordpress
          - MYSQL_PASSWORD=wordpress
        expose:
          - 3306
          - 33060
      wordpress:
        image: wordpress:latest
        ports:
          - 80:80
        restart: always
        environment:
          - WORDPRESS_DB_HOST=db
          - WORDPRESS_DB_USER=wordpress
          - WORDPRESS_DB_PASSWORD=wordpress
          - WORDPRESS_DB_NAME=wordpress
    volumes:
      db_data:
    
建设项目

现在,从项目目录中运行“docker compose up-d”。

这将运行〔‘docker compose up‘〕(https://docs.docker.com/engine/reference/commandline/compose_up/)在分离模式下,提取所需的Docker图像,并启动wordpress和数据库容器,如下例所示。

 docker compose up -d

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N8oyyBhZ-1662222677923)(D:\Typora\photo\image-20220831153825296.png)]

[root@docker my_wordpress]# docker compose ps
NAME                       COMMAND                  SERVICE             STATUS              PORTS
my_wordpress-db-1          "docker-entrypoint.s…"   db                  running             3306/tcp, 33060/tcp
my_wordpress-wordpress-1   "docker-entrypoint.s…"   wordpress           running             0.0.0.0:80->80/tcp, :::80->80/tcp

看到如下,wordpress安装成功!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jPG6H4Gg-1662222677924)(D:\Typora\photo\image-20220831154504442.png)]

1.5 compose 命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeltCaDL-1662222677924)(D:\Typora\photo\image-20220831153629857.png)]

1.6 总结

compose缺点:只能在一台宿主机上编排容器

docker swarm 是docker官方推出的进行多台宿主机上进行容器编排的工具 --》 docker集群里进行容器编排,可以跨宿主机了。

K8s == swarm 是云原生基金会(google)推出的进行多台宿主机上进行容器编排的工具。

容器编排工具:1.compose 2.swarm 3.k8s

二、docker仓库-harbor-nexus

2.1 harbor

(79条消息) Docker Harbor安装配置_牛牛Blog的博客-优快云博客_docker harbor安装与配置

https://blog.51cto.com/yanconggod/2104447

2.2 nexus

https://www.jianshu.com/p/86e573f18df3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值