Docker容器引擎(3)

目录

一.Docker 镜像的创建

1.基于现有镜像创建

2.基于本地模板创建

3.基于Dockerfile创建:

Dockerfile 操作常用的指令:

ADD 和 COPY 的区别?

CMD 和 ENTRYPOINT 的区别?

容器启动命令的优先级

如何使用Dockerfile构建镜像?

yum构建nginx的dockerfile:

编写dockerfile文件:

进入容器进行添加网页内容:

我们为了方便不进入容器就能修改添加网页内容可以做数据卷:

编译安装nginx的dockerfile:

编写dockerfile文件:

构建镜像:

创建容器做html的数据卷:

访问页面:

不进入容器修改内容:


一.Docker 镜像的创建

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。

1.基于现有镜像创建

docker create -it centos:7 /bin/bash

然后将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像:

docker commit -m "new" -a "centos" 5590537ebe36  centos:test

-m 说明信息;
-a 作者信息;
-p 生成过程中停止容器的运行。

2.基于本地模板创建

先获取模板文件 :将本地容器导出为模板文件  docker export  或从网上下载现成的模板文件:

再将模板文件导入成镜像 :docker import

3.基于Dockerfile创建:

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。AUFS、OverlayFS 及 Devicemapper 都是一种 UnionFS。

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。

bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。


Dockerfile 操作常用的指令:

FROM               指定基础镜像(是Dockerfile的第一行指令)
MAINTAINER         指定镜像维护人信息(可选)
RUN                指定linux命令,尽量将多条linux命令合并在一个RUN指令里,用 ; 或 && 或 <<EOF 串起来使用
EXPOSE             指定容器要开启的应用的端口号
ENV                指定容器的环境变量
ADD/COPY           复制本地文件|目录到镜像里
VOLUME             指定容器的匿名数据卷(作用类似于 docker run -v /var/lib/docker/volumes/容器ID/:容器数据卷目录)
USER               指定容器的运行用户
WORKDIR            指定后续镜像层的工作目录
ARG                指定构建镜像时传入的参数变量(可通过 "docker build --build-arg 变量=值"  进行传入参数)
CMD/ENTRYPOINT     指定容器启动时执行的命令和参数
 

ADD 和 COPY 的区别?

共同点:都可以将本地的文件|目录复制到镜像里
区别:ADD还可以通过URL地址下载文件并复制到镜像里,还能将本地的压缩包解压后再复制到镜像里(URL下载和压缩包解压特性不能同时生效)
即通过URL下载的压缩包只能以压缩包的形式复制到镜像里

CMD 和 ENTRYPOINT 的区别?

共同点:都可以用来指定容器的启动命令
区别:ENTRYPOINT指定的容器启动命令优先级更高,如果CMD和ENTRYPOINT同时存在,那么CMD指定的内容将作为ENTRYPOINT指定的容器启动命令的选项或参数使用

容器启动命令的优先级


docker run --entrypoint="命令"  >  镜像里的ENTRYPOINT指令指定的"命令"  >  docker run .... 镜像 "命令"  >  镜像里的CMD指令指定的"命令"
 

如何使用Dockerfile构建镜像?


1)编写Dockerfile文件,在第一行用 FROM 指令指定基础镜像
2)用 MAINTAINER 指令指定镜像维护人信息(可选)
3)用 RUN EXPOSE ENV ADD COPY 等指令编写构建镜像的过程
4)在Dockerfile结尾用 CMD 或 ENTRYPOINT 指令指定容器启动时执行的命令
5)用 docker build -t 镜像名:标签 .  命令来构建镜像
 

yum构建nginx的dockerfile:

先创建目录:

编写dockerfile脚本:

给目录下添加nginxyum源:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
编写dockerfile文件:

FROM centos:7

COPY nginx.repo /etc/yum.repos.d/

RUN yum install -y nginx

EXPOSE 80

CMD ["/usr/sbin/nginx","-g","daemon off;"]

生成镜像:

docker build -t  镜像名:标签 . :注意别忘了末尾有"."

查看下镜像:

新镜像运行容器:

访问网页:

如果有网络报错提示:[Warning] IPv4 forwarding is disabled. Networking will not work

解决方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker
 

进入容器进行添加网页内容:

访问页面:

我们为了方便不进入容器就能修改添加网页内容可以做数据卷:

先将容器中的网页文件复制到宿主机目录下:

创建容器:

修改内容:

访问页面:

编译安装nginx的dockerfile:

在/opt下准备好文件及压缩包,和网页文件(也可以接着上面操作继续做):

给网页文件添加内容:

编写dockerfile文件:

FROM centos:7

ADD nginx-1.24.0.tar.gz /opt/

RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make && \   
    yum clean all && \
    useradd -M -s /sbin/nologin nginx && \
    cd /opt/nginx-1.24.0/ && \
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && \
    make && make install

ENV PATH $PATH:/usr/local/nginx/sbin

EXPOSE 80

CMD  ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

构建镜像:

docker build -t nginx:24 .

创建容器做html的数据卷:

docker run -d -P -v /opt/dockerfile/html/:/usr/local/nginx/html nginx:24

编译安装的nginx网页目录在/usr/local/nginx/html下。

进入容器查看下:

有宿主机的网页文件。

访问页面:

不进入容器修改内容:

访问页面:

相关推荐

  1. docker容器引擎

    2024-01-26 14:32:01       28 阅读
  2. Docker容器引擎

    2024-01-26 14:32:01       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 14:32:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 14:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 14:32:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 14:32:01       20 阅读

热门阅读

  1. 玩转浏览器开发者工具

    2024-01-26 14:32:01       35 阅读
  2. shallowRef与shallowReactive

    2024-01-26 14:32:01       31 阅读
  3. IEC60870-5-104规约

    2024-01-26 14:32:01       34 阅读
  4. npm更换镜像

    2024-01-26 14:32:01       34 阅读
  5. Kotlin协程 SharingStarted

    2024-01-26 14:32:01       37 阅读
  6. react函数式组件和类组件

    2024-01-26 14:32:01       35 阅读