《云计算技术》实验-Docker部署

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 安装Docker(Linux)部署一个简单的Python应用部署c++应用

安装Docker(Linux)

运行以下命令安装docker

sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt install docker-ce

查看是否安装成功:

docker --version

运行Hello World

为了测试Docker是否能正常使用,我们先拉取(pull)一个hello-world镜像运行。

输入命令:

docker run hello-world

若Docker安装成功,则会输出下图所示信息。

从输出信息可以了解到,Docker未能在本地找到hello-world镜像后,在Docker Hub中拉取(pull)了hello-world的最新镜像,并创建了容器,在容器中运行程序,产生输出。

部署一个简单的Python应用

第一步:创建一个自定义的镜像

在本地建立一个命名为“Dockerfile.txt”的文件。输入如下命令。

# Use an official Python runtime as a parent image
FROM python:3.7-alpine
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]

第二步:建立应用程序文件app.py和文本文件requirements.txt

app.py文件、requirements.txt文件应该与Dockerfile.txt文件放在同一个文件夹下。

以下是app.py这个python源代码文件的内容

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2,
socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"
    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), 
hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

上述代码输出环境变量NAME,并通过调用socket.gethostname()获取当前主机的hostname。

以下是 requirements.txt 这个文件的内容

Flask
Redis

Flask 和 Redis 都是在requirements.txt 文件中指定的python的包,docker会按照requirements.txt中的内容下载必要的python包。

理解Dokerfile文件

•FROM命令指定了基础镜像。
•WORKDIR命令配置了工作目录。
•ADD命令会将app.py拷贝到容器中。
•RUN pip install -r requirements.txt命令导入了Python的Flask和Redis标准库。
•EXPOSE命令指定容器需要映射到宿主机器的端口。
•ENV命令用于设置环境变量。
•CMD用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。
该指令只能在文件中存在一次,如果有多个,则只执行最后一条。

第三步:构建应用

输入如下命令:

docker build -t docker-whale -f ./Dockerfile.txt .

注意在上述命令行的最后,有一个英文句点,不要遗漏。

其中,-t指定了生成镜像的仓库名,-f指定Dockerfile文本文件。

通过 docker image ls 命令可以查看本地的所有镜像。可以看到刚刚创建的自定义镜像docker-whale。

第四步:运行应用

注意:如果在阿里云ECS上安装部署这个docker应用,在自己的个人电脑上使用浏览器访问这个docker应用的话,还需要去ECS的安全配置中打开4000端口方能访问,否则无法看到下述效果。

1) 启动容器实例运行应用

输入如下命令:

docker run -p 4000:80 docker-whale

其中,-p将容器的端口号80映射到宿主机器的端口号4000,从而使得app.py的程序输出可以通过HTTP协议输出到浏览器。

2) 访问容器实例,查看运行结果

在浏览器中输入URL:http://a.b.c.d:4000 即可看到应用的输出结果。其中a.b.c.d是部署了docker应用的主机ip地址。

注意:如果在阿里云ECS主机上部署并启动容器实例,可以开启第二个终端窗口连接阿里云ECS主机。

随后在命令行执行:

curl  localhost:4000

即可看到类似如下的输出:

<h3>Hello World!</h3><b>Hostname:</b> dbc3d903eca0<br/>
<b>Visits:</b> <i>cannot connect to Redis, counter d

部署c++应用

将C/C++代码运行在容器内的最简方法,就是将编译指令写入Dockerfile 中,然后使用此Dockerfile构建自定义镜像,最后直接运行此镜像,即可启动程序。

FROM gcc:4.9
# Set the working directory to /myapp
WORKDIR /myapp
# Copy the current directory contents into the container at /myapp
ADD . /myapp
# Make port 80 available to the world outside this container
EXPOSE 80
RUN gcc -o myapp main.c 
# Run app.py when the container launches
CMD ["./myapp"]

编辑main.c,内容如下:

#include<stdio.h> 
int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
}

现在,就可以使用Dockerfile来构建镜像my-gcc-app:

docker build -t gcc-image . -f Dockerfile.txt

创建并运行此容器,会编译并运行程序,输出Hello World语句。

docker run -it --rm --name gcc-container gcc-image

Hello World

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
1天前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
19天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
44 4
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
72 12
|
1月前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
29 6
|
1月前
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
1月前
|
监控 安全 网络安全
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
|
1月前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
70 4
|
1月前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
随着云计算技术的飞速发展,越来越多的企业和个人开始使用云服务。然而,云计算的广泛应用也带来了一系列网络安全问题。本文将从云服务、网络安全、信息安全等方面探讨云计算与网络安全的关系,分析当前面临的挑战,并提出相应的解决方案。
67 3