01 引言
在前面的博客,关于容器化技术,我写了相关的博客,有兴趣的同学可以参阅下:
本文主要讲解的是docker
的操作实践,主要讲解 Dockerfile
、Docker 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
之前你需要先安装 Docker
。Docker Machine
可以在多种平台上安装使用,包括Linux
、MacOS
以及 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里面的内容而来。