栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Docker基础内容

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker基础内容

概念​

Image:类似于虚拟机,里面构建了程序运行的基础环境

Container:基于image实现的实例化对象,具有特定功能​

 

相关文档

Docker官方文档: https://docs.docker.com/

Image指令:https://docs.docker.com/engine/reference/commandline/image/

Container指令:https://docs.docker.com/engine/reference/commandline/container/

你确定你会写 Dockerfile 吗?(知乎):https://zhuanlan.zhihu.com/p/72970159

​

配置文件Dockerfile

​FROM​

FROM指令的功能是为后面的指令提供基础镜像,因此Dockerfile必须以FROM指令作为第一条非注释指令。从公共镜像库中拉取镜像很容易,基础镜像可以选择任何有效的镜像。 在一个Dockerfile中FROM指令可以出现多次,这样会构建多个镜像。tag的默认值是latest,如果参数image或者tag指定的镜像不存在,则返回错误。​

FROM [ |:]​

选择基础镜像时,尽量选择当前官方镜像库的肩宽,不同镜像的大小不同,目前Linux镜像大小由如下关系:​

镜像大小:busybox < debian < centos < ubuntu​

同时在构建自己的Docker镜像时,只安装和更新必须使用的包。此外相比Ubuntu镜像,更推荐使用Debian镜像,因为它非常轻量级(目前其大小是在100MB以下),并且仍然是一个完整的发布版本。​

WORKDIR​

WORKDIR指令设置工作目录,它之后的RUN、CMD、ENTRYPOINT、COPY以及ADD指令都会在这个工作目录下运行。如果这个工作目录不存在,则会自动创建一个。​

WORKDIR [path]​

ADD/COPY​

复制本地文件到镜像的功能,但ADD指令还支持网络url​

ADD/COPY ​

当拷贝文件到镜像中时,尽量只拷贝需要的文件,切忌使用 COPY . 指令拷贝整个目录。如果被拷贝的文件内容发生了更改,缓存就会被破坏。​

RUN

RUN可用于在容器中执行系统指令,然而每一个 RUN 指令都会被看作是可缓存的执行单元。太多的 RUN 指令会增加镜像的层数,增大镜像体积,而将所有的命令都放到同一个 RUN 指令中又会破坏缓存,从而延缓开发周期。在使用较长的RUN指令时可以使用反斜杠分隔多行。

RUN ​

当使用包管理器安装软件时,一般都会先更新软件索引信息,然后再安装软件。推荐将更新索引和安装软件放在同一个 RUN 指令中,这样可以形成一个可缓存的执行单元,否则你可能会安装旧的软件包。​

不要在一行中单独使用指令RUN apt-get update。当软件源更新后,这样做会引起缓存问题,导致RUN apt-get install指令运行失败。所以,RUN apt-get update和RUN apt-get install应该写在同一行。比如 RUN apt-get update && apt-get install -y package-1 package-2 package-3​

#生成2层容器
RUN apt-get update
RUN apt-get install XX

#仅生成一层容器
RUN apt-get update\
&&apt-get install XX

​避免使用指令RUN apt-get upgrade 和 RUN apt-get dist-upgrade。因为在一个无特权的容器中,一些必要的包会更新失败。如果需要更新一个包(如package-1),直接使用命令RUN apt-get install -y package-1。​

CMD​

CMD指令在构建镜像时并不执行任何命令,而是在容器启动时默认将CMD指令作为第一条执行的命令。​

CMD ​

EXPOSE​

EXPOSE指令通知Docker该容器在运行时侦听指定的网络端口。可以指定端口是侦听TCP还是UDP,如果未指定协议,则默认值为TCP。 这个指令仅仅是声明容器打算使用什么端口而已,并不会自动在宿主机进行端口映射,可以在运行的时候通过docker -p指定。​

EXPOSE

使用Dockerfile的EXPOSE指令,虽然可以将容器端口映射在主机端口上,但会破坏Docker的可移植性,且这样的镜像在一台主机上只能启动一个容器。所以端口映射应在docker run命令中用-p 参数指定。

# 不要再Dockerfile中做如下映射
EXPOSE 80:8080

​Dockerfile

# Use an official Python runtime as a parent image
FROM debian

# Set the working directory to /app
WORKDIR /docker/my_test

ADD . /docker/my_test

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requires.txt

EXPOSE 80

# Run app.py when the container launches
CMD ["python", "app.py"]

​创建指令​

#创建镜像
docker build -t [name:tag] -f [path] .

#读取镜像
docker load -i [path]

docker build [OPTIONS] [path] .
docker build -t [image_name]:[tag] -f [path] .
#从url拉取镜像
docker build [url]

OPTIONS:
-t [image_name]:[tag],指定image别名
-f [path],指定Dockerfile的位置

​存储和读取​

#从文件读取镜像
docker load -i [path]
#保存镜像到文件
docker save -o [path] [image]:[tag]

​查看指令​

#查看container相关的ip和端口
docker port [container]

#查看container的具体信息
docker network inspect bridge

#查看container列表
docker ps

​修改指令​

#修改image的名称和版本
docker tag [image id] [name]:[tag]

删除指令​

docker [image|container] rm -f [id|name]

​运行指令​

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#停止容器
docker stop [name]
#启动容器
docker start [name]
OPTIONS:

-**P:** 随机端口映射,容器内部端口**随机**映射到主机的端口

-**p:** 指定端口映射,格式为:**主机(宿主)端口:容器端口**

—**name="nginx-lb":** 为容器指定一个名称;

-**m :**设置容器使用内存最大值;

docker run -v /home/bx_admin/jenkins_work/test:/usr/src/python -w /usr/src/python python:3.5 python test.py

命令说明: docker run 创建容器

-v [local_dir]:[container_dir]

将主机中/home/bx_admin/jenkins_work/test目录挂载到容器的/usr/src/python

-w [container_dir]

指定容器的/usr/src/python目录为工作目录

python:3.5 是镜像

python test.py 是命令执行test.py脚本,test脚本理应在build时加入到image的文件中

PS:当执行test.py的时候python程序是在容器内运行,所以需要设置容器的工作目录workdir

​清除指令​

#杀死所有正在运行的容器
docker kill $(docker ps -a -q)
#删除所有已经停止的容器
docker rm $(docker ps -a -q)
#删除所有镜像
docker rmi $(docker images -q)

​

​

​

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号