Docker镜像制作---指令
Docker镜像制作
安装部署Harbor仓库
使用Dockerfile定制nginx,php,mysql的镜像
通过docker部署LNMP,wordpress应用采集案例
通过docker-compose实现多容器控制
构建私有网盘
1.harbor仓库的介绍
简洁的来说,
其实就是规模比较大的企业,建立的私有的镜像仓库方便自己公司内部的使用
harbor仓库的结构
- ui(Harbor的核心服务)
- log(运行reyslog容器,进行日志的收集)
- mysql(使用nginx做反向代理)
- registry(官方的DOCKER registry)
- adminserver(harbor的配置数据管理)
- jobservice(harbor的任务管理服务)
- redis(用于存储session)
- Notary (针对软件分发和跟新安全组件)
使用dockerfile定制镜像
1, dockerfile解释
Dockerfile是一个用来构建docker镜像的文本文件,文本内容包含了一条条镜像所需要构建的指令和说明,每一条指令构建一层,因此每一条指令的内容,就是描述该层是如何的构建。
编写一个简单的Dockerfile文件
1, 简单的编写一个Dockerfile文件
Dockerfile是一个文本文件,其中包含了一条条的指令,每一条指令构建一层,因此每一条的指令内容,就是描述该层是如何构建的。
FROM命令
所谓的定制化镜像,那一定是一个镜像为基础,在其上进行定制,就像我们之前运行的一个nginx镜像容器,再进行修改一样,镜像是必须被指定的,而FROM作用就是指定基础镜像,
因此FROM是Dockerfile的必备的指令
RUN命令
RUN 指令是用来执行命令的命令,RUN指令是在定制镜像时的最常用的指令。
如有多个命令不是可以,是定要用 && 这个符号区衔接下一个命令。
Dokcerfile中的额RUN指令就如同shell命令一样。
小练习
一共涉及两条指令,FROM,RUN
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
构建镜像
一般的文件名称都是Dockerfile
docker build -t test-nginx .
我们就可以看到镜像了
docker run -itd -p 888:80 test-nginx
dockerfile的基本语法
FROM ---> 基础镜像是谁
MANTAINER---> 告诉被人这个镜像是谁写的
RUN ------> 你想让这个镜像干什么
ADD-----> 你想往镜像中放那些文件
VOLUME-----> 你的数据目录的挂载
EXPOSE -----> 此镜像要打开的端口
RUN -----> 镜像要运行的服务(必须运行的一些命令)
copy 和 ADD命令
add命令要比copy命令用的比较多
ADD
指令的作用类似于 COPY
指令,但有一些差异。除了复制文件外,ADD
指令还可以执行额外的功能,如自动解压缩tar文件和URL下载等。
# 举个例子ADD myapp.tar.gz /usr/src/app.
把这个文件放到这个目录下
WORKDIR指令
# 相当于cd到这个目录,后续的操作都是在这个目录下进行WORKDIR /usr/src/app
VOLUME指令
把容器目录放到宿主机的目录下。
# 创建一个挂载点,也是防止忘记使用 -v的参数VOLUME ["/data"]
CMD指令
在Dockerfile中,CMD指令用于设置容器启动时默认执行的命令,每一个Docker镜像中建议只能有一个CMD的指令,会在容器启动时默认的执行
注意,如果你启动容器时新增加了命令,就会覆盖掉CMD的指令就不会执行CMD下的指令
# 一定使用的是双引号CMD ["可执行的文件","参数1","参数2"]
ENTRYPOINT指令
- 在dockerfile中,ENTRYPOINT指令用于配置容器启动时默认执行的可执行的程序,
- 容器启动时会运行且不会被覆盖掉,
- 和CMD命令不同,ENTRYPOINT指令不会被docker run 命令中的任何命令被覆盖掉。
- 最后,
他始终是容器入口点的执行
# 语法ENTRYPOINT ["可执行的文件","参数1","参数2"]
EXPOSE指令
- EXPOSE指令用于声明在容器运行时将要监听的端口,
- 注意,EXPOSE仅仅是一个声明,他不会在宿主机上打开端口或者映射。
- 他只是在构建镜像提供关于容器监听中的端口信息,在容器运行时,我们任然需要使用-p和-大P选项将容器内的端口映射到主机上。
# EXPOSE语法EXPOSE 端口
USER指令
- 一般的情况下我们是以root用户的形式去启动容器
- USER就是换成一个普通的用户去执行,也就是降低权限
# 语法如下USER 用户名
ENV 指令
- ENV 指令用于设置环境变量
- 环境变量是在容器运行时可用键值对的新式,可以在容器内各个进程中使用,
# 语法ENV 变量名=值
变量名:环境变量的名称
值: 是相关联的值
下面是一个案例看看理解,和这每一步都是在干什么
私有网盘的搭建
# 网址https://github.com/filebrowser/filebrowser
这里的话我就不演示了,这里的Dockerfile写的已经很好的了,
大家只需要docker build -t name . 创建镜像ok