Docker自动化构建镜像

Docker自动化构建镜像

Dockerfile介绍

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

镜像: 中药

dockerfile: 配方

dockerfile常用指令

Dockerfile语法

FROM # 指定基础镜像
RUN # 在基础镜像中执行命令
CMD # 容器启动时,执行的pid为1的进程命令
ENTRYPOINT # 容器启动时,执行的pid为1的进程命令 (当ENTRYPOINT存在时,如果执行的是一个脚本,那么将CMD中的命令看成是一个参数)
例: CMD mysql php 
    ENTRYPOINT sh start.sh
那么就会变成
    sh start.sh mysql php
ADD # 将宿主机上的包和文件,传递到容器中(如果是压缩包,则自动解压)
COPY # 将宿主机上的包和文件,传递到容器中(如果是压缩包,则不解压)
WORKDIR # 指定工作目录
EXPOSE # 声明端口
VOLUME # 持久化卷,指定目录挂载点
ENV # 环境变量
LABEL # 镜像标签
MAINTAINER # 管理者标识(镜像的作者是谁)

查看docker容器日志

docker logs 容器ID

自动构建wordpress

# 1.提前准备
-rw-rw-rw- 1 root root      431 Sep 11 10:08 blog.conf
-rw-r--r-- 1 root root      248 Sep 11 10:08 Dockerfile
-rw-rw-rw- 1 root root 20895591 May 23 15:38 nginx_php.tgz
-rw-rw-rw- 1 root root       83 Sep 11 10:08 start.sh
-rw-rw-rw- 1 root root 11098483 Sep 11 10:08 wordpress-5.0.3-zh_CN.tar.gz

# 2.编写dockerfile
[root@docker02 wordpress]# vim Dockerfile 
FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
RUN sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
RUN yum install -y mariadb-server
ADD nginx_php.tgz /opt
RUN yum localinstall -y /opt/*.rpm
RUN /usr/libexec/mariadb-prepare-db-dir %n
RUN rm -f /etc/nginx/conf.d/*
COPY blog.conf /etc/nginx/conf.d/
COPY start.sh /
RUN mkdir /code
ADD wordpress-5.0.3-zh_CN.tar.gz /code
EXPOSE 80/tcp 443/tcp
CMD ["/bin/sh","/start.sh"]
VOLUME /code/wordpress

# 3.构建镜像
[root@docker02 wordpress]# docker build -t wp:v1 .

# 4.运行容器
[root@docker02 wordpress]# docker run --name wordpress -p 80:80 -d wp:v1 

## 查看日志
docker logs 容器ID

Dockerfile优化

1) 用完包,删除
2) 叠层,减少层数,将所有的RUN合并
3)yum缓存一定要清

## 优化后
[root@docker02 wordpress]# cat Dockerfile 
FROM centos:7
ADD nginx_php.tgz /
COPY start.sh / 
RUN rm -f /etc/yum.repos.d/* && \
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \    
    curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo && \
    sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo && \
    yum install -y mariadb-server && \
    cd /nginx_php && \
    yum localinstall -y *.rpm && \
    /usr/libexec/mariadb-prepare-db-dir %n && \
    mkdir /code && \
    rm -f /etc/nginx/conf.d/* && \
    rm -f /nginx_php/* && \
    yum clean all && \
    rm -f /etc/yum.repos.d/* 
COPY blog.conf /etc/nginx/conf.d/blog.conf 
ADD wordpress-5.0.3-zh_CN.tar.gz /code
EXPOSE 80 3306
VOLUME /code/wordpress
CMD ["/bin/sh","start.sh"]

使用docker运行MySQL

## 官方案例
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

## 常规启动
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

## 需要数据
docker run --name mysql57 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

docker run \
--name mysql57 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE='wordpress' \
-e MYSQL_USER='wp_user' \
-e MYSQL_PASSWORD='111' \
-p 3306:3306 \
-d mysql:5.7

容器通信

容器的单向通信

--link
[root@docker01 ~]# docker run --name wp -p 80:80 --link mysql57 -d wp:v1

使用docker启动zabbix5.0

# 1.启动zabbix数据库
docker run \
--name zabbix-db \
-v /data/zabbix:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE='zabbix' \
-e MYSQL_USER='zabbix' \
-e MYSQL_PASSWORD='123' \
-p 33060:3306 \
-d mysql:5.7 \
--character-set-server=utf8 \
--collation-server=utf8_bin

# 2.启动zabbix-server
docker run \
--name zabbix-server \
--link zabbix-db \
-e DB_SERVER_HOST="zabbix-db" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123" \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:5.0.37-alpine

# 3.启动zabbix前端
docker run \
--link zabbix-db \
--link zabbix-server \
--name zabbix-web \
-e DB_SERVER_HOST="zabbix-db" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123" \
-e ZBX_SERVER_HOST="zabbix-server" \
-e PHP_TZ="Asia/Shanghai" \
-p 8080:8080 \
-d zabbix/zabbix-web-nginx-mysql:5.0.37-alpine

image-20230911120933930

image-20230911120952237

使用docker启动zabbix6.4

# 0.安装mariadb客户端
yum install -y mariadb

# 1.启动zabbix数据库
docker run \
--name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123" \
-e MYSQL_ROOT_PASSWORD="123" \
--restart unless-stopped \
-p 3306:3306 \
-d mysql:8.0-oracle \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

# 2.启动zabbix-server
docker run \
--name zabbix-server-mysql \
--link mysql-server \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123" \
-e MYSQL_ROOT_PASSWORD="123" \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-6.4-latest

# 3.启动zabbix前端
docker run \
--link mysql-server \
--link zabbix-server-mysql \
--name zabbix-web-nginx-mysql \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123" \
-e MYSQL_ROOT_PASSWORD="123" \
-p 8080:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest

image-20230911174707718

image-20230911174720024

使用docker启动wordpress(传参版)

# 启动数据库
docker run \
--name mysql57 \
-v /data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-e MYSQL_DATABASE='wordpress' \
-e MYSQL_USER='wp_user' \
-e MYSQL_PASSWORD='123' \
-p 3306:3306 \
-d mysql:5.7

# Dockerfile
[root@docker02 wordpress]# vim Dockerfile 
FROM centos:7
ADD nginx_php.tgz /
WORKDIR /code
ADD wordpress-5.0.3-zh_CN.tar.gz /code
ENV DB_NAME=db \
    DB_USER=user \
    DB_PASSWORD=password \
    DB_HOST=host
RUN cd /nginx_php && \
    yum localinstall -y *.rpm && \
    chown -R apache:apache /code && \
    rm -f /etc/nginx/conf.d/* && \
    rm -f /nginx_php/* && \
    cp /code/wordpress/wp-config-sample.php /code/wordpress/wp-config.php && \
    yum clean all 
COPY blog.conf /etc/nginx/conf.d/blog.conf 
COPY docker-entrypoint.sh /usr/local/bin/
EXPOSE 80
CMD ["/bin/sh","/usr/local/bin/docker-entrypoint.sh"]

# 启动脚本(传参版)
[root@docker02 wordpress]# vim docker-entrypoint.sh
#!/bin/bash
sed -i s#database_name_here#$DB_NAME#g /code/wordpress/wp-config.php
sed -i s#username_here#$DB_USER#g /code/wordpress/wp-config.php
sed -i s#password_here#$DB_PASSWORD#g /code/wordpress/wp-config.php
sed -i s#localhost#$DB_HOST#g /code/wordpress/wp-config.php
/sbin/nginx
/sbin/php-fpm
tail -f /etc/hosts
exec docker-entrypoint.sh "$@"

# 构建镜像
[root@docker02 wordpress]# docker build -t wp:v3 .

# 启动wordpress
docker run \
-p 80:80 \
--link mysql57 \
-e DB_NAME=wordpress \
-e DB_HOST=mysql57 \
-e DB_USER=wp_user \
-e DB_PASSWORD=123 \
-d wp:v3

指定渲染变量

软件名:gettext
命令:envsubst 可以识别环境变量

# 将变量导入文件并作为标准输出(源文件并不会改变)
envsubst <1.txt

# 再将标准输出导入到另一个文件
envsubst <1.txt >2.txt

image-20230911211756155

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇