干货分享:Docker 容器应用示例
Posted 一个叫大姚的工程师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货分享:Docker 容器应用示例相关的知识,希望对你有一定的参考价值。
导言:
之前在文章《云原生核心技术之:容器 | 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
# docker exec -it helloworld-container bash
root@9cbc6114f488:/usr/src/app#
在运行中的 helloworld-container 容器内部运行bash
- -i,确保标准输入流保待开放。需要在 shell 中输入命令。
- -t,分配一个伪终端(TTY) 。
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 tag helloworld:latest yaocoder/helloworld
# docker push yaocoder/helloworld
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
以上是关于干货分享:Docker 容器应用示例的主要内容,如果未能解决你的问题,请参考以下文章