漫谈容器化技术(docker实践篇)

简介: 漫谈容器化技术(docker实践篇)

01 引言

在前面的博客,关于容器化技术,我写了相关的博客,有兴趣的同学可以参阅下:

本文主要讲解的是docker的操作实践,主要讲解 DockerfileDocker Compose以及Docker Machine

02 Dockerfile

Dockerfile是一个用来构建镜像的脚本,文本内容包含了一条条构建镜像所需的指令,下面以制作镜像为例子讲解。

2.1 制作镜像

step1:在一个空目录下,新建一个名为 Dockerfile 文件:

vi Dockerfile

并在文件内添加以下内容:

FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

step2:在 Dockerfile 文件的存放目录下,执行构建动作(通过目录下的Dockerfile构建一个nginx:v3(镜像名称:镜像标签)):

docker build -t nginx:v3 .

注:最后的 . 代表本次执行的上下文路径

2.2 指令详解

参考:https://www.runoob.com/docker/docker-dockerfile.html

03 Docker Compose

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

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up命令来启动并运行整个应用程序。

3.1使用示例

3.1.1 Dockerfile定义

创建一个测试目录:

$ mkdir composetest
$ cd composetest

在测试目录中创建一个名为 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)

composetest 目录中,创建一个名为 Dockerfile的文件,内容如下:

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
COPY . .
CMD ["flask", "run"]

Dockerfile 内容解释:

  • FROM python:3.7-alpine: 从 Python 3.7 映像开始构建镜像。
  • WORKDIR /code: 将工作目录设置为 /code。
  • ENV FLASK_APP app.py:设置 flask 命令使用的环境变量。
  • RUN apk add --no-cache gcc musl-dev linux-headers: 安装 gcc,以便诸如 MarkupSafe 和 SQLAlchemy 之类的 Python 包可以编译加速。
  • COPY requirements.txt requirements.txt:复制 requirements.txt
  • RUN pip install -r requirements.txt:安装 Python 依赖项。
  • COPY . .: 将 . 项目中的当前目录复制到 . 镜像中的工作目录。
  • CMD [“flask”, “run”]: 容器提供默认的执行命令为:flask run。

3.1.2 Docker Compose定义

在测试目录中创建一个名为 docker-compose.yml 的文件,然后粘贴以下内容:

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

该 Compose 文件定义了两个服务

  • web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。
  • redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。

3.1.3 启动

在测试目录中,执行以下命令来启动应用程序:

docker-compose up

3.2 yml 配置

参考:https://www.runoob.com/docker/docker-compose.html

04 Docker Machine

4.1 简介

  • Docker Machine是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine命令来管理主机。
  • Docker Machine 也可以集中管理所有的 docker 主机,比如快速的给 100台服务器安装上 docker
  • Docker Machine 管理的虚拟主机可以是机上的,也可以是云供应商,如阿里云,腾讯云,AWS,或 DigitalOcean
  • 使用 docker-machine 命令,您可以启动,检查,停止和重新启动托管主机,也可以升级 Docker客户端和守护程序,以及配置Docker客户端与您的主机进行通信。

4.2 安装

安装 Docker Machine 之前你需要先安装 DockerDocker Machine可以在多种平台上安装使用,包括LinuxMacOS以及 windows

4.2.1 Linux 安装命令

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine

4.2.2 macOS 安装命令

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine

4.2.3 Windows 安装命令

如果你是 Windows 平台,可以使用 Git BASH,并输入以下命令:

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
mkdir -p "$HOME/bin" &&
curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
chmod +x "$HOME/bin/docker-machine.exe"

查看是否安装成功:

$ docker-machine version
docker-machine version 0.16.0, build 9371605

4.3 使用

4.3.1 使用示例

通过 virtualbox 来介绍 docker-machine 的使用方法。

1、列出可用的机器:可以看到目前只有这里默认的 default 虚拟机。

$ docker-machine ls

2、创建机器:创建一台名为 test 的机器。

$ docker-machine create --driver virtualbox test

–driver:指定用来创建机器的驱动类型,这里是 virtualbox。

3、查看机器的 ip

$ docker-machine ip test

4、停止机器

$ docker-machine stop test

5、启动机器

$ docker-machine start test

6、进入机器

$ docker-machine ssh test

4.3.2 命令参数

docker-machine active:查看当前激活状态的 Docker 主机

命令 解析
config 查看当前激活状态 Docker 主机的连接信息
create 创建 Docker 主机
env 显示连接到某个主机需要的环境变量
inspect 以 json 格式输出指定Docker的详细信息
ip 获取指定 Docker 主机的地址
kill 直接杀死指定的 Docker 主机
ls 列出所有的管理主机
provision 重新配置指定主机
regenerate-certs 为某个主机重新生成 TLS 信息
restart 重启指定的主机
rm 删除某台 Docker 主机,对应的虚拟机也会被删除
ssh 通过 SSH 连接到主机上,执行命令
scp 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
mount 使用 SSHFS 从计算机装载或卸载目录
start 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
status 获取指定 Docker 主机的状态(包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error)等
stop 停止一个指定的 Docker 主机
upgrade 将一个指定主机的 Docker 版本更新为最新
url 获取指定 Docker 主机的监听 URL
version 显示 Docker Machine 的版本或者主机 Docker 版本
help 显示帮助信息

声明:本文为内容经过整理https://www.runoob.com/docker里面的内容而来。

目录
相关文章
|
9月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2347 10
|
9月前
|
Kubernetes Devops Docker
Kubernetes 和 Docker Swarm:现代 DevOps 的理想容器编排工具
本指南深入解析 Kubernetes 与 Docker Swarm 两大主流容器编排工具,涵盖安装、架构、网络、监控等核心维度,助您根据团队能力与业务需求精准选型,把握云原生时代的技术主动权。
778 115
|
9月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
531 99
|
9月前
|
缓存 前端开发 Docker
Docker Layer Caching:加速你的容器构建
Docker Layer Caching:加速你的容器构建
|
8月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
784 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
850 6
|
8月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
770 6