干货分享: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 容器应用示例的主要内容,如果未能解决你的问题,请参考以下文章

干货分享,Docker+K8S入门必备

干货Docker的安装镜像及容器容器

#yyds干货盘点# Docker 安装与启动

原创 | Docker入门基础系列之详谈Docker的容器Container

技术干货 | Docker容器中需要避免的十种常见误区

干货2017年1月3日 阿里云内部技术文章分享