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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 漫谈容器化技术(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里面的内容而来。

目录
相关文章
|
3天前
|
存储 虚拟化 数据中心
|
1天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。
|
2天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
2天前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今快速迭代和持续交付的软件发展环境中,传统的IT运维模式已不足以满足企业对效率和稳定性的双重需求。本文将深入探讨如何通过整合DevOps理念和容器化技术来构建一个既高效又稳定的云基础设施。文中不仅阐述了DevOps的核心原则、流程自动化的重要性以及容器化技术的基础知识,还提供了一个详细的实施案例,帮助读者理解这两种技术如何协同工作,以支持复杂的应用程序部署和管理。
|
2天前
|
存储 Linux 文件存储
Linux使用Docker部署Traefik容器并实现远程访问管理界面-1
Linux使用Docker部署Traefik容器并实现远程访问管理界面
|
2天前
|
Linux 开发者 Docker
Docker容器化技术详解
【4月更文挑战第30天】Docker,一个开源的容器化平台,助力开发者通过轻量级容器打包应用及依赖,实现跨平台快速部署。核心概念包括:容器(可执行的软件包)、镜像(只读模板)、Dockerfile(构建镜像的指令文件)和仓库(存储镜像的地方)。Docker利用Linux内核功能隔离容器,采用联合文件系统构建镜像。广泛应用包括开发测试一致性、微服务部署、CI/CD以及本地到远程部署。通过安装Docker,编写Dockerfile,构建&运行容器,可实现高效灵活的应用管理。随着容器技术进步,Docker在云计算和DevOps中的角色日益重要。
|
2天前
|
Shell Docker Ruby
3.Docker容器的数据卷
3.Docker容器的数据卷
|
2天前
|
运维 Kubernetes 持续交付
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】 在快速发展的云计算时代,传统的运维模式已无法满足敏捷开发和快速迭代的需求。本文将介绍如何利用容器技术搭建一套高效自动化运维系统,实现软件的持续集成(CI)与持续部署(CD)。文章首先探讨了现代运维面临的挑战,接着详细阐述了容器技术的核心组件和工作原理,最后通过实际案例展示了如何整合这些组件来构建一个可靠、可扩展的自动化运维平台。
|
2天前
|
弹性计算 Shell 数据安全/隐私保护
|
2天前
|
弹性计算 Shell 数据安全/隐私保护
自动化构建和部署Docker容器
【4月更文挑战第30天】
6 0