Docker---镜像制作与Dockerfile

本文详细介绍了Docker镜像制作的三种方式,包括基于已有镜像创建、本地模板创建和使用Dockerfile自定义镜像。重点讨论了Dockerfile的结构和常用操作命令,如FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV等,以及如何通过这些指令创建和运行镜像。

Docker—镜像制作与Dockerfile

一.镜像制作的三种方式

1.基于已有的镜像创建
查看镜像
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   5e35e350aded        5 months ago        203MB
创建容器并且运行
[root@localhost ~]# docker create -it centos:7 /bin/bash
a739f598e610ac1013e5c07c6038e752977781c23f197b91425fa80925752321
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a739f598e610        centos:7            "/bin/bash"         21 seconds ago      Created                                 musing_chaum
基于该容器创建镜像(-m:指定信息,-a:指定镜像作者)
[root@localhost ~]# docker commit -m "new" -a "daoke" a739f598e610 daoke:centos
sha256:56e986bebc424a403cf26e93096946bdc140bb65af3e85771e6e52575a72d183
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
daoke               centos              56e986bebc42        30 seconds ago      203MB
centos              7                   5e35e350aded        5 months ago        203MB
2.基于本地模板创建镜像
提前准备安装包:debian-7.0-x86-minimal.tar.gz
把上实验创的镜像删除:
[root@localhost ~]# docker rmi 56e986bebc42
Untagged: daoke:centos
Deleted: sha256:56e986bebc424a403cf26e93096946bdc140bb65af3e85771e6e52575a72d183
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   5e35e350aded        5 months ago        203MB
创建镜像:
[root@localhost ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - docker:new
sha256:f1b7f580106e9e8101f0429bfa6f873575eff91f38a875c42a73d7b86918e2fa
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker              new                 f1b7f580106e        9 seconds ago       215MB
centos              7                   5e35e350aded        5 months ago        203MB
3.基于dockerfile自定义镜像
把之前创建的镜像,容器全部删除干净:
[root@localhost ~]# docker rm a739f598e610
a739f598e610
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker images | awk '{print "docker rmi "$3}' | bash
Error response from daemon: invalid reference format: repository name must be lowercase
Untagged: docker:new
Deleted: sha256:f1b7f580106e9e8101f0429bfa6f873575eff91f38a875c42a73d7b86918e2fa
Deleted: sha256:3a1d67a7fe13e7d70786058b5929b4e6d925a49251c6fc1c8d2870076d7727b0
Untagged: centos:7
Untagged: centos@sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Deleted: sha256:5e35e350aded98340bc8fcb0ba392d809c807bc3eb5c618d4a0674d98d88bccd
Deleted: sha256:77b174a6a187b610e4699546bd973a8d1e77663796e3724318a2a4b24cb07ea0
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
本地创建Dockerfile文件:
[root@localhost ~]# cd /opt
[root@localhost opt]# ls
containerd  rh
[root@localhost opt]# vim Dockerfile

FROM centos
MAINTAINER The project <cloud-docker>
RUN yum -y update
RUN yum -y install httpd
EXPOSE 80
ADD index.html /var/www/html/index.html
ADD run.sh /run.sh
RUN chomd 755 /run.sh
CMD ["/run.sh"]
创建执行脚本:
[root@localhost opt]# vim run.sh

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND
web页面:
[root@localhost opt]# echo "this is web test" > index.html
[root@localhost opt]# ls
containerd  Dockerfile  index.html  rh  run.sh
生成镜像:
[root@localhost opt]# docker build -t httpd:centos .
利用镜像,创建运行容器
[root@localhost opt]# docker run -d -p 1216:80 httpd:centos
访问页面:
192.168.88.131:1216

4.Dockerfile操作命令

Dockerfile是由一-组指令组成的文件
Dockerfile结构四部分

●基础镜像信息
●维护者信息
●镜像操作指令
●容器启动时执行指令

使用Dockerfile创建镜像并在容器中运行
操作命令:
FROM 镜像

指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一 条FROM指令

MAINTAINER 名字

用于指定创建镜像的用户

RUN命令

在所基 于的镜像上执行命令,并提交到新的镜像中

CMD[ "要运行的程序” ,“参数1,"参数2 "]

指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能最后一条被执行

EXPOSE端口号

指定新镜像加载到Docker时要开启的端口

ENV 环境变量 变量值

设置一个环境变量的值,会被后面的RUN使用

ADD 源文件/目录 目标文件/目录

将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL

COPY 源文件/目录 目标文件/目录

将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中

VOLUME [“目录"]

在容器中创建一个挂载点

USER 用户名/UID

指定运行容器时的用户

WORKDIR 路径

为后续的RUN、CMD、ENTRYPOINT指定工作目录

ONBUILD 命令

指定所生成的镜像作为一个基础镜像时所要运行的命令

HEALTHCHECK

健康检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值