标签:容器 RUN Doc 基础知识 整理 镜像 docker Dockerfile Docker
Docker随笔
Docker简介
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器,基于go语言开发。Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作。
Docker基本组成
Docker基本组成主要有以下
- 镜像(Image) --> 一个特殊的文件系统
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
- 容器(Container) --> 镜像运行时的实体
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository)--> 集中存放镜像文件的地方
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Docker常用命令
搜索某个镜像:docker search name
获取某个镜像:docker pull name
查看镜像:docker p_w_picpaths
删除镜像:docker rmi name
创建容器:docker create # 创建一个容器但是不启动
启动容器:docker start 容器ID
停止容器:docker stop 容器ID # 停止容器运行,发送信号SIGTERM
重启容器:docker restart
查看容器:docker ps -a
杀掉容器:docker kill
连接容器:docker attach
或 docker exec
阻塞容器:docker wait
删除容器:docker rm 容器ID
(需要先停止容器)
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建。
# 示例: 利用docker build命令执行dockerfile文件
docker build -f /DockerFilePath/Dockerfile
学习Dockerfile的最好方式就是通过阅读别人写的Dockerfile,遇到不会的指令就查一查官方文档【Dockerfile reference | Docker Documentation】。
在这里,由于笔者暂时权限有限,因此列出【Dockerfile 详解_万wu皆可爱的博客-CSDN博客_dockerfile】中所构建用于制作nginx镜像的Dockerfile作为示例:
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER bertwu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
Dockerfile格式
- 指令必须要大写,而且后面必须跟参数
- 第一条指令必须是FROM,指定Base Image基础镜像
- 指令按从上往下的顺序,依次执行
- 每条指令都会创建一个新的镜像层并提交
- "#"表示注释,以#作为开头
- 如果有多个RUN,自上而下依次运行,每次运行都会形成新的层,建议&& 放入一行运行
- 如果有多个CMD,只有最后一个运行
- 如果有多个Entrypoint,只有最后一个运行
- 如果CMD和entrypoint共存,只有entrypoint运行,且最后的CMD会当做entrypoint的参数
常用指令
指令 | 含义解释 |
---|---|
FROM | 指定基础镜像,必须为第一个命令 |
MAINTAINER | 指定维护者信息 |
RUN | 指定构建过程中要运行的命令 |
ADD | 将本地文件添加到容器中 |
ENV | 设置环境变量 |
COPY | 将本地文件添加到容器中(不会自动解压文件,无法访问网络资源) |
CMD | 在容器启动时调用 |
LABEL | 为镜像添加元数据 |
镜像制作步骤
镜像制作分为两个阶段
- docker build阶段 基于dockerfile制作镜像 (RUN,用于此阶段的运行命令)
- docker run阶段 基于镜像运行容器 (CMD,基于image run容器时候,需要运行的命令)
- docker build 基于第一阶段的镜像被别人from制作新镜像 (entrypoint 或onbuild 基于镜像重新构建新镜像时候在此阶段运行的命令)
参考文献
- Dockerfile reference | Docker Documentation
- Docker Dockerfile | 菜鸟教程 (runoob.com)
- Dockerfile 详解_万wu皆可爱的博客-CSDN博客_dockerfile
标签:容器,RUN,Doc,基础知识,整理,镜像,docker,Dockerfile,Docker 来源: https://www.cnblogs.com/MrX-Blog/p/16523065.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。