漫谈容器化技术(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里面的内容而来。

目录
相关文章
|
8月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
872 6
|
8月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
798 6
|
8月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
699 2
|
8月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
1137 4
|
10月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1308 108
|
11月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
773 57
|
8月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
802 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !