docker-构建镜像的两种方式

从容器构建-容器经过反复修改,但不知道具体的修改历史;不熟悉dockerfile指令

$ docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS              NAMES
c3f279d17e0a        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash           7 days ago          Up 25 hours                            focused_hamilton

$ docker commit --change='CMD ["apachectl", "-DFOREGROUND"]' -c "EXPOSE 80" c3f279d17e0a  svendowideit/testimage:version4

f5283438590d

$ docker run -d svendowideit/testimage:version4

89373736e2e7f00bc149bd783073ac43d0507da250e999f3f1036e0db60817c0

$ docker ps

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS              NAMES
89373736e2e7        testimage:version4  "apachectl -DFOREGROU"  3 seconds ago       Up 2 seconds        80/tcp             distracted_fermat
c3f279d17e0a        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours                            desperate_dubinsky
197387f1b436        ubuntu:12.04        /bin/bash               7 days ago          Up 25 hours           

从dockerfile构建-了解镜像的构建步骤;熟悉dockerfile指令

docker build dockerfile

参考dockerfile官方文档
FROM
dockerfile的起点,指定镜像构建依赖的基础镜像。
LABEL
指定镜像的元数据(键值对)(比如指定作者:maintainer=xxl)。
ENV
指定环境变量,推荐键值对(key=value)的方式。
WORKDIR
指定RUN, CMD, ENTRYPOINT, COPY和ADD的工作目录,可多次设置,每次设置后对后面生效。
ADD-可以是远程文件
从源地址复制新的文件,目录或者远程文件url,并把它们添加到镜像的目标路径。
COPY-不能是远程文件
从源目录复制新的文件或者目录,并且把它们添加到容器的目标路径。
EXPOSE
指定容器运行时监听的端口,可以指定协议udp/tcp,不指定的话默认是tcp。

EXPOSE 80/udp

VOLUME
指定容器的挂载点,并把它作为宿主或者其他容器的外部挂载卷。
RUN
执行过程命令,比如创建文件夹,开启配置等,可以有多个,每个都生效。
CMD
指定默认的执行命令,可以有多个,但只最后一个生效,能够被docker run命令行指定的命令重载。
ENTRYPOINT
把镜像配置成可以像可执行文件一样运行,
USER
指定镜像运行时或者执行RUN、CMD、ENTRYPOINT命令时所处的用户名和用户组。

发布了21 篇原创文章 · 获赞 0 · 访问量 827

猜你喜欢

转载自blog.csdn.net/ssehs/article/details/103850928