云原生技术系列:Docker 容器应用示例

发布于:2022-12-13 ⋅ 阅读:(523) ⋅ 点赞:(0)

导言:

之前在文章《云原生核心技术之:容器 | Docker》中梳理了容器技术产生的背景、Docker技术简介。其实 Docker 技术的实际应用也很简单,今天这篇文章便用一个 python 环境 “hello world!” 服务来进行示例。相应的,迁移到生产环境的Python、C++、Java、Go 等环境应用也大致如此。


1、创建一个简单的 “Hello world” python 应用

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!\n'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

2、为镜像创建 Dockerfile

# 使用官方提供的 Python3 开发镜像作为基础镜像
FROM python:3

# 将工作目录切换至 /usr/src/app
WORKDIR /usr/src/app

# 使用 pip3 命令安装这个应用所需要的依赖
RUN pip3 install  --trusted-host pypi.python.org  Flask

# 将当前目录下的所有文件复制到 /usr/src/app
COPY . .

# 允许外界访问容器的80端口
EXPOSE 80

# 设置此应用的启动命令为python3 ./helloworld.py
CMD [ "python3", "./helloworld.py" ]

3、构建容器镜像

# docker build -t helloworld . 

基于当前目录(注意命令结尾的点)构建一个叫 helloworld 的镜像, Docker 会在目录中 寻找 Dockerfile, 然后基于其中的指令构建镜像。

查看本地的镜像

# docker images | grep helloworld 

REPOSITORY  TAG     IMAGE ID      CREATED       SIZE
helloworld  latest  094719b43011  4 hours ago   928MB

4、运行容器镜像

# docker run --name helloworld-container -p 3000:80 -d helloworld

基于 helloworld 镜像创建一个叫 helloworld-container 的新容器。这个容器与命令行分离 (-d标志),意味着在后台运行。本机上的3000端口会被映射到容器内的80端口(-p 3000:80)

测试

# curl localhost:3000/
Hello World!

列出运行中的容器

# docker ps 
# docker ps -a  查看所有容器,包括停止的

获取更多容器信息

# docker inspect helloworld-container

在容器内部运行 shell

# docker exec -it helloworld-container bash
root@9cbc6114f488:/usr/src/app# 

在运行中的 helloworld-container 容器内部运行bash

  • -i,确保标准输入流保待开放。需要在 shell 中输入命令。
  • -t,分配一个伪终端(TTY) 。

在容器中列出进程
在容器内部运行 shell

root@9cbc6114f488:/usr/src/app# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.6 107116 24212 ?        Ss   12:06   0:00 python3 ./helloworld.py
root         9  0.0  0.0   5976  2076 pts/0    Ss   12:22   0:00 bash
root        16  0.0  0.0   8576  1628 pts/0    R+   12:27   0:00 ps aux

5、停止和删除容器

停止容器

# docker stop helloworld-container

删除容器

# docker rm helloworld-container

6、向镜像仓库推送镜像

为了在任何机器上都可以使用,把镜像推送到一个外部的镜像仓库(可以选择 Docker Hub http://hub.docker.com)作为公共的镜像中心。

在推送之前, 需要重新根据 Docker Hub 的规则标注镜像。 Docker Hub 允许向以自己的 Docker Hub ID 开头的镜像仓库推送镜像。 可以在 http://hub.docker.com 上注 册 Docker Hub ID。

# docker tag helloworld:latest yaocoder/helloworld

向 Docker Hub 推送镜像

# docker push yaocoder/helloworld

dockerhub.png

7、在其他机器上运行镜像

docker run -p 3000:80 yaocoder/helloworld

 

Dockerfile命令

一、编写Dockerfile的常用命令简介

命令 描述
FROM 基于哪个镜像来实现
MAINTAINER 镜像创建者
ENV 声明环境变量
RUN 执行命令
ADD 添加宿主机文件到容器里,有需要解压的文件会自动解压
COPY 添加宿主机文件到容器里
WORKDIR 工作目录
EXPOSE 容器内应用可使用的端口
CMD 容器启动时执行的命令,如果执行 docker run <启动命令> CMD 会被覆盖
ENTRYPOINT 与 CMD 功能基本等同,但执行 docker run <启动命令> 不会覆盖,如果需要覆盖可以增加参数 -entrypoint
VOLUME 数据卷,将宿主机的目录映射到容器中的目录

链接:《命令详细介绍》


附:

希望大家关注我更新维护的 GitHub 开源项目,
https://github.com/yaocoder/Architect-CTO-growth
包括技术实践及手册撰写:涵盖DevOps,云原生技术,大数据,人工智能,高并发&高性能&高可用服务等,一起学习成长!如果对你有用,也请星标一下O(∩_∩)O


网站公告

今日签到

点亮在社区的每一天
去签到