文章目录
展开Dockerfile介绍
Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
镜像:中药
dockerfile:配方
dockerfile常用指令
为什么使用Dockerfile?
手动打镜像的缺陷:
1)不支持环境变量
2)容器启动时.自动启动服务
3)不暴露端口
Dockerfile语法
FROM:指定基础镜像
RUN:在基础镜像中.执行命令
CMD:容器启动时.执行的pid为1的进程命令
ENTRYPOINT:容器启动时,执行的pid为1的进程命令(当ENTRYPOINT存在时,如果执行的是一个脚本,那么将CMD中的命令看成是参数)
ADD:将宿主机上的包或文件,传递到容器中(如果是压缩包,则自动解压)
COPY:将宿主机上的包或文件,传递到容器中(如果是压缩包,则不解压)
WORKDIR:指定工作目录
EXPOSE:声明端口
VOLUME:持久化卷,指定目录挂载点ENV:环境变量
LABEL:镜像标签
MAINTAINER:管理者标识(镜像作者)
Dockerfile编写
## 创建一个dockerfile目录并进入
[root@docker01 ~]# mkdir wordpress
[root@docker01 ~]# cd wordpress/
[root@docker01 wordpress]# ll
total 31052
-rw-rw-rw- 1 root root 431 Sep 11 10:09 blog.conf
-rw-r--r-- 1 root root 491 Sep 11 10:37 Dockerfile
-rw-rw-rw- 1 root root 20682659 Sep 11 10:09 nginx_php.tgz
-rw-rw-rw- 1 root root 83 Sep 11 10:09 start.sh
-rw-rw-rw- 1 root root 11098483 Sep 11 10:09 wordpress-5.0.3-zh_CN.tar.gz
## 编写dockerfile
[root@docker01 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 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 -fr /etc/nginx/conf.d/*
COPY blog.conf /etc/nginx/conf.d/
RUN mkdir /code
ADD wordpress-5.0.3-zh_CN.tar.gz /code
ADD start.sh ./
CMD ["/bin/sh","./start.sh"]
## 构建镜像(.为当前目录也可以用绝对路径)
[root@docker01 wordpress]# docker build -t wp:v2 .
[root@docker01 wordpress]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wp v2 4af812fe9cc3 9 hours ago 1.02GB
Dockerfile优化
优化原则:
1)用完包,删除
2)叠层,减少层数,将所有的RUN合并
3)yum缓存一定要清
[root@docker01 wordpress]# vim dockerfile
FROM centos:centos7
ADD nginx_php.tgz /opt/
RUN 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 &&\
yum -y localinstall /opt/*.rpm &&\
mkdir /code &&\
yum -y install mariadb-server.x86_64 &&\
/usr/libexec/mariadb-prepare-db-dir %n &&\
rm -f /opt/* &&\
yum clean all
COPY start.sh /
ADD wordpress-5.0.3-zh_CN.tar.gz /code
COPY boke.conf /etc/nginx/conf.d/
CMD ["/bin/sh","/start.sh"]
EXPOSE 80/tcp 443/tcp
VOLUME /code/wordpress
[root@docker01 wordpress]# docker build -t wp:v3 .
[root@docker01 wordpress]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wp v3 f742ff71f1e3 9 hours ago 1.02GB
使用docker运行MySQL
镜像地址:https://hub.docker.com/_/mysql/tags
#1.拉取镜像
[root@docker01 ~]# docker pull mysql:5.7
#2.查看本地镜像
[root@docker01 ~]# docker images
mysql 5.7 92034fe9a41f 5 weeks ago 581MB
#3.启动镜像
[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
参数说明:
--name mysql57 #定于镜像名称为MySQL57
-v /data/mysql:/var/lib/mysql #将镜像的/var/lib/mysql数据目录映射为宿主机的/data/mysql
-e MYSQL_ROOT_PASSWORD=123 #设置 MySQL 服务 root 用户的密码为123
-e MYSQL_DATABASE='wordpress' #创建wordpress库
-e MYSQL_USER='wp_user' #指定库的授权用户为wp_user
-e MYSQL_PASSWORD='111' #指定库密码为111
-p 3306:3306 #将镜像的端口3306映射到宿主机的3306端口
-d mysql:5.7 #在后台运行容器名称为mysql:5.7
#4.查看镜像
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
ac4438581327 mysql:5.7 "docker-entrypoint.s…" 4 hours ago Up 4 hours 33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp zabbix-db
#5.使用宿主机进行登录并查看
[root@docker02 ~]# mysql -uwp_user -p111 -h 127.0.0.1
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.43 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| wordpress |
+--------------------+
2 rows in set (0.01 sec)
容器通信
容器的单向通信
[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
7c66f800ebbd3d106fe0ff319a82ec06c67e12e58a29adba4b6609256b011b3e
[root@docker01 ~]# docker run --name wp -p 80:80 --link mysql57 -d wp:v2
846291be5c5d9ee57693597723a8d09a83b1d04a6410af575b7d3508e8f642b3
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
846291be5c5d wp:v2 "/bin/sh ./start.sh" 19 seconds ago Up 18 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wp
7c66f800ebbd mysql:5.7 "docker-entrypoint.s…" 54 seconds ago Up 54 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql57
[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
7c66f800ebbd3d106fe0ff319a82ec06c67e12e58a29adba4b6609256b011b3e
[root@docker01 ~]# docker run --name wp -p 80:80 --link mysql57 -d wp:v2
846291be5c5d9ee57693597723a8d09a83b1d04a6410af575b7d3508e8f642b3
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
846291be5c5d wp:v2 "/bin/sh ./start.sh" 19 seconds ago Up 18 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp wp
7c66f800ebbd mysql:5.7 "docker-entrypoint.s…" 54 seconds ago Up 54 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql57
## 授权
[root@docker01 ~]# docker exec -it wp /bin/bash
[root@846291be5c5d /]# chown -R apache.apache /code/wordpress/
## 重新访问
启动nginx 启动php
nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize
使用docker搭建zabbix(5.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
Comments | NOTHING