65、容器部署与云环境中的Linux运行

容器部署与云环境中的Linux运行

1. Docker容器部署

1.1 安装Docker

使用以下命令安装Docker社区版:

apt install docker.io

为了避免每次使用Docker命令都要加 sudo ,可以将你的Linux账户用户名添加到 /etc/group 文件中的 docker:x:117: 行。假设用户名是 steve ,修改后如下:

docker:x:117:steve

注意冒号和用户名之间不能有空格,修改后注销并重新登录使更改生效。

1.2 运行第一个Docker容器

通常,人们会从运行“hello-world”容器开始他们的Docker之旅:

docker run hello-world

运行上述命令后,Docker会执行以下步骤:
1. Docker客户端联系Docker守护进程。
2. Docker守护进程从Docker Hub拉取“hello-world”镜像。
3. Docker守护进程根据该镜像创建一个新容器,并运行生成输出的可执行文件。
4. Docker守护进程将输出流式传输到Docker客户端,客户端再将其发送到终端。

若想尝试更复杂的操作,可以运行Ubuntu容器:

docker run -it ubuntu bash

1.3 查看和管理镜像

使用 docker images 命令查看本地镜像列表:

docker images

输出示例:
| REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
| --------------- | ------------- | --------------- | --------------- | ------- |
| hello-world | latest | bf756fb1ae65 | 3 months ago | 13.3kB |

可以使用镜像ID再次运行镜像。例如,拉取Alpine Linux的最新版本:

docker pull alpine:latest

使用 docker history 命令查看Alpine镜像的层信息:

docker history alpine

输出示例:
| IMAGE | CREATED | CREATED BY | SIZE |
| ------------ | ----------- | --------------------------------------------- | ----- |
| f70734b6a266 | 6 days ago | /bin/sh -c #(nop) CMD [“/bin/sh”] | 0B |
| | 6 days ago | /bin/sh -c #(nop) ADD file:b91adb67b670d3a6… | 5.61MB|

1.4 搜索和使用特定镜像

假设要运行一个轻量级的WordPress站点,可以在Docker Hub上搜索基于Alpine的WordPress镜像:

docker search alpine | grep wordpress

若找到合适的镜像,如 etopian/alpine-php-wordpress ,可以拉取该镜像:

docker pull etopian/alpine-php-wordpress

再次查看本地镜像列表:

docker images

输出示例:
| REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
| ---------------------------- | ------ | ------------ | ------------ | ------- |
| alpine | latest | f70734b6a266 | 6 days ago | 5.61MB |
| etopian/alpine-php-wordpress | latest | c02c59f90188 | 2 months ago | 155MB |
| hello-world | latest | bf756fb1ae65 | 3 months ago | 13.3kB |

运行新镜像时,使用 -p 标志设置外部和内部网络端口,使用 -d 标志使容器在后台运行:

docker run -d -p 80:80 etopian/alpine-php-wordpress

使用 docker ps 命令查看正在运行的容器:

docker ps

输出示例:
| CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
| ------------ | ---------------------------- | --------- | ------------- | ------------ | -------------------- | ----------------- |
| 923958867c3d | etopian/alpine-php-wordpress | “/run.sh” | 8 seconds ago | Up 8 seconds | 0.0.0.0:80->80/tcp | competent_rosalind |

1.5 获取容器IP地址

使用 docker exec 命令在容器内运行 ip addr 命令获取容器的IP地址:

docker exec competent_rosalind ip a

假设获取到的IP地址是 172.17.0.2 ,可以使用 curl 命令访问该地址:

curl 172.17.0.2

1.6 停止容器

使用 docker kill 命令停止容器:

docker kill competent_rosalind

1.7 使用Dockerfile构建镜像

以下是一个Dockerfile示例,用于拉取Ubuntu 20.04镜像,运行脚本,安装Apache2 web服务器,添加 index.html 文件:

FROM ubuntu:20.04
ADD script.sh /script.sh
RUN /script.sh
RUN apt-get update
RUN apt-get install -y apache2
ADD index.html /var/www/html/
CMD /usr/sbin/apache2ctl -D FOREGROUND
EXPOSE 80
1.7.1 创建脚本文件 script.sh
#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y tzdata
ln -fs /usr/share/zoneinfo/America/Boston /etc/localtime
dpkg-reconfigure --frontend noninteractive tzdata

设置脚本的可执行权限:

chmod +x script.sh
1.7.2 创建 index.html 文件
Hello. Welcome to my site.
1.7.3 构建和运行镜像
docker build -t webserver .
docker run -d webserver

使用 curl 命令访问容器的IP地址:

curl 172.17.0.2

1.8 查看网络和存储信息

查看Docker网络信息:

docker network inspect bridge

查看Docker存储卷信息:

docker volume ls

输出示例:
| DRIVER | VOLUME NAME |
| ------- | ------------------------------------------------- |
| local | 0ee427945f43254a1157ec9c4cce76012e32c945bf7a697a6ec40db903bfb2f0 |
| local | 7f827217d873ccfe4dd6dfab73441558ae35cfdd9c4745242ed6e4887cae840b |
| local | 19eb5f4b43d9566901e2591809449e0a434ed7fb25f89c0698227a676a1703eb |
| local | 86bd1a67b9af07d897e77189bc9205493f18523c2e0977322fc48897c151322c |
| local | 6001919bafa14eccc5bc21285f99d3ac4c75bf665cb47bf095d37a145fae904f |
| local | ad306d2ca91657d10517bf95d497c0e85aadbbd4caea0a577998ce1f31ac1c9d |

1.9 分享和协作镜像

使用 docker login 命令登录Docker Hub:

docker login

登录后,为镜像添加标签并推送到注册表:

docker tag webserver bootstrap-repo/webserver
docker push bootstrap-repo/webserver

2. 使用cloud-init在云中运行Linux

2.1 云平台概述

云平台可以快速高效地启动新虚拟机,无需每次都进行完整的安装过程。公共云(如Amazon EC2)允许选择运行不同Linux发行版的实例,这些实例针对不同的应用场景进行了优化。

2.2 云初始化数据

在云环境中设置Linux实例时,通常需要添加配置信息,这些信息分为元数据(meta-data)和用户数据(user-data):
- 元数据 :包含镜像启动前所需的信息,通常由云提供商管理,用于告知云提供商在启动实例时分配多少资源。
- 用户数据 :由虚拟机所有者提供,可包括用户账户和密码、配置文件、要安装的软件包、首次启动时要运行的命令等。

2.3 云类型

云分为公共云、私有云和混合云:
- 公共云 :如Amazon EC2和Google Compute Engine,通过API接口或浏览器管理控制台启动和使用Linux虚拟机,按使用时间和资源付费,无需购买和维护自己的云基础设施。
- 私有云 :需要自己搭建计算基础设施,前期成本较高,但可能提供更高的安全性和对计算资源的控制。
- 混合云 :允许通过中央设施管理多个云平台,在高峰需求时可将虚拟机分配到不同的云平台。

2.4 cloud-init工作原理

cloud-init支持数据源(datasources)的概念,通过将用户数据和元数据放在数据源中,无需手动将这些信息注入云实例。对于Amazon EC2云,cloud-init会查询特定的IP地址(http://169.254.169.254/)获取数据。

2.5 配置工具支持

cloud-init支持配置工具,如Puppet和Chef,可用于应用配置信息脚本,对云实例进行更复杂的配置。

以下是一个简单的mermaid流程图,展示了使用cloud-init在云中运行Linux的基本流程:

graph LR
    A[选择云平台] --> B[选择Linux实例]
    B --> C[添加元数据和用户数据]
    C --> D[使用cloud-init启动实例]
    D --> E[实例运行]

3. 企业中容器的使用

虽然像 docker lxc 这样的命令行工具适合管理单个容器,但Kubernetes提供了一个在大型数据中心部署大型复杂应用程序的平台。

4. 总结与练习

4.1 总结

容器化应用在过去几年中得到了广泛应用,Docker等工具极大地简化了单个应用的容器化和在单系统上的运行。本文介绍了如何使用 docker 等命令行工具拉取、运行、构建和管理容器,以及如何使用 cloud-init 在云中运行Linux。

4.2 练习

以下是一些与容器操作相关的练习:
1. 在你的机器上安装LXD并准备好环境。
2. 向LXD环境中添加Ubuntu 18.04镜像,并将其作为名为 ubuntu-18 的容器启动。
3. 在运行的LXD容器内打开交互式shell。
4. 获取当前系统上所有LXD容器使用的IP地址。
5. 在你的Ubuntu机器上安装Docker社区版。
6. 编写一个非常简单的Dockerfile,使用Alpine Linux的WordPress镜像作为基础,并在 /var/ 目录中包含一个名为 stats.csv 的本地文件。
7. 证明 stats.csv 文件已正确放置在Alpine容器的相应位置。

4.3 操作步骤示例

以安装Docker社区版为例,操作步骤如下:
1. 打开终端。
2. 输入以下命令进行安装:

apt install docker.io
  1. 为避免每次使用Docker命令都加 sudo ,将你的Linux账户用户名添加到 /etc/group 文件中的 docker:x:117: 行。例如,假设用户名是 steve ,修改后如下:
docker:x:117:steve
  1. 注意冒号和用户名之间不能有空格,修改后注销并重新登录使更改生效。

以下是一个表格,总结了不同云类型的特点:
| 云类型 | 优点 | 缺点 |
| ---- | ---- | ---- |
| 公共云 | 无需购买和维护自己的云基础设施,按使用付费 | 对计算资源的控制有限 |
| 私有云 | 提供更高的安全性和对计算资源的控制 | 前期成本高,需要自己搭建和维护基础设施 |
| 混合云 | 可通过中央设施管理多个云平台,灵活分配资源 | 管理复杂度较高 |

以下是一个mermaid流程图,展示了Docker容器部署的主要步骤:

graph LR
    A[安装Docker] --> B[拉取镜像]
    B --> C[运行容器]
    C --> D[管理容器(如停止、查看状态等)]
    D --> E[构建自定义镜像(使用Dockerfile)]
    E --> F[分享和协作镜像]

通过以上内容,你可以更深入地了解容器部署和云环境中Linux的运行,掌握相关的操作技能和概念。希望这些知识能帮助你在实际应用中更好地使用容器和云技术。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值