首页 > 其他分享 >Docker 自动化构建镜像

Docker 自动化构建镜像

时间:2023-10-08 15:25:50浏览次数:31  
标签:-- mysql zabbix MYSQL wordpress 自动化 镜像 Docker 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
COPY start.sh /
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

image-20230911211756155

使用 docker 启动 gitlab

# 在本机准备gitlab工作目录
mkdir -p /data/docker/gitlab/{config,data,logs}
以上在本机建立的3个目录是为了gitlab容器通过挂载本机目录启动后可以映射配置文件,数据文件,日志文件到本机,然后后续就可以直接在本机查看和编辑了,不用再进容器操作。
 
# 启动gitlab
docker run \
--name gitlab \
--hostname gitlab \
--restart always \
-p 4443:443 -p 8888:80 -p 2222:22 \
-v /data/docker/gitlab/config:/etc/gitlab \
-v /data/docker/gitlab/data:/var/opt/gitlab \
-v /data/docker/gitlab/logs:/var/log/gitlab \
-d gitlab/gitlab-ce:latest 
 
# 查看密码
[root@docker01 ~]# cat /data/docker/gitlab/config/initial_root_password
CetMIMU29ScEIGHM1jshlVLjKGHKdS+uZGt84VyC1hI=

image-20230911193356533

使用 docker 启动 jenkins

docker run \
-uroot \
-p 8080:8080 \
-p 50000:50000 \
--name jenkins \
-v /home/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
-d jenkins/jenkins
 
[root@docker02 ~]# docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
437a889d68894b4b8424a6a76e5914f2

image-20230911194009806

image-20230911194919271

标签:--,mysql,zabbix,MYSQL,wordpress,自动化,镜像,Docker,docker
From: https://www.cnblogs.com/xiutai/p/17749138.html

相关文章

  • Docker基础入门
    目录Docker基础入门容器化衍生虚拟化时代KVMOpenStack(编排KVM的工具)一张图理解IAAS、PAAS、SAASDocker介绍编排工具容器化和虚拟化对比VM虚拟化和Docker特性对比什么是容器Docker基本实现原理NameSpace和Cgroup介绍(不是docker的也不是k8s的是内核的)namespace:......
  • Docker 容器使用与打包镜像
    目录Docker容器使用与打包镜像docker创建容器的流程:docker远程连接方式(不安全)docker为何会启动就退出容器容器名词解析docker常用命令docker使用相关命令-容器容器端口映射使用docker运行nginx做小游戏数据卷映射手动制作镜像手动卡前台方法Docker容器使用与打包镜......
  • 使用docker搭建moon节点
    使用docker搭建moon节点​#内网穿透zerotier#​Startacontainerdockerrun--namezerotier-moon-d--restartalways-p9993:9993/udp-v~/somewhere:/var/lib/zerotier-oneseedgou/zerotier-moon-41.2.3.4Replace1.2.3.4​withyourmoon'sIPv4addressandrep......
  • Docker安装报错处理
    一、安装Docker报错公钥尚未安装              【解决办法】:     1、查看系统版本信息cat/etc/redhat-release                  2、从开源镜像站mirrors.163.com找到系统对应秘钥       ......
  • [办公自动化]信创之WPS演示01
    WPS演示在图片处理时具备布尔运算功能。这个功能可以使你的图片更酷炫。示例图片: 我们先找到一张章鱼的图片,然后在上面输入世界章鱼日,调整字体,选中章鱼的图片,然后选择文本框关键步骤来了选择顶部“绘图工具”选项卡,“合并形状”,“剪除”即可得到上面的效果。 本案例效果......
  • 盘点一个Python自动化办公Excel数据填充实战案例(上篇)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公的问题,一起来看看吧。有个表格,里面每行信息,如下图所示:现在需要将数据贴到另一个文件指定单元格中,另一个文件是这样子的。下图是他的原始数据和他想得到的目标数据,一页有三个,如下所......
  • WSL docker环境中运行StableDiffusion
    教程来源RunningStableDiffusionWebUIUsingDocker|SygilWebUI(sygil-dev.github.io)1.安装运行的依赖环境1.1安装docker (https://docs.docker.com/engine/install/#supported-platforms)1.2 https://docs.nvidia.com/datacenter/cloud-native/container-toolk......
  • Docker镜像操作应用指南
    Docker镜像是Docker生态系统的最重要的概念。本文将介绍它们的基本概念、操作和使用方法,希望可以帮助小伙伴们更好地理解和应用Docker技术。在此之前我们先了解一下Docker架构,可以帮助我们更好的理解Docker镜像操作1.Docker架构我们昨天已经安装了Docker,因此今天才可以操作Do......
  • CentOS下载docker
    1.在安装Docker之前,先说一下配置,我这里是Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可。注意:本文的命令使用的是root用户登录执行,不是root的话所有命令前面要加sudouname-r[root@localhost~]#uname-r3.10.0-1160.el7.x86_64我这里是3.10,满足条件。2.......
  • Docker相关
    原理介绍:https://blog.csdn.net/tianjindong0804/article/details/119302020 常用指令:查看容器(包含未启动的):dockerps-a查看容器配置: dockerinspectname创建并启动一个容器:dockerrun--namename1--privileged=true--systemd=always-dit-p8080:8080,3306:3306im......