Docker自动构建镜像
  DcpJeOZ6VzTX 2023年11月13日 14 0
Dockerfile介绍

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

Dockerfile语法

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

自动构建wordpress镜像

----前期准备------------------
# 安装docker
# 拉基础镜像(这里不拉镜像也行)
# 1.创建wordpress镜像目录
[root@docker01 ~]# mkdir wordpress

# 2.编辑wordpress配置文件
vim bilg.conf
server {
    listen 80;
    server_name _;
    root /code/wordpress;

    location / {
        index index.php index.html;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

# 3.安装nginx_php(这里使用的是打好的包)
root@docker01 wordpress]# ll
total 31044
-rw-r--r-- 1 root root      316 Sep 11 14:47 blog.conf
-rw-r--r-- 1 root root 20682659 Sep 11 14:48 nginx_php.tgz

# 4.准备wordpress代码包
root@docker01 wordpress]# ll
total 31044
-rw-r--r-- 1 root root      316 Sep 11 14:47 blog.conf
-rw-r--r-- 1 root root 20682659 Sep 11 14:48 nginx_php.tgz
-rw-r--r-- 1 root root 11098483 Sep 11 14:46 wordpress-5.0.3-zh_CN.tar.gz

# 5.编辑服务启动脚本
vim start.sh
#!/bin/bash
/sbin/nginx
/sbin/php-fpm
/bin/mysqld_safe --defaults-file=/etc/my.cnf   ## 正常数据库会单独装一台机器,使用这里可以不用装数据库
		----不装数据库,这样写,来卡后台----
		#!/bin/bash
		/sbin/php-fpm
		/sbin/nginx -g "daemon off"

-----编辑自动化构建文件-----
# 编写Dockerfile
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

		-----不装数据库且优化后(MySQL要单独一台机器)----
		FROM centos:7
		ADD nginx_php.tgz /opt
		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 localinstall -y /opt/*.rpm &&\
		mkdir /code &&\
		rm -f /etc/nginx/conf.d/* &&\
		rm -f /opt/* &&\
		yum clean all &&\
		rm -f /etc/yum.repos.d/*
		COPY blog.conf /etc/nginx/conf.d/
		ADD wordpress-5.0.3-zh_CN.tar.gz /code
		EXPOSE 80/tcp 443/tcp
		CMD ["/bin/sh","/start.sh"]
		VOLUME /code/wordpress

----构建镜像--------------------
# 构建镜像docker build
[root@docker01 wordpress]# docker build -t wp:v1 .  (在当前目录下时)
或写绝对路径
[root@docker01 wordpress]# docker build -t wp:v1 /root/wordpress

# 查看镜像
[root@docker01 wordpress]# docker images
REPOSITORY                      TAG             IMAGE ID       CREATED         SIZE
wp                              v1              e35a7d860177   2 minutes ago   1.02GB

# 测试运行一个容器
[root@docker01 wordpress]# docker run --name wp -p 80:80 -d wp:v1
# 浏览器访问
10.0.0.101:80


# 查看日志
docker logs 加容器名或容器id

Dockerfile优化

--优化完镜像会变小--
1)用完包,删除
2)叠层,减少层数,将所有的RUN合并
3)yum缓存一定要清

# 编写Dockerfile
vim Dockerfile

FROM centos:7
ADD nginx_php.tgz /opt
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 &&\
yum localinstall -y /opt/*.rpm &&\
/usr/libexec/mariadb-prepare-db-dir %n &&\
mkdir /code &&\
rm -f /etc/nginx/conf.d/* &&\
rm -f /opt/* &&\
yum clean all &&\
rm -f /etc/yum.repos.d/*
COPY blog.conf /etc/nginx/conf.d/
ADD wordpress-5.0.3-zh_CN.tar.gz /code
EXPOSE 80/tcp 443/tcp
CMD ["/bin/sh","/start.sh"]
VOLUME /code/wordpress


# 构建镜像docker build
[root@docker01 wordpress]# docker build -t wp:v1 .
或绝对路径
[root@docker01 wordpress]# docker build -t wp:v1 /root/wordpress

# 查看镜像(优化后会变小)
[root@docker01 wordpress]# docker images
REPOSITORY                      TAG             IMAGE ID       CREATED              SIZE
wp                              v1              2e3a05e9c6bb   About a minute ago   563MB

# 测试运行一个容器
[root@docker01 wordpress]# docker run --name wp -p 80:80 -d wp:v1
# 浏览器访问
10.0.0.101:80

使用docker运行MySQL

官方文档:https://hub.docker.com/_/mysql

Docker自动构建镜像_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 exec -it mysql57 /bin/bash
# 测试-连接数据库
root@50d698af96e4:/# mysql -uroot -p123


--为保证数据不丢失,需要映射---
# 实操(确保数据不丢失)  (-v /data/mysql:/var/lib/mysql 宿主机的/data/mysql映射到容器/var/lib/mysql)      
docker run --name mysql57 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

# 进入容器
docker exec -it mysql57 /bin/bash
# 测试-连接数据库
root@50d698af96e4:/# mysql -uroot -p123


----环境变量------------------------
# 环境变量
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  

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:v2

#即使数据库被删了,再执行下面的命令即可恢复
[root@docker01 ~]# 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

使用docker启动zabbix

Docker自动构建镜像_docker运行mysql_02

Docker自动构建镜像_dockerfile自动构建镜像_03

跳转至hub官方文档:https://hub.docker.com/r/zabbix/zabbix-server-mysql

https://hub.docker.com/r/zabbix/zabbix-web-nginx-mysql

-#先把数据库镜像拉过来:docker pull mysql:5.7
# 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

------------------------------------------------------------------------------------
-#先把镜像拉过来:docker pull zabbix/zabbix-server-mysql:5.0.37-alpine
# 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

-#解析:
--link zabbix-db \ ##链接数据库
-p 10051:10051 \  ## docker inspect查看暴露端口,然后映射

-----------------------------------------------------------------------------------------------
-#先把镜像拉过来:docker pull  zabbix/zabbix-web-nginx-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

-#解析
--link zabbix-db \   ##链接数据库
--link zabbix-server \   ##链接zabbie服务端
-e PHP_TZ="Asia/Shanghai" \		##修改时区
-p 8080:8080 \	##映射端口(也可以映射数据目录-v /data/zabbix:/var/lib/mysql)

Docker自动构建镜像_docker运行zabbix_04

Docker自动构建镜像_dockerfile自动构建镜像_05

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论