栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker进阶1

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker进阶1

一、Docker进阶 Docker Compose 1. 简介
  • 前面使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知

  • 使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

三步骤:

​ 1、Dockerfile 保证项目可以运行在任何地方

​ 2、services 服务,docker-compose.yml 文件

​ 3、启动项目

Compose重要的概念:

​ 1、服务services。容器、应用

​ 2、项目project。一组关联的容器

官网:https://docs.docker.com/compose/install/

2. 安装

1、下载

# 1.官网,下载比较慢
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2.使用国内的
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授权

sudo chmod +x /usr/local/bin/docker-compose

3. 操作(根据官网)
  • 确保您已经安装了Docker Engine 和Docker Compose。您不需要安装 Python 或 Redis,因为两者都由 Docker 镜像提供。

第一步:设置

定义应用程序依赖项。

  1. 为项目创建一个目录:

     mkdir composetest
     cd composetest
    

​ 2.app.py在您的项目目录中创建一个名为的文件并将其粘贴到:

[root@iZwz99osrzvcx9zd72bqslZ composetest]# vim 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)

在此示例中,redis是应用程序网络上的 redis 容器的主机名。我们使用 Redis 的默认端口6379。

  1. requirements.txt在您的项目目录中创建另一个文件并将其粘贴到:
[root@iZwz99osrzvcx9zd72bqslZ composetest]# vim requirements.txt
flask
redis

第二步:创建一个 Dockerfile

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

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

[root@iZwz99osrzvcx9zd72bqslZ composetest]# vim 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 和其他依赖项
  • 复制requirements.txt并安装 Python 依赖项。
  • 将元数据添加到图像以描述容器正在侦听端口 5000
  • 将.项目中的当前目录复制到.镜像中的workdir 。
  • 将容器的默认命令设置为flask run.

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

docker-compose.yml在您的项目目录中创建一个名为的文件并粘贴以下内容:

[root@iZwz99osrzvcx9zd72bqslZ composetest]# vim docker-compose.yml
version: "3.3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

这个 Compose 文件定义了两个服务:web和redis.

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

该redis服务使用 从 Docker Hub 注册表中提取的公共Redis映像。

第四步:使用 Compose 构建并运行您的应用程序

  1. 从您的项目目录,通过运行启动您的应用程序docker-compose up。
 docker-compose up

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

流程:

①创建网络

②执行 Docker-compose yaml

③启动服务

Starting composetest_web_1 … done
Starting composetest_redis_1 … done

  1. 在浏览器中输入 http://119.23.109.216:5000/ 以查看应用程序正在运行。

  1. 刷新页面。

    数字应该递增。

​ docker images全部都帮我们下载好了

网络规则:

通过compose启动的项目,项目中的内容都在同个网络中,可以通过域名访问

docker inspect composetest_default

如果在同一个网络下,可以直接通过域名访问,服务挂了没关系,重新再拉起一个就可以了。如果写死ip,挂了就不能用了!

  1. 停止

    ①docker-compose down

    ②ctrl + c

4. Compose配置编写规则

docker-compose.yaml 核心!

https://docs.docker.com/compose/compose-file/compose-file-v3/

# 3层

version:" " # 版本

services: # 服务
	服务1:web
		# 服务配置 
		images
		build
		network
		...
	服务2:redis
		...
		
# 其它配置 网络/卷、全局规则
volumes:
networks:
configs:
5. 使用Compose一键部署WP博客

https://docs.docker.com/samples/wordpress/

1、将目录命名为my_wordpress

[root@iZwz99osrzvcx9zd72bqslZ home]# mkdir my_wordpress
[root@iZwz99osrzvcx9zd72bqslZ home]# cd my_wordpress/

2、创建一个docker-compose.yml文件来启动您的 WordPress博客和一个单独的MySQL实例,该实例具有用于数据持久性的卷挂载:

[root@iZwz99osrzvcx9zd72bqslZ my_wordpress]# vim docker-compose.yml
version: "3.3"
    
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATAbase: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress_data: {}

3、启动docker-compose up -d

  • -d 后台启动
[root@iZwz99osrzvcx9zd72bqslZ my_wordpress]# docker-compose up

4、在网络浏览器中启动 WordPress,并注册登录

http://119.23.109.216:8000

5、关闭和清理

该命令docker-compose down会删除容器和默认网络,但会保留您的 WordPress 数据库。

该命令docker-compose down --volumes将删除容器、默认网络和 WordPress 数据库。

6. 实战:编写微服务上线

1、IDEA新建springboot项目,勾选web和redis

2、

编写代码

@RestController
public class HelloController {
    @Autowired
    StringRedisTemplate redisTemplate;

    @GetMapping("/hello")
    public String hello() {
        Long views = redisTemplate.opsForValue().increment("views");
        return "hello,world,views=" + views;
    }
}

application.properties

server.port=8080
spring.redis.host=redis

Dockerfile 构建镜像

FROM java:8

COPY *.jar /app.jar

CMD ["--server.port=8080"]

EXPOSE 8080

ENTRYPOINT ["java","-jar","/app.jar"]

docker-compose.yaml 编排项目

version: '3.3'
services:
  ghcapp:
    build: .
    image: ghcapp
    depends_on:
      - redis
    ports:
      - "8080:8080"
  redis:
    image: "library/redis:alpine"

3、打包,丢到服务器,docker-compose up

如果项目要重新部署,使用命令docker-compose up --build重新构建

4、访问

curl localhost:8080
curl localhost/hello
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/334946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号