1 目标:

创建一个自定义的Image,在该Image中,包含一个自己的Python程序,通过docker运行该Image 容器,并执行我们自己的Python程序,通过添加数据卷,在本机能够查看Python的执行结果.

2 创建Dockerfile

创建自定义Image,需要定义一个Dockerfile.

2.1 Dockerfile语法规则

8 使用Dockerfile创建镜像

dockerfile:文本格式的配置文件

可以使用dockerfile创建自定义的镜像

8.1 基本结构

四部分

基础镜像信息:FROM centos  基于的基础镜像

维护者信息:MAINTAINER docker_user docker_user@email.com

镜像操作指令

Run echo "test"

apt/sources.list

RUN apt-get update && apt-get install -y nginx

RUN echo "test"

Run指令:

将对镜像执行跟随的命令

没运行一条Run命令,镜像添加新的一层并天骄

容器启动时执行指令

CMD /usr/sbin/nginx

8.2 指令

一般格式

INSTRUCTION arguments

FROM

MAINTAINER

RUN

指令

1 FROM

2 MAINTAINER

3 RUN

格式

RUN <command>:在shell终端中运行命令

RUN ["executable", "param1", "param2"]:exec执行

\:换行

4 CMD

格式

CMD ["executable", "param1", "param2"]:exec执行

CMD command param1 param2:bin/sh执行

CMD ["param1", "param2"]:ENTRYPOINT的默认参数

每个Dockfile只能有一条CMD命令

5 EXPOSE

格式

EXPOSE  <port> [<port>...]

功能

告诉docker服务端容器暴露的端口号,供互联系统使用

EXPOSE 22 80 8443

在启动容器时, 需要通过-P或-p分配

6 ENV

格式

ENV <key> <value>

功能

指定环境变量

会被后续RUN指令使用

在容器运行时保持

ENV PG_MAJOR 9.3

7 ADD

格式

ADD <src> <dest>

功能

将复制指定的<src>到容器中的<dest>

<src>

可以是Dockerfile所在目录的一个相对路径(文件或目录)

可以是一个URL

可以是一个tar文件

自动解压为目录

8 COPY

格式

COPY <src> <dest>

功能

复制本地主机<src>为容器中的<dest>

目标路径不存在时, 推荐使用COPY

9 ENTRYPOINT

格式

ENTRYPOINT ["executable", "param1", "param2"]

ENTRYPOINT command param1 param2:shell中执行

功能

配置容器启动后执行的命令

不可被docker run 提供的参数覆盖

每个Dockerfile中只能有一个ENTRYPOINT

指定多个时,只有最后一个有效

10 VOLUME

格式

VOLUM ["/data"]

功能

创建一个可以从本地主机或其他容器挂载的挂在店

一般用来存放数据库和需要保持的数据等

11 USER

格式

USER daemon

功能

指定运行容器时的用户名或UID

12 WORKDIR

格式

WORKDIR /path/to/workdir

功能

为后续的RUN,CMD, ENTRYPOINT指令配置工作目录

可以使用多个WORKDIR指令

如果参数是相对路径,则会基于之前命令指定的路径

13 ONBUILD

格式

ONBUILD [INSTRUCTION]

功能

配置当前所创建的镜像作为其他新创建镜像的基础镜像时, 所执行的操作指令

8.3 创建镜像

格式

docker build [选项] 路径

将该路径下所有内容发送给Docker服务端

将读取指定路径下(包括子目录)的Dockerfile

服务端创建镜像

建议Dockerfile的目录为空目录

.dockerignore:忽略路径下的目录和文件

-t:指定标签信息

2.2 Dockerfile案例

下面是我创建的一个Dockerfile, 文件名称就是Dockerfile:

# centos: 该处表明,这个Dockerfile的基础镜像为centos:lastest

# 如果你是在离线的环境下,要确保centos:lastest已经pull到本地,这样build的时候就不需要网络了.

#将Image pull到本地,应该用Docker的代理.我尝试过下载离线的Image,没有成功

FROM centos:latest

#此处是创建者信息

MAINTAINER User <email@email.com>

#将本机当前目录下的文件拷贝到容器的/home/pythonapp下

# 注: 使用当前目录不是很好,因为当前目录包含Dockerfile,会将这个文件也拷贝进去.

# 我的当前目录下包含的文件有: Compare.py, Compare.txt

# Compare.py会根据Compare.txt的内容,生成新的文件,并拷贝到output的dst.txt文件中

COPY . /home/pythonapp

#在离线的情况下,该句会导致build Image失败

# centos的image中预装了python

#RUN yum install -y python2.7

CMD ["bash"]

3 Build Dockerfile

3.1 Build

在Dockerfile的目录下,运行下面的语句,创建新的Image

[root@localhost python]# sudo docker build -t matthewx:python-matthew /home/jenkins/Dockerfile/python

3.2 查看Image

[root@localhost python]# docker images

REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE

matthewx                python-matth        3ccb7748fa38        6 seconds ago       192.5 MB

4运行容器

4.1 运行新构建的Image

[root@localhost python]# docker run -idt --name python_app_test -v /home/jenkins/Dockerfile/python/output:/home/pythonapp/output  3ccb7748fa38

其中/home/jenkins/Dockerfile/python/output为本机目录, /home/pythonapp/output为Docker容器中的目录.该语句创建一个数据卷.

4.2 查看容器

[root@localhost python]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

9a8ae7fae406        3ccb7748fa38        "bash"              13 seconds ago      Up 12 seconds                           python_app_test

4.3 进入容器

[root@localhost python]#docker attach python_app_test

# 进入容器:

[root@localhost python]# docker attach python_app_test

[root@9a8ae7fae406 /]# cd /home/

[root@9a8ae7fae406 home]# ls

pythonapp

[root@9a8ae7fae406 home]# cd pythonapp/

[root@9a8ae7fae406 pythonapp]# ls

Compare.py  Compare.txt  Dockerfile  dst.txt  output

[root@9a8ae7fae406 pythonapp]# python Compare.py

# 退出容器

[root@9a8ae7fae406 pythonapp]# exit

Exit

4.4 查看数据卷

# 在本机目录创建了output文件夹

[root@localhost python]# ls

Compare.py  Compare.txt  Dockerfile  dst.txt  output

[root@localhost python]# cd output/

# dst.txt为新建的文件夹

[root@localhost output]# ls

dst.txt

Docker实践:创建并运行一个自定义的Docker Image的更多相关文章

  1. Laravel 从入门到精通 创建并运行一个新的 Laravel 项目

    创建一个新的 Laravel 项目 正如官方文档所言,有两种方式可以创建一个新的 Laravel 项目,这两种创建方式都是从命令行执行的:第一种是通过全局的 Laravel 安装器,另一种是通过 Co ...

  2. 使用PyCharm创建并运行一个Python项目

    (1)首先,在欢迎界面点击“Create New Project”: (2)在“New Project“左侧面板点击”Pure Python“,右侧Location选择自己要创建项目的路径(一般情况, ...

  3. Python中subprocess 模块 创建并运行一个进程

     python的subprocess模块,看到官方声明里说要尽力避免使用shell=True这个参数,于是测试了一下: from subprocess import call import shlex ...

  4. DokcerFile的添加及如何生成一个自定义镜像mycentos(四)

    最近在学习Docker,用commit去生成一个镜像,但是生成后的镜像非常臃肿,所以去学习了一下DockerFile. 前提条件: 已在虚拟机中成功安装Docker 简单的理解可以如下图所示: Doc ...

  5. centos7下安装docker(8.1运行容器)

    从今天开始学习docker container 1.docker run 之前我们在学习制作镜像以及制作私有仓库的时候已经用到docker run -it以及docker run -d来临时运行一个容 ...

  6. Docker源码分析(二):Docker Client创建与命令执行

    1. 前言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖.便捷的软件集成测试与部署之道.在团队开发软件时,Docker可以提供可复用的运行环境.灵活的资源配置. ...

  7. docker快速创建轻量级的可移植的容器(一)

    系列其他内容 docker快速创建轻量级的可移植的容器✓ docker&flask快速构建服务接口 docker&uwsgi高性能WSGI服务器生产部署必备 docker&gu ...

  8. 以Docker容器的形式运行GVM-11

    OpenVAS(Open Vulnerability Assessment System)是在nessus基础上发展起来的一个开源的漏洞扫描程序,其核心部件是一套漏洞测试程序,可以检测远程系统和应用程 ...

  9. 如何创建并运行java线程

    本文转载地址:            http://ifeve.com/creating-and-starting-java-threads/ Java线程类也是一个object类,它的实例都继承自j ...

  10. Java并发编程(二)-- 创建、运行线程

    Java线程 Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类. Java可以用如下方式创建一个线程: Tread thread = new Thread ...

随机推荐

  1. Taro首个支持鸿蒙的 UI 库,同时还兼容 React Native、小程序、H5

    Taro 4.0 已经推出一段时间了,4.0 版本主要是支持了鸿蒙端的开发以及 Vite 编译工具的支持.duxapp 在这段时间也跟随 Taro 的脚步,实现的对鸿蒙端的支持,并且也将之前的 dux ...

  2. 7、listener监听

    启动远程图形界面登录的工具 [root@db11g ~]# vncserver 监听 监听的启动 [oracle@db11g ~]$ lsnrctl start 判断监听是否启动 [oracle@db ...

  3. python3的json数据库-TinyDB效率篇

    安装了这个TinyDB库后,我突然想到一般来说python执行的速度并不算高,那这个库写文件速度如何呢? 测试代码如下: from tinydb import TinyDB import time # ...

  4. MySQL注入之Fuzz测试&Bypass WAF小结

    目录 BurpSuite Fuzz测试 内联注释 绕过union[]select联合查询 绕过敏感函数 绕过from[]information_schema查表 报错注入示例 常规绕过思路总结 空格绕 ...

  5. apache+jk+tomcat集群+session同步

    apache2+tomcat5.5集群+session同步 作者:刘宇 liuyu.blog.51cto.com msn群:mgroup49073@hotmail.com (linuxtone)   ...

  6. MySQL8.0之特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能.下面我们将简要介绍下 MySQL 8.0 中值得关注的 ...

  7. 19号CSS学习

    一.CSS的复合选择器 更高效的选择目标元素. 后代选择器.子选择器.并集选择器.伪类选择器等. 1.后代选择器 可以选择父元素里的子元素. 又称包含选择器. 必须是空格,必须是后代,ul li {c ...

  8. [原创] Realtek RTL8195A WIFI历史漏洞分析和新漏洞挖掘

    前言 本文主要分析vdoo发现的一些RTL8195A WIFI模块的漏洞. 环境搭建 下载最新的SDK https://github.com/ambiot/amb1_arduino/blob/mast ...

  9. Scratch列表的知识与应用

    列表及应用1 列表及应用2 练习题1

  10. apache kylin的一些注意事项(解决kylin报错Storage schema reading not supported)

    1.目前我所使用的kylin版本为2.6.2,有时在完成一次构建后会出现fail to locate kylin.properties的异常,如图所示 经排查,定位到kylin源码中的 org.apa ...