翔云

Just try, don't shy. 最新文章请点击
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

制作docker映像(一)--python应用程序

Posted on 2020-02-15 21:17  翔云123456  阅读(265)  评论(0编辑  收藏  举报

本文以简单Python应用为例,介绍docker映像制作。

1.创建Dockerfile

工程目录结构如下:

[lanyang@localhost docker_demo]$ mkdir -p myapp
[lanyang@localhost docker_demo]$ cd myapp/
[lanyang@localhost myapp]$ ll
total 8
-rw-rw-r--. 1 lanyang lanyang 108 Feb 15 16:30 Dockerfile
-rw-rw-r--. 1 lanyang lanyang  34 Feb 15 16:20 say_hello.py

Dockerfile文件内容如下:

FROM python:3.6.4
RUN mkdir -p /opt/app/myapp
WORKDIR /opt/app/myapp
COPY say_hello.py .
CMD python say_hello.py

FROM 基础映像,定制映像都是基于基础映像。会从远程仓库拉取。

RUN 在Docker 编译环境中执行指定的命令。

WORKDIR 指定工作目录。docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

COPY 从上下文目录中复制文件到容器的指定目录。say_hello.py内容见下文。

CMD 指定容器默认的执行命令。Dockerfile只允许指定一次CMD命令,如果使用多个CMD会覆盖之前的所有的指令,只有最后一个指令生效。一般来说,这是Dockerfile的最后一条指令。
另外,docker run会覆盖CMD命令。

CMDRUN的区别是:RUN只在创建映像时执行一次,先于CMD

CMD会在每次启动容器时执行的。
这里,执行python脚本。

say_hello.py文件

文件内容如下:

print("Hello python from Docker!")

2.构建映像

接着,使用上面创建的Dockerfile构建映像。

命令如下:

[lanyang@localhost myapp]$ docker build -t myapp .
Sending build context to Docker daemon  3.072kB
Step 1/5 : FROM python:3.6.4
 ---> 07d72c0beb99
Step 2/5 : RUN mkdir -p /opt/app/myapp
 ---> Using cache
 ---> 69bfc2675907
Step 3/5 : WORKDIR /opt/app/myapp
 ---> Using cache
 ---> 809c8f410c2b
Step 4/5 : COPY say_hello.py .
 ---> cfa9e03f91bf
Step 5/5 : CMD python say_hello.py
 ---> Running in 5e7fd488c6b9
Removing intermediate container 5e7fd488c6b9
 ---> 61dbd13df63f
Successfully built 61dbd13df63f
Successfully tagged myapp:latest

其中,

-t 给构建映像打标签,标签格式name:tag, 这里name指定为myapp。tag不指定,会使用默认latest

. 上下文路径,会将路径下的所有文件打包到docker映像。
如果没有指定,那么默认上下文路径就是 Dockerfile 所在的位置。

3.测试映像

使用上面常见的映像启动一个容器:

[lanyang@localhost myapp]$ docker run -d --name myapp-test1 myapp
a0a6e7d7f6df5abcb16f5ecc70bc43cef0b2dc9d75222fbeaa1fcf08288b1cd2

其中,
myapp是映像名称。

-d 表示后台运行容器, 并打印container id。

--name 指定容器名称, 这里为myapp-test1

查看容器是否启动

[lanyang@localhost myapp]$ docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

这里容器启动后,只打印一条日志,就退出了。
执行查看命令要迅速。

查看容器输出结果

[lanyang@localhost myapp]$ docker logs myapp-test1
Hell world from Docker!

容器创建后,可以使用docker start启动容器, 并使用-i参数,让容器直接输出到当前终端:

[lanyang@localhost ~]$ docker start myapp-test1 -i
Hell python from Docker!
[lanyang@localhost ~]$ 

4.参考

Docker Hub