一、dockfile 说明
docker 运行一个自定义的image时,就需要自己来定义,这时候就需要dockfile了。
二、docker commit生成新镜像
2.1.运行容器
# docker run -it centos /bin/bash 2.2.安装vim
# yum install vim 2.3.将容器打包成新镜像
# docker commit 07929e3af3ef cent-vim 2.4.查看新镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cent-vim latest 4659d1ec001d 7 seconds ago 225MB
centos latest 1e1148e4cc2c 8 days ago 202MB
nginx latest 568c4670fa80 2 weeks ago 109MB
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
busybox latest 59788edf1f3e 2 months ago 1.15MB 这样操作,非常不便,切容易出错,如何有更好方式来定义镜像呢?这就需要dockfile了
三、dockfile
3.1.编辑dockfile文件
# vim Dockerfile
FROM centos
RUN yum update && yum install vim -y 3.2.build构建镜像
# docker build -t centos-vim . #-t 将新镜像命名为centos-vim
Sending build context to Docker daemon 16.9kB
Step 1/2 : FROM centos #镜像来源
---> 1e1148e4cc2c
Step 2/2 : RUN yum update && yum install vim -y #构建时执行的命令
---> Running in d7a98cfdffb7
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: centos.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.cn99.com
No packages marked for update
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.cn99.com
Resolving Dependencies
--> Running transaction check
---> Package vim-enhanced.x86_64 2:7.4.160-5.el7 will be installed
....
Removing intermediate container d7a98cfdffb7
---> 82fd472e3387
Successfully built 82fd472e3387 #构建成功,镜像ID为82fd472e3387
Successfully tagged centos-vim:latest #为镜像添加一个TAG 查看镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-vim latest 82fd472e3387 2 minutes ago 327MB
cent-vim latest 4659d1ec001d About an hour ago 225MB
centos latest 1e1148e4cc2c 8 days ago 202MB
nginx latest 568c4670fa80 2 weeks ago 109MB
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
busybox latest 59788edf1f3e 2 months ago 1.15MB 3.3.构建镜像时拷贝文件
3.3.1.文件内容:
# cat ckl.txt
The narcissus bloom every year. 3.3.2.dockfile 内容
# vim Dockerfile
FROM centos
RUN yum update && yum install vim -y
COPY ckl.txt / 3.3.3.构建镜像
# docker build -t cent-ckl-vim .# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cent-ckl-vim latest fc090867ce91 42 seconds ago 327MB
centos-vim latest 82fd472e3387 16 minutes ago 327MB
cent-vim latest 4659d1ec001d About an hour ago 225MB
centos latest 1e1148e4cc2c 8 days ago 202MB
nginx latest 568c4670fa80 2 weeks ago 109MB
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
busybox latest 59788edf1f3e 2 months ago 1.15MB 3.3.4.运行容器查看内容
# docker run -it cent-ckl-vim
[root@050821c80ca8 /]#
[root@050821c80ca8 /]#
[root@050821c80ca8 /]# ls
anaconda-post.log bin ckl.txt dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@050821c80ca8 /]#
[root@050821c80ca8 /]#
[root@050821c80ca8 /]# cat ckl.txt
The narcissus bloom every year. #拷贝的文件
[root@050821c80ca8 /]#
[root@050821c80ca8 /]#
[root@050821c80ca8 /]# vim 1.txt #vim 已经按照 3.3.5.拷贝容器的另一种方式
# vim Dockerfile
FROM centos
RUN yum update && yum install vim -y
ADD nginx-1.12.2.tar.gz / 构建镜像:
# docker build -t centos-ckl-ng .
Sending build context to Docker daemon 1MB
Step 1/3 : FROM centos
---> 1e1148e4cc2c
Step 2/3 : RUN yum update && yum install vim -y
---> Using cache #之前已经构建过了以上步骤,所以这里使用了缓存
---> 82fd472e3387
Step 3/3 : ADD nginx-1.12.2.tar.gz /
---> 248da05fb49e
Successfully built 248da05fb49e
Successfully tagged centos-ckl-ng:latest 查看镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-ckl-ng latest 248da05fb49e 23 seconds ago 333MB
centos-vim latest 82fd472e3387 24 minutes ago 327MB
cent-vim latest 4659d1ec001d About an hour ago 225MB
centos latest 1e1148e4cc2c 8 days ago 202MB
nginx latest 568c4670fa80 2 weeks ago 109MB
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
busybox latest 59788edf1f3e 2 months ago 1.15MB 运行镜像容器:
# docker run -it centos-ckl-ng
[root@a7bdc5e9ecf4 /]#
[root@a7bdc5e9ecf4 /]#
[root@a7bdc5e9ecf4 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt nginx-1.12.2 opt proc root run sbin srv sys tmp usr var #tar 包已经被解压,COPY则不会
3.3.6.构建镜像启动后运行命令CMD
编辑文件:
# vim Dockerfile
RUN yum install -y httpd
RUN yum install -y httpd
FROM centos
RUN yum update && yum install vim -y
ADD nginx-1.12.2.tar.gz /
RUN yum install -y httpd && yum -y install initscripts pm-utils
CMD ["service","httpd","start"] 构建镜像:
# docker build -t cent-ckl-http . 查看镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cent-ckl-http latest d848cf5482e6 4 seconds ago 443MB
centos-ckl-ng latest 248da05fb49e 22 minutes ago 333MB
centos-vim latest 82fd472e3387 About an hour ago 327MB
cent-vim latest 4659d1ec001d 2 hours ago 225MB
centos latest 1e1148e4cc2c 8 days ago 202MB
nginx latest 568c4670fa80 2 weeks ago 109MB
ubuntu latest 93fd78260bd1 3 weeks ago 86.2MB
busybox latest 59788edf1f3e 2 months ago 1.15MB 运行镜像的容器:
# docker run -it cent-ckl-http
Redirecting to /bin/systemctl start httpd.service #已经执行了CMD的命令
Failed to get D-Bus connection: Operation not permitted 这个的原因是因为dbus-daemon没能启动。其实systemctl并不是不可以使用。将你的CMD或者entrypoint设置为/usr/sbin/init即可。会自动将dbus等服务启动起来。
然后就可以使用systemctl了。
# docker run -it --privileged cent-ckl-http init
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details. 没有搞定!!!
3.3.7.构建镜像设置环境变量及目录
修改dockfile文件
# vim Dockerfile
FROM centos
RUN yum update && yum install vim -y && mkdir /tmp/soft
ADD nginx-1.12.2.tar.gz /tmp/soft
WORKDIR /tmp/soft/nginx-1.12.2
ENV NAME=ckl
RUN yum install -y httpd && yum -y install initscripts pm-utils
CMD ["service","httpd","start"]
CMD ["echo","$NAME"] 构建镜像文件:
# docker build -t cent-ckl-http . 启动镜像容器:
# docker run -it cent-ckl-http /bin/bash
[root@355cc5d1501e nginx-1.12.2]# #当前目录
[root@355cc5d1501e nginx-1.12.2]#
[root@355cc5d1501e nginx-1.12.2]# echo $NAME #变量
ckl 三、dockfile 参数说明
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
FROM:指定基础镜像,必须为第一个命令
MAINTAINER: 维护者信息
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器中,tar类型文件会自动解压,可以访问网络资源,类似wget
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
LABEL:用于为镜像添加元数据
ENV:设置环境变量
EXPOSE:指定于外界交互的端口
VOLUME:用于指定持久化目录
WORKDIR:工作目录,类似于cd命令
USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
ARG:用于指定传递给构建运行时的变量
ONBUILD:用于设置镜像触发器
来源参考:https://www.cnblogs.com/panwenbin-logs/p/8007348.html 四、配置nginx安装示例
4.1.编辑dockfile文件
vim Dockerfile
FROM centos
MAINTAINER ckl
RUN yum update && yum -y install vim zlib zlib-devel openssl openssl-devel gcc-c++ pcre pcre-devel initscripts pm-utils
RUN mkdir /tmp/soft
RUN adduser ckl
ADD nginx-1.12.2.tar.gz /tmp/soft
WORKDIR /tmp/soft/nginx-1.12.2
RUN ./configure --prefix=/usr/local/nginx --user=ckl --group=ckl --with-http_ssl_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"] 4.2.构建镜像
docker build -t nginx-centos . 4.3.启动镜像容器:
docker run -p 80 --name 'ckl-ng' -d nginx-centos 4.4.已经启动了nginx
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f68eeb38e28 nginx-centos "/usr/local/nginx/sb…" 7 minutes ago Up 7 minutes 0.0.0.0:32768->80/tcp ckl-ng 4.5.访问:
# curl http://172.17.0.3
Welcome to nginx!
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com