Docker---镜像制作与Dockerfile

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

健康检查

原创文章 84 获赞 95 访问量 5891

猜你喜欢

转载自blog.csdn.net/obsessiveY/article/details/105625975