Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Docker_000

Docker_000

作者头像
Cyylog
发布于 2020-08-19 02:49:32
发布于 2020-08-19 02:49:32
74700
代码可运行
举报
文章被收录于专栏:Cyylog技术Cyylog技术
运行总次数:0
代码可运行
Dockerfile构建镜像
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
通过Dockerfile创建镜像
虽然可以自己制作 rootfs('容器文件系统那些事儿'),但Docker 提供了一种更便捷的方式,叫作 Dockerfile

docker build命令用于根据给定的Dockerfile和上下文以构建Docker镜像。

docker build语法:
# docker build [OPTIONS] <PATH | URL | ->

1. 常用选项说明
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器

2. PATH | URL | -说明:
给出命令执行的上下文。
上下文可以是构建执行所在的本地路径,也可以是远程URL,如Git库、tarball或文本文件等。
如果是Git库,如https://github.com/docker/rootfs.git#container:docker,则隐含先执行git clone --depth 1 --recursive,到本地临时目录;然后再将该临时目录发送给构建进程。
构建镜像的进程中,可以通过ADD命令将上下文中的任何文件(注意文件必须在上下文中)加入到镜像中。
-表示通过STDIN给出Dockerfile或上下文。
示例:

    docker build - < Dockerfile

说明:该构建过程只有Dockerfile,没有上下文

    docker build - < context.tar.gz

说明:其中Dockerfile位于context.tar.gz的根路径

    docker build -t champagne/bbauto:latest -t champagne/bbauto:v2.1 .
    docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .


2.1、 创建镜像所在的文件夹和Dockerfile文件 
          命令: 
         1、mkdir sinatra 
         2、cd sinatra 
         3、touch Dockerfile 

2.2、 在Dockerfile文件中写入指令,每一条指令都会更新镜像的信息例如: 
         # This is a comment 
         FROM ubuntu:14.04 
         MAINTAINER tiger tiger@localhost.localdomain
         RUN apt-get update && apt-get install -y ruby ruby-dev 
         RUN gem install sinatra 
         
          格式说明: 
          每行命令都是以  INSTRUCTION statement 形式,就是命令+ 清单的模式。命令要大写,"#"是注解。 
         FROM 命令是告诉docker 我们的镜像什么。 
         MAINTAINER 是描述 镜像的创建人。 
         RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。 

 2.3、创建镜像 
          命令:docker build -t tiger/sinatra:v2 . 
         docker build  是docker创建镜像的命令 
         -t 是标识新建的镜像属于 ouruser的  
         sinatra是仓库的名称  
        :v2 是tag 
          "."是用来指明 我们的使用的Dockerfile文件当前目录的 

         详细执行过程:
        [root@master sinatra]# docker build -t tiger/sinatra:v2 . 
        Sending build context to Docker daemon 2.048 kB
        Step 1 : FROM daocloud.io/ubuntu:14.04
        Trying to pull repository daocloud.io/ubuntu ... 
        14.04: Pulling from daocloud.io/ubuntu
        f3ead5e8856b: Pull complete 
        Digest: sha256:ea2b82924b078d9c8b5d3f0db585297a5cd5b9c2f7b60258cdbf9d3b9181d828
         ---> 2ff3b426bbaa
        Step 2 : MAINTAINER tiger tiger@localhost.localdomain
         ---> Running in 948396c9edaa
         ---> 227da301bad8
        Removing intermediate container 948396c9edaa
        Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev
         ...
        Step 4 : RUN gem install sinatra
        ---> Running in 89234cb493d9

 2.4、创建完成后,从镜像创建容器 
         #docker run -t -i tiger/sinatra:v2 /bin/bash

Dockerfile分为四个部分: 基础镜像信息、维护者信息、镜像操作指令和容器启动指令。 即FROM、MAINTAINER、RUN、CMD四个部分

指令说明
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM         指定所创建镜像的基础镜像
MAINTAINER   制定维护者信息
RUN          运行命令
CMD          容器启动是默认执行的命令
LABEL        指定生成镜像的元数据标签信息
EXPOSE       声明镜像内服务所监听的端口
ENV          指定环境变量
ADD          复制指定src路径的内容到容器的dest路径下,如果src为tar文件,则自动解压到dest路径下
copy         复制指定src路径的内容到镜像的dest路径下
ENTERPOINT   指定镜像的默认入口
VOLUME       创建数据卷挂载点
USER         指定运行容器是的用户名或UID
WORKDIR      配置工作目录
ARG          指定镜像内使用的参数
ONBUILD      配置当所创建的镜像作为其他镜像的基础镜像时,所执行创建操作指令
STOPSIGAL    容器退出信号值
HEALTHCHECK  如何进行健康检查
SHELL        指定使用shell的默认shell类型
nginx-dockerfile示例

vim Dockerfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM centos:7.2.1511

ENV TZ=Asia/Shanghai

RUN yum -y install epel* \
	yum -y install gcc openssl openssl-devel  pcre-devel zlib-devel

ADD nginx-1.14.2.tar.gz /opt/

WORKDIR /opt/nginx-1.14.2

RUN ./configure --prefix=/opt/nginx  --http-log-path=/opt/nginx/logs/access.log --error-log-path=/opt/nginx/logs/error.log --http-client-body-temp-path=/opt/nginx/client/  --http-proxy-temp-path=/opt/nginx/proxy/  --with-http_stub_status_module --with-file-aio --with-http_flv_module --with-http_gzip_static_module --with-stream --with-threads --user=www --group=www
RUN make && make install
RUN groupadd www && useradd -g www www
WORKDIR /opt/nginx
RUN rm -rf /opt/nginx-1.14.2

ENV NGINX_HOME=/opt/nginx
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/nginx/sbin

EXPOSE 80 443
  
CMD ["nginx", "-g", "daemon off;"]

需要先下载nginx-1.14.2.tar.gz在Dockerfile同级目录下,然后执行如下命令 docker build -t nginx_image ./Dockerfile

tomcat-dockerfile示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM centos:7.4.1708

ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-7.0.88.tar.gz /usr/local/

WORKDIR /usr/local/

RUN mv jdk1.8.0_171 jdk && mv apache-tomcat-7.0.88 tomcat

ENV JAVA_HOME=/usr/local/jdk
ENV CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CATALINA_HOME /usr/local/tomcat

EXPOSE 8080

CMD /usr/local/tomcat/bin/catalina.sh run

需要先下载jdk和tomcat在dockerfile的同级目录下,然后执行如下命令 docker build -t tomcat_image ./Dockerfile

容器网络
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
小规模docker环境大部分运行在单台主机上,如果公司大规模采用docker,那么多个宿主机上的docker如何互联

Docker默认的内部ip为172.17.42.0网段,所以必须要修改其中一台的默认网段以免ip冲突。
#vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16
#reboot

docker 130上:
#route add -net 172.18.0.0/16 gw 192.168.18.128

docker 128上:
#route add -net 172.17.0.0/16 gw 192.168.18.130

现在两台宿主机里的容器就可以通信了。
容器固定IP
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker安装后,默认会创建三种网络类型,bridge、host和none
显示当前网络:
# docker network list
NETWORK ID            NAME                DRIVER              SCOPE
90b22f633d2f          bridge              bridge              local
e0b365da7fd2          host                host                local
da7b7a090837         none                null                local

bridge:网络桥接
默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化

none:无指定网络
启动容器时,可以通过–network=none,docker容器不会分配局域网ip
host:主机网络
docker容器的网络会附属在主机上,两者是互通的。

创建固定ip容器
1、创建自定义网络类型,并且指定网段
#docker network create --subnet=192.168.0.0/16 staticnet

通过docker network ls可以查看到网络类型中多了一个staticnet

2、使用新的网络类型创建并启动容器
#docker run -it --name userserver --net staticnet --ip 192.168.0.2 centos:6 /bin/bash

通过docker inspect可以查看容器ip为192.168.0.2,关闭容器并重启,发现容器ip并未发生改变
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
docker 常用命令
Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。具体:https://www.cnblogs.com/panwenbin-logs/p/8007348.html
卓越笔记
2023/02/18
3170
docker-Dockerfile
Dockerfile是为了快速构建镜像 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。 一般而言,Dockerfile分为4个部分: 基础镜像信息<br/>维护者信息<br/>镜像操作指令<br/>容器启动时执行指令
yuezhimi
2020/09/30
8450
docker-Dockerfile
Docker容器学习梳理-Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低。所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析、执行,那么重复构建、更新将变得很方便,所以Dockerfile就此诞生了。Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉。Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传输了,好处那
洗尽了浮华
2018/01/23
1.5K0
Docker容器学习梳理-Dockerfile构建镜像
3.Docker学习之Dockerfile
描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 用户可以使用Dockerfile快速创建自定义的镜像;通过它所支持的内部指令,以及使用它创建镜像的基本过程,Docker拥有”一点修改代替大量更新”的灵活之处;
全栈工程师修炼指南
2022/09/28
1.3K0
3.Docker学习之Dockerfile
Docker重学系列之Dockerfile
Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件。
大忽悠爱学习
2022/05/10
2K0
Docker重学系列之Dockerfile
Docker 容器镜像制作指令详解
从镜像大小上面来说,一个比较小的镜像只有1MB多点或几MB,而内核文件需要几十MB, 因此镜像里面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的rootfs,即系统正常运行所必须的用户空间的文件系统,比如: /dev/,/proc,/bin,/etc等目录,容器当中/boot目录是空的,而/boot当中保存的就是与内核相关的文件和目录。
BUG弄潮儿
2022/06/07
3.4K0
Docker 容器镜像制作指令详解
Docker 入门笔记
ContainerViewer does not support full SVG 1.1
Rikka
2022/01/20
1.2K0
Docker 入门笔记
docker--镜像制作
docker官方和个人发布的镜像由于版本等各种原因,漏洞较多,已统计Docker Hub超过 30%的官方镜像包含高危漏洞。此外,由于网络等原因也会造成docker pull下载镜像的 速度很慢。基于这种情况,我们可以手动定制docker系统镜像。构建镜像的方式有两 种:
eadela
2019/11/26
3.7K0
Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用。 Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。 FROM语法格式为: FROM <image>
纯洁的微笑
2018/04/18
1.5K0
Docker镜像构建知识:Dockerfile 命令详解
FROM 指令用于指定其后构建新镜像所使用的基础镜像。如果本地不存在,则默认会去Docker Hub下载指定镜像。FROM指令必是Dockerfile文件中的首条命令,启动构建流程后,Docker将基于该镜像构建新镜像,FROM后的命令也会基于这个基础镜像。
废柴阿尤
2023/12/18
2.8K0
3.Docker学习之Dockerfile
描述:Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 用户可以使用Dockerfile快速创建自定义的镜像;通过它所支持的内部指令,以及使用它创建镜像的基本过程,Docker拥有”一点修改代替大量更新”的灵活之处;
全栈工程师修炼指南
2020/10/23
1.8K0
3.Docker学习之Dockerfile
Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
本文主要介绍了如何使用 Docker 部署一个 Django 应用,包括创建 Docker 镜像、编写 Dockerfile、运行容器和连接主机上的应用。同时,还提供了在启动容器时使用的命令和参数,以及将主机上的目录映射到容器内的方法。最后,文章还对一些可能出现的问题和错误进行了排查和解决。
田飞雨
2016/07/20
9.4K1
Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
制作镜像的帮手-Dockerfile
FROM 指令是最重要的一个并且必须为 Dockerfile 文件的第一个非注释行指令,用于为镜像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。
懒人的小脑
2019/10/17
2.2K0
制作镜像的帮手-Dockerfile
docker实践(2)常用命令和DockerFile详解
1、获取:docker pull centos获取镜像 #从官方仓库注册服务器下载镜像
黄规速
2022/04/14
7350
docker实践(2)常用命令和DockerFile详解
DockerFile 编译语法详解
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像,本小结首先介绍Dockerfile典型的基本结构和它支持的众多指令,并具体讲解通过这些指令来编写定制镜像的Dockerfile,以及如何生成镜像.最后介绍使用Dockerfile的一些最佳实践经验.
王瑞MVP
2022/12/28
4200
Docker入门
每个虚拟化应用程序不仅包括应用程序(可能只有数十MB)以及必要的二进制文件和库,还包括整个客户机操作系统(可能重数十GB)。
星宇大前端
2020/07/07
6150
Docker入门
Docker构建Tomcat镜像+Nginx镜像
Dockerfile是由一组指令组成的文件,每条指令对应linux中一条命令,Docker程序将读取Dockerfile中的指令生成指定镜像。 Dockerfile大致结构:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令。每行支持一条指令,每条指令可以携带多个参数,支持以 # 开头的注释。 Dockerfile操作指令:
星哥玩云
2022/07/19
2.9K0
Docker构建Tomcat镜像+Nginx镜像
统信服务器操作系统V20 1070e 【dockerfile 构建镜像】
dockerFile 是一个文本文件,它包含了一系列的指令,这些指令用于自动化构建 docker 镜像的过程。docker 镜像是只读模板,可以用来创建 docker 容器的实例。dockerfile 使得开发者可以定义一个镜像的构建过程,而这个镜像可以被用来批量部署应用程序和服务。
Kevin song
2024/07/04
5000
统信服务器操作系统V20 1070e 【dockerfile 构建镜像】
DockerFile解析
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
玖柒的小窝
2021/10/06
5350
DockerFile解析
4-Dockerfile And Docker Compose
而Docker镜像是由特殊的文件系统叠加而成,其最底端同样依赖bootfs,但是其不需要自己独立拥有bootfs,其可以直接使用宿主机的bootfs。 第二层是root文件系统rootfs,被称为base image即基础镜像。
Ywrby
2022/10/27
4200
4-Dockerfile And Docker Compose
相关推荐
docker 常用命令
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验