1. dockerfile介绍
类似ansible剧本,大小几kb 手动做镜像:大小几百M+
dockerfile 支持自定义容器的初始命令
docker images -a:显示所有镜像,包括失败的镜像
docker image prune:清除失败的镜像缓存
docker image prune -a:清除所有未被容器使用的镜像;极度危险!!!
2. dockerfile主要组成部分:
基础镜像信息 FROM centos:6.9
制作镜像操作指令 RUN yum install openssh-server -y
容器启动时执行初始命令 CMD ["/bin/bash"] dockerfile常用指令:
FROM 指定基础镜像
RUN 在执行的命令前加上即可
CMD 运行镜像时,默认执行的命令(容易被替换)
ADD 宿主机的文件添加到到容器中,tar包可自动解压 ///////////可自动解压tar包
MAINTAINER 指定维护者信息
LABEL 描述,标签
WORKDIR 指定工作目录,设定后,进入容器默认是在这个目录下
例子:
[root@docker01 nginx]
[root@b1e8bb160c88 tmp]
VOLUME 设置卷,使用卷可以将容器中的目录内容持久化,卷路径在/var/lib/docker/volumes/;写绝对路径可以挂载宿主机目录至容器目录
docker run --volume /opt/h5:/usr/share/nginx/html -d c6_nginx:v2.0
EXPOSE 可指定容器开放的端口,可启动容器时随机端口挂载到开放的端口
COPY 复制宿主机的文件到容器中
ENV 可设定环境变量(密码信息等),设定的变量可以在dockerfile中引用,而且会继承到容器中
ENTRYPOINT 容器启动执行的命令,无法被替换,写在启动命令位置的字符串会被当成命令的参数
3. 编写dockerfile思路:
思路:
1.手动制作docker镜像,保留历史命令
2.根据历史命令编写dockerfile
3.构建docker镜像
4.测试docker镜像
4. 实战一:基于c6编写dockerfile构建Nginx服务
1. 编写dockerfile
[root@docker01 nginx]
FROM centos:6.9
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http:
curl -o /etc/yum.repos.d/epel.repo http:
yum install nginx -y
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
2. 准备脚本
[root@docker01 nginx]
service php-fpm start
nginx -g 'daemon off;'
3. 构建镜像
docker build -t c6_nginx:v2.0
4. 测试镜像
docker run -d -p 82:80 c6_nginx:v2.0
参数补充:
[root@docker01 nginx]
FROM centos:6.9
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http:
curl -o /etc/yum.repos.d/epel.repo http:
yum install nginx -y
WORKDIR /usr/share/nginx/html
ADD xiaoniao .
ADD init.sh /init.sh
EXPOSE 80
CMD ["/bin/bash","/init.sh"]
[root@docker01 nginx]
FROM centos:6.9
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http:
curl -o /etc/yum.repos.d/epel.repo http:
yum install nginx -y
WORKDIR /usr/share/nginx/html
ADD xiaoniao .
ADD init.sh /init.sh
EXPOSE 80
VOLUME /usr/share/nginx/html
CMD ["/bin/bash","/init.sh"]
5. 实战二:基于alpine编写dockerfile构建Nginx服务
1. 编写dockerfile
FROM alpine:3.9
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add nginx && \
mkdir -p /run/nginx/
CMD ["nginx","-g","daemon off;"]
6. 实战三:基于alpine编写dockerfile部署可道云项目
1. 编写dockerfile
FROM alpine:3.9
MAINTAINER cheng
LABEL maintainer="alpine nginx"
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \
apk update && \
apk add nginx php7-intl php7-openssl php7-pdo_mysql php7-common php7-fpm php7-mysqlnd php7-mbstring php7-opcache php7-session php7-gd php7-json php7 php7-iconv php7-curl php7-pecl-igbinary php7-pecl-memcached php7-pdo php7-mysqli
WORKDIR /code
ADD www.conf /etc/php7/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf
ADD code /code
ADD init.sh /init.sh
EXPOSE 80/tcp
RUN mkdir -p /run/nginx
RUN chown -R nginx:nginx /code
ENTRYPOINT ["/bin/sh","/init.sh"]
7. 实战四:自己制作alpine系统镜像
1.下载系统文件
[root@docker01 alpine]
[root@docker01 alpine]
[root@docker01 alpine]
[root@docker01 alpine]
2. 编写dockerfile
[root@docker01 alpine]
FROM scratch
ADD alpine.tar.gz /
CMD ["/bin/sh"]
3. 构建镜像
[root@docker01 dockerfile]
4. 测试镜像
8. 实战五:基于c7安装sshd服务,指定端口可ssh连接
1. 编写dockerfile
[root@docker01 sshd]
FROM centos:7
ENV version: 7.4p1
RUN rm -rf /etc/yum.repos.d/* && \
curl -o /etc/yum.repos.d/CentOS-Base.repo http:
curl -o /etc/yum.repos.d/epel.repo http:
yum install initscripts openssh-server-$version -y && \
/usr/sbin/sshd-keygen
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
2. 准备脚本
[root@docker01 c7]
echo $1 |passwd
/usr/sbin/sshd -D
3. 构建镜像
[root@docker01 c7]
4. 测试镜像
[root@docker01 c7]
9. 实战六:ENTRYPOINT应用
1. 编写dockerfile
[root@docker01 c7]
FROM centos:7
ENV version 7.4p1
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http:
yum install initscripts openssh-server-$version -y && \
/usr/sbin/sshd-keygen
ADD init.sh /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]
2. 构建镜像
[root@docker01 c7]
3. 测试镜像
[root@docker01 c7]
ssh root@10.0.0.11 1025
10. 实战七:基于c6部署可道云
1. 编写dockerfile
[root@docker01 kdy]
FROM c6_nginx:v2.1
RUN yum install php-fpm php-gd php-mbstring unzip -y
ADD www.conf /etc/php-fpm.d/www.conf
RUN rm -rf /etc/nginx/conf.d/*
ADD kdy.conf /etc/nginx/conf.d/kdy.conf
ADD code /code
ADD init.sh /init.sh
EXPOSE 80
RUN chown -R nginx.nginx /code
ENTRYPOINT ["/bin/sh","/init.sh"]
2. 准备文件
[root@docker01 kdy]
[root@docker01 kdy]
3. 构建镜像
[root@docker01 kdy]
4. 测试镜像
[root@docker01 kdy]
code dockerfile init.sh kdy.conf www.conf
[root@docker01 kdy]