Docker的镜像制作与整套项目一键打包部署的实现

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

Dockerfile常用指令介绍

指令 描述 FROM 构建的新镜像是基于哪个镜像。例如:FROM centos:6 MAINTAINER 镜像维护者姓名或邮箱地址。例如:MAINTAINER Mr.chen RUN 构建镜像时运行的Shell命令。例如:RUN [“yum”,”install”,”httpd”] 或者RUN yum install httpd CMD 运行容器时执行的Shell命令(可以被运行时传递的参数覆盖)。例如:CMD [“-c”,”/start.sh”] 或者CMD [“/usr/sbin/sshd”,”-D”]或者CMD /usr/sbin/sshd -D EXPOSE 声明容器运行的服务端口。例如:EXPOSE 80 443 ENV 设置容器内环境变量。例如:ENV MYSQL_ROOT_PASSWORD 123456 ADD 拷贝文件或目录到镜像(可以自动解压缩或者下载) 例如:ADD [“src”,”dest”]或者ADDhttps://xxx.com/html.tar.gz/var/www/html 或者:ADD html.tar.gz /var/www/html COPY 拷贝文件或目录到镜像(不能自动解压缩)。例如:COPY ./start.sh /start.sh ENTRYPOINT 运行容器时执行的Shell命令(不能被运行时传递的参数覆盖)。例如:ENTRYPOINT [“/bin/bash”,”-c”,”/start.sh”] 或者ENTRYPOINT /bin/bash -c “/start.sh” VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器 例如:VOLUME [“/var/lib/mysql”] USER 为RUN,CMD和ENTRYPOINT执行命令指定运行用户 例如:USER Mr_chen WORKDIR 为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录(指定进入容器中默认被切换的目录)。 例如:WORKDIR /data HEALTHCHECK 健康检查。例如:HEALTHCHECK –interval=5m –timeout=3s –retries=3 CMD curl -fhttp://localhost/|| exit 1 ARG 在构建镜像时指定一些参数。例如:ARG user

利用Dockerfile编写简单的nginxWeb镜像

#首先开启ipv4转发 echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf sysctl -p net.ipv4.ip_forward = 1 #创建nginx的镜像目录 mkdir -p dockerfile/lib/centos/nginx cd dockerfile/lib/centos/nginx #准备Dockerfile文件 vim Dockerfile FROM centos:7 #构建的新镜像是基于哪个镜像(构建的nginx是基于centos7构建的,依赖centos7的系统支持,如果没有镜像自动下载) MAINTAINER wk #镜像制作人 RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel #构建镜像时运行shell命令,yum安装nginx的依赖包 ADD nginx-1.12.1.tar.gz /tmp #拷贝文件或目录到镜像下,遇到压缩文件自动解压缩 RUN cd /tmp/nginx-1.12.1 && #运行shell命令编译安装nginx,make -j 给与2个线程编译 ./configure –prefix=/usr/local/nginx && make -j 2 && make install RUN rm -rf /tmp/nginx-1.12.1* && yum clean all      #删除nginx源码包和清空yum缓存,使容器最轻量化 COPY nginx.conf /usr/local/nginx/conf #拷贝文件或目录到镜像 WORKDIR /usr/local/nginx                   #为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录(指定进入容器中默认被切换的目录)。 EXPOSE 80                            #声明容器的端口号 CMD [“./sbin/nginx”, “-g”, “daemon off;”]         #运行容器时执行的shell命令 -g daemon off 不以守护进程的方式开启nginx,即不以后台运行的方式开启nginx #将事先准备好的nginx-1.12.1.tar.gz和nginx.conf配置文件拷贝到当前目录下 ls Dockerfile nginx-1.12.1.tar.gz nginx.conf #build基于nginx的docker镜像 docker build -t nginx:1 . #nginx主配置文件cat conf/nginx.conf user root; worker_processes auto; error_log logs/error.log info; pid logs/nginx.pid; events { use epoll; } http { include mime.types; default_type application/octet-stream; log_format main $remote_addr – $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” “$http_x_forwarded_for”; access_log logs/access.log main; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; root html; index index.html index.php; location ~ .php$ { root html; fastcgi_pass lnmp_php:9000; #lnmp_ph为php容器主机名,对应的就是php的IP地址 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } }

构建PHP网站平台镜像

#创建php的镜像目录 mkdir -p /root/dockerfile/lib/centos/php cd /root/dockerfile/lib/centos/php #准备Dockerfile文件 vim Dockerfile FROM centos:7 #新镜像基于centos7镜像 MAINTAINER wk     #新镜像制作人 RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel      #运行shell安装依赖 ADD php-5.6.31.tar.gz /tmp/ #将安装包考到 /tmp下并自动解压缩 RUN cd /tmp/php-5.6.31 &&         #编译安装php,复制php启动文件.并修改启动文件的配置 ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc –with-mysql –with-mysqli –with-openssl –with-zlib –with-curl –with-gd –with-jpeg-dir –with-png-dir –with-iconv –enable-fpm –enable-zip –enable-mbstring && make -j 4 && make install && cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && sed -i “s/127.0.0.1/0.0.0.0/” /usr/local/php/etc/php-fpm.conf && sed -i “21a daemonize = no” /usr/local/php/etc/php-fpm.conf COPY php.ini /usr/local/php/etc        #将php主配置文件拷贝进去 RUN rm -rf /tmp/php-5.6.31* && yum clean all #删除不用的文件,清空yum缓存使容器最轻量化 WORKDIR /usr/local/php        #进入容器的位置,也是php程序的位置 EXPOSE 9000               #开启端口9000 CMD [“./sbin/php-fpm”, “-c”, “/usr/local/php/etc/php-fpm.conf”]    #开启php -c 指定主配置文件 #将事先准备好的php.ini文件及php-5.6.31.tar.gz拷贝到当前目录下 ls Dockerfile php-5.6.31.tar.gz php.ini #build基于php的docker镜像 docker build -t php:1 .

创建nginx-php网络环境,并启动容器

#创建一个叫做lnmp的网络 docker network create lnmp dad428646d8f8278f36b80b3b960493aee8be1960bb1f505bfeebc97022b6385 docker network ls NETWORK ID NAME DRIVER SCOPE 0604a9338e1b bridge bridge local b68e9da0b1e6 host host local dad428646d8f lnmp bridge local cf4b2d0b4394 none null local #创建nginx-php网页挂载目录 mkdir -p /www #启动php容器 docker run -dit –name lnmp-php –net lnmp –mount type=bind,src=/www,dst=/usr/local/nginx/html php:1 5b49fc160f9e42364238a937149bbb475036b8a28feddf0fe05c1e70b414a151 #启动nginx容器 docker run -dit –name lnmp-nginx –net lnmp -p 8888:80 –mount type=bind,src=/www,dst=/usr/local/nginx/html nginx:1 7ce4d14cf756859e814186090a12b770916f150ed2a5fab2f0dc6ba8c347aab8 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ce4d14cf756 nginx:1 “./sbin/nginx -g da…” 16 seconds ago Up 15 seconds 0.0.0.0:8888->80/tcp lnmp-nginx 5b49fc160f9e php:1 “./sbin/php-fpm -c /…” 6 minutes ago Up 6 minutes 9000/tcp lnmp-php #创建测试页面php.info echo “<?php phpinfo();?>” > /www/index.php

通过浏览器进行访问测试

Docker的镜像制作与整套项目一键打包部署的实现插图

构建JAVA网站环境镜像

#创建java镜像构建存储目录 mkdir -p dockerfile/lib/centos/tomcat cd dockerfile/lib/centos/tomcat #将所需软件包拷贝到当前目录下 ls apache-tomcat-8.0.46.tar.gz Dockerfile jdk-8u45-linux-x64.tar.gz server.xml #筹备Dockerfile vim Dockerfile FROM centos:7 MAINTAINER wk ADD jdk-8u45-linux-x64.tar.gz /usr/local #创建javaJDK环境 ENV JAVA_HOME /usr/local/jdk1.8.0_45       #强行生成一个环境变量 ADD apache-tomcat-8.0.46.tar.gz /usr/local    #解压tomcat COPY server.xml /usr/local/apache-tomcat-8.0.46/conf   #复制配置文件 RUN rm -f /usr/local/*.tar.gz            #删除安装包 容器轻量化 WORKDIR /usr/local/apache-tomcat-8.0.46      #工作目录 进入容器所在的目录 EXPOSE 8080                       #映射端口 ENTRYPOINT [“./bin/catalina.sh”, “run”]      #用catalina。sh run前台启动tomcat #build基于tomcat的镜像 docker build -t tomcat:1 . #创建网页挂载目录 mkdir -p /app #启动tomcat的容器进程 docker run -dit –name=tomcat -p 8080:8080 –network lnmp –mount type=bind,src=/app/,dst=/usr/local/apache-tomcat-8.0.46/webapps tomcat:1 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15eca19688ca tomcat:1 “./bin/catalina.sh r…” 17 seconds ago Up 16 seconds 0.0.0.0:8080->8080/tcp tomcat 7ce4d14cf756 nginx:1 “./sbin/nginx -g da…” 2 hours ago Up About an hour 0.0.0.0:8888->80/tcp lnmp-nginx 5b49fc160f9e php:1 “./sbin/php-fpm -c /…” 2 hours ago Up About an hour 9000/tcp lnmp_php #创建网站测试页 mkdir /app/ROOT vim /app/ROOT/index.html ddddddddddddddddddd

Docker的镜像制作与整套项目一键打包部署的实现插图1

整套项目一键打包部署

Docker Compose用法

Compose是一个定义和管理多容器的工具,使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像,数据卷,网络,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启等

安装

unzip docker-compose-linux-x86_64.zip Archive: docker-compose-linux-x86_64.zip inflating: docker-compose ll docker-compose -rw-r–r– 1 root root 8858496 Aug 31 2017 docker-compose chmod +x docker-compose mv docker-compose /usr/bin/

YAML文件格式及编写注意事项

YAML是一种标记语言很直观的数据序列化格式,可读性高。类似于XML数据描述语言,语法比XML简单的很多

YAML数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号括起来,hash用花括号括起来

YAML文件格式注意事项:

不支持制表符tab键缩进,需要使用空格缩进 通常开头缩进2个空格 字符后缩进1个空格,如冒号,逗号,横杆 用井号注释 如果包含特殊字符用单引号引起来 布尔值(true,false,yes,no,on,off)必须用引号括起来,这样分析器会将他们解释为字符串。

配置文件常用字段

字段 描述 build 下级字段dockerfile:指定Dockerfile文件名 下级字段context;构建镜像上下文路径 image 指定镜像 command 执行命令,覆盖默认命令 container_name 指定容器名称 deploy 指定部署和运行服务相关配置,只能在Swarm模式使用 environment 添加环境变量 networks 加入网络,引用顶级networks下条目 ports 暴露端口,与-p相同,但端口不能低于60 volumes 挂载宿主机路径或命名卷。如果是命名卷在顶级volumes定义卷名称 restart 重启策略,默认no,always | on-failure | unless-stopped hostname

容器主机名

常用命令

字段 描述 build 重新构建服务 ps 列出容器 up 创建和启动容器 exec 在容器里执行命令 scale 指定一个服务容器启动数量 top 显示容器进程 logs 查看容器输出 down 删除容器,网络,数据卷和镜像 stop/start/restart 停止/启动/重启服务

一键部署LNMP网站平台

#查看compose_lnmp包 tree /root/compose_lnmp/ /root/compose_lnmp/ ├── docker-compose.yml #docker-compose启动接口文件 ├── mysql │   ├── conf │   │   └── my.cnf #mysql配置文件 │   └── data #待挂载mysql数据目录 ├── nginx │   ├── Dockerfile #自定义nginx的Docker镜像配置文件 │   ├── nginx-1.12.1.tar.gz #nginx源码包 │   └── nginx.conf #nginx配置文件 ├── php │   ├── Dockerfile #自定义php的docker镜像文件 │   ├── php-5.6.31.tar.gz #php源码包 │   └── php.ini #php配置文件 └── wwwroot #网页目录 └── index.php #默认网页文件 vim docker-compose.yml    #docker-compose启动接口文件必须是以.yml 结尾 他和ansbile都是python写的 version: 3           #容器版本为3 services:             #容器服务有以下  nginx:              #nginx的容器 hostname: nginx       #容器主机名为nginx build: #指定dockerfile文件的位置 context: ./nginx      #dockerfile文件位置在当前路径下的nginx目录里 dockerfile: Dockerfile #dockerfile文件名:Dockerfile ports:             #指定映射端口主机81映射到80 – 81:80 networks: #指定容器网卡在lnmp网桥 – lnmp volumes: #挂载当前目录下的./wwwroot到容器nginx的网页目录 – ./wwwroot:/usr/local/nginx/html php:   #和nginx类似 hostname: php build: context: ./php dockerfile: Dockerfile networks: – lnmp volumes: – ./wwwroot:/usr/local/nginx/html mysql: hostname: mysql image: mysql:5.6 #下载镜像mysql5.6版本 ports: – 3306:3306 networks: – lnmp volumes: #挂载mysql主配置文件和数据文件 – ./mysql/conf:/etc/mysql/conf.d – ./mysql/data:/var/lib/mysql command: –character-set-server=utf8 #执行命令,覆盖默认命令 environment: #添加环境变量 MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: user123 networks: #加入网络lnmp,引用顶级networks下条目 lnmp: #一键部署LNMP docker-compose -f docker-compose.yml up #-f指定当前目录下的docker-compose为启动文件,up创建和启动容器 #一键查看所有部署的容器进程 docker-compose -f docker-compose.yml ps Name Command State Ports ————————————————————————————- composelnmp_mysql_1 docker-entrypoint.sh –cha … Up 0.0.0.0:3306->3306/tcp composelnmp_nginx_1 ./sbin/nginx -g daemon off; Up 0.0.0.0:81->80/tcp composelnmp_php_1 ./sbin/php-fpm -c /usr/loc … Up 9000/tcp #一键终止所有部署的容器进程 docker-compose -f docker-compose.yml stop Stopping composelnmp_nginx_1 … done Stopping composelnmp_php_1 … done Stopping composelnmp_mysql_1 … done#一键启动容器,在后台运行docker-compose -f docker-compose.yml start #一键清理所有部署的容器进程 docker-compose -f docker-compose.yml down

一键部署Nginx反向代理Tomcat集群实战

#查看compose_nginx_tomcat包 [root@docker ~]# tree compose_nginx_tomcat/ compose_nginx_tomcat/ ├── docker-compose.yml ├── mysql │ ├── conf │ │ └── my.cnf #mysql的配置文件 │ └── data #待挂载mysql数据目录 ├── nginx │ ├── Dockerfile #自定义镜像配置文件 │ ├── nginx-1.12.1.tar.gz #源码包 │ └── nginx.conf #nginx配置文件 ├── tomcat │ ├── apache-tomcat-8.0.46.tar.gz #源码包 │ ├── Dockerfile #自定义镜像配置文件 │ └── server.xml #tomcat配置文件 └── webapps └── ROOT └── index.html #网页测试文件 #查看docker-compose的启动接口文件 cat compose_nginx_tomcat/docker-compose.yml version: 3 services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: – 82:80 networks: – lnmt volumes: – ./webapps:/opt/webapps tomcat01: hostname: tomcat01 build: ./tomcat networks: – lnmt volumes: – /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45 – ./webapps:/usr/local/apache-tomcat-8.0.46/webapps tomcat02: hostname: tomcat02 build: ./tomcat networks: – lnmt volumes: – /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45 #docker宿主机的java环境被挂载了! – ./webapps:/usr/local/apache-tomcat-8.0.46/webapps #挂载网页目录 mysql: hostname: mysql image: mysql:5.6 ports: – 3307:3306 networks: – lnmt volumes: – ./mysql/conf:/etc/mysql/conf.d – ./mysql/data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: db MYSQL_USER: user MYSQL_PASSWORD: user123 networks: lnmt:

每个容器安装JAVA环境,会使容器过大,所以用本地java环境挂在到tomcat容器内,这样节省空间

#由于tomcat容器进程需要挂载docker宿主机本地的java环境 #所以在docker宿主机本地安装jdk-8u45-linux-x64.tar.gz tar xf jdk-8u45-linux-x64.tar.gz -C /usr/local #一键部署ngxin+tomcat反向代理集群 docker-compose -f docker-compose.yml up nginx反向代理配置文件 user root; worker_processes auto; error_log logs/error.log info; pid logs/nginx.pid; events { use epoll; } http { include mime.types; default_type application/octet-stream; log_format main $remote_addr – $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” “$http_x_forwarded_for”; access_log logs/access.log main; sendfile on; keepalive_timeout 65; upstream www.example.com { #ip_hash; server tomcat01:8080; #在compose的接口文件里定义的hostname主机名可直接解析为IP server tomcat02:8080; } server { listen 80; server_name localhost; location / { proxy_pass http://www.example.com; } location ~ .(html|css|js|jpg|png|gif)$ { root /opt/webapps/ROOT; } } }
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容