docker基础6——制作镜像(dockerfile)

一、基本了解

  • Dockerfile 是一个文本格式的配置文件,可以使用Dockerfile 快速创建自定义镜像。
  • Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
  • 可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让Docker忽略路径下的目录和文件。
  • Dockerfile分为四部分:
    1. 基础镜像信息。
    2. 维护者信息。
    3. 镜像操作指令。
    4. 容器启动时默认要执行的指令。

1.1. 基于centos构建镜像

1.编写dockerfile。

cat Dockerfile

# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: seancheng
# Command format: Instruction [arguments / command] ...

# 第一行必须指定基于的基础镜像
FROM centos:7

# 维护者信息
LABEL MAINTAINER='seancheng xianshangxian@126.com'
#
# # 镜像操作指令
RUN yum clean all && yum -y install epel-release
RUN yum -y install nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
#
# # 容器启动时默认要执行的指令
CMD /usr/sbin/nginx                    

2.构建镜像。

docker build -t nginx:v1 .

在这里插入图片描述
3.使用构建镜像启动容器,网页访问。

docker run -d -p 8080:80   nginx:v1

在这里插入图片描述

1.2 基于alpine制作镜像

  • 官网,需要学习安装包的相关命令。
    在这里插入图片描述

1.编写Dokckfile,需要提前上传nginx二进制安装包。

#基础镜像信息
FROM alpine

# 维护者信息
LABEL MAINTAINER="MQ <2571798411@qq.com>"

##定义变量
ENV version 1.24.0
ENV install_path /usr/local/src
ENV PATH $install_path/nginx/sbin:$PATH

#暴露端口
EXPOSE 80 443

# 镜像操作指令
ADD file/nginx-$version.tar.gz $install_path

WORKDIR $install_path/nginx-$version

RUN echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/main/' > /etc/apk/repositories && \
    echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/community/' >> /etc/apk/repositories && \
    addgroup -S nginx && \
    adduser -DHS -s /sbin/nologin -G nginx nginx && \
    apk add --no-cache gcc libc-dev make pcre-dev openssl-dev openssl gd-dev zlib-dev && \
    ./configure  --prefix=$install_path/nginx --user=nginx --group=nginx && make && make install

# 容器启动时默认要执行的指令
CMD ["-g", "daemon off;"]
ENTRYPOINT ["nginx"]

2.构建镜像。

docker build -t nginx:v1 /opt/nginx

在这里插入图片描述

3.使用该镜像启动一个容器。

docker run -d  --name qingjun1  nginx:v1

在这里插入图片描述

二、常用指令

指令格式释义
FROMFROM <image>或FROM <imagge>:<tag>指定基础镜像。
同一个Dockerfile中创建多个镜像可以使用多个FROM指令。
LABEL MAINTAINERLABEL MAINTAINER <name email_address>指定维护者信息。
RUNRUN <command>
RUN [“executable”,“param1”,“param2”]
指定要执行的命令。
推荐使用格式二。
CMDCMD [“executable”,“param1”,“param2”]
CMD command param1 param2
CMD [“param1”,“param2”]提供给ENTRYPOINT的默认参数
指定启动容器时默认要执行的命令。
会被docker run指定参数覆盖。
EXPOSEEXPOSE <port> [<port>…]将容器内的应用端口信息显示出来,方便维护。
ENVENV <key> <value>指定环境变量,会被后续RUN指令使用,并在容器运行时保持。
ADDADD <src> <dest>将本地的<src>内容复制到容器中的<dest>。
<src>可以是Dockerfile所在目录的一个相对路径(文件或目录)、
一个URL、一个tar文件(会自动解压为目录)。
COPYCOPY <src> <dest>作用与ADD一样,区别是不会解压tar包,只是单纯复制。
ENTRYPOINTENTRYPOINT [“executable”,“param1”,“param2”]
ENTRYPOINT command param1 param2(在shell中执行)
指定启动容器时默认要执行的命令。
不会被docker run后面的指定参数覆盖,
并且这些参数会被传递给ENTRYPOINT指定的程序。
VOLUMEVOLUME [“/data”]创建一个可以从本地主机或其他容器挂载的挂载点,不实用。
USERUSER daemon指定运行容器时的用户名或UID,
后续的RUN也会使用指定用户。
WORKDIRWORKDIR /path/to/workdir进入目录命令,作用与cd相同。
为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。
ONBUILDONBUILD [INSTRUCTION]配置当前创建的镜像作为其他镜像的基础镜像时,所执行的操作指令。
使用ONBUILD指令的镜像,需要给镜像标注明,方便别人使用,
例如ruby:1.9-onbuild。

三、制作httpd镜像

1.文件结构,需要准备httpd离线安装包。

wget https://downloads.apache.org/apr/apr-1.7.4.tar.gz
wget https://downloads.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://downloads.apache.org/httpd/httpd-2.4.57.tar.gz

在这里插入图片描述

2.编写Dockerfile。

//编写dockerfile
cat Dockerfile 

FROM alpine
ENV PATH /usr/local/apache/bin:$PATH
COPY file /usr/src/
COPY script /tmp/
WORKDIR /usr/src/

RUN /bin/sh /tmp/install.sh && \
    rm -rf /tmp/*

EXPOSE 80 443
CMD ["-X"]
ENTRYPOINT ["httpd"]


//编写脚本。
cat script/install.sh 
#!/bin/sh
echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/main/' > /etc/apk/repositories && \
echo 'https://mirrors.ustc.edu.cn/alpine/v3.12/community/' >> /etc/apk/repositories && \
apk update && \
apk add --no-cache -U gcc g++ make openssl-dev pcre-dev expat-dev libtool && \
addgroup -S apache && \
adduser -DHS -s /sbin/nologin -G apache apache && \
tar xf apr-1.7.4.tar.gz && \
tar xf apr-util-1.6.3.tar.gz && \
tar xf httpd-2.4.57.tar.gz && \
sed -i '/$RM "$cfgfile"/d' apr-1.7.4/configure && \
cd apr-1.7.4 && \
./configure --prefix=/usr/local/apr && make && make install && \
cd ../apr-util-1.6.3 && \
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr &&
make && make install && \
cd ../httpd-2.4.57 && \
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 \
--enable-so \
--enable-ssl \
--enable-cgi \
--enable-rewrite \
--with-zlib \
--with-pcre \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util/ \
--enable-modules=most \
--enable-mpms-shared=all \
--with-mpm=prefork && \
make && make install && \
sed -i '/^#ServerName/s/#//g' /etc/httpd24/httpd.conf && \
rm -rf /usr/src/* /var/cache/* && \
apk del gcc g++ make

3.构建镜像。

docker build -t httpd:v2 apache

4.使用构建的镜像部署容器。

docker run -d --name httpd2  httpd:v2

5.查看容器IP,访问容器IP。
在这里插入图片描述

### 使用 Docker 安装和运行 XXL-JOB 为了通过 `Dockerfile` 来安装并启动 XXL-JOB,可以遵循以下方法: #### 创建项目目录结构 创建用于存放 Docker 文件和其他必要配置文件的目录。这有助于保持项目的整洁有序。 ```bash mkdir -p /usr/local/dockerfile/xxl-job cd /usr/local/dockerfile/xxl-job ``` #### 编写 MySQL 的初始化脚本 由于 XXL-JOB 需要依赖于 MySQL 数据库来保存作业调度信息,在构建镜像之前先准备好 SQL 脚本来完成数据库表结构以及初始数据的设置[^2]。 假设已经有一个名为 `init.sql` 的文件位于 `/usr/local/dockerfile/xxl-job/init.sql` 中包含了所需的建表语句等操作。 #### 构建自定义的 MySQL 镜像 (可选) 如果希望定制化程度更高一些,则可以选择基于官方 MySQL 镜像制作自己的版本,并加入上述提到的数据初始化逻辑。不过对于大多数场景来说直接拉取官方镜像即可满足需求。 #### 准备 Docker Compose 或者单独的 Docker 运行命令 考虑到服务之间的关联性较强建议采用 Docker Compose 方式来进行多容器编排管理;当然也可以分别独立启动各个组件但是会比较麻烦一点。 以下是使用 Docker Compose 启动 MySQL 和 XXL-JOB 的例子: ```yaml version: '3' services: db: image: "mysql:5.6" container_name: "xxljob-mysql" environment: MYSQL_ROOT_PASSWORD: "123456" volumes: - "./data/mysql:/var/lib/mysql" - "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime" ports: - "3306:3306" admin: image: "xuxueli/xxl-job-admin:latest" container_name: "xxljob- db:mysql environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC SPRING_DATASOURCE_USERNAME: root SPRING_DATASource_PASSWORD: 123456 ports: - "8080:8080" ``` 这段 YAML 文件描述了一个由两个服务组成的环境——一个是作为后端存储使用的 MySQL 实例(`db`),另一个则是实际提供 Web UI 接口供用户交互访问的任务调度中心 (`admin`). 当执行如下指令时将会自动下载所需的基础镜像并且按照指定参数启动相应的进程: ```bash docker-d ``` 此时应该可以在浏览器里输入 http://localhost:8080 访问到 XXL-JOB 控制台页面了. 另外需要注意的是这里只是简单介绍了最基础的功能实现方式,具体生产环境中还需要考虑更多因素比如安全性配置、性能优化等方面的内容.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百慕卿君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值