Dockerfile常用指令介绍指令描述FROM构建的新镜像是基于哪个镜像 。例如:FROM centos:6MAINTAINER镜像维护者姓名或邮箱地址 。例如:MAINTAINER Mr.chenRUN构建镜像时运行的Shell命令 。例如:RUN ["yum","install","httpd"] 或者RUN yum install httpdCMD运行容器时执行的Shell命令(可以被运行时传递的参数覆盖) 。例如:CMD ["-c","/start.sh"] 或者CMD ["/usr/sbin/sshd","-D"]或者CMD /usr/sbin/sshd -DEXPOSE声明容器运行的服务端口 。例如:EXPOSE 80 443ENV设置容器内环境变量 。例如:ENV MYSQL_ROOT_PASSWORD 123456ADD拷贝文件或目录到镜像(可以自动解压缩或者下载) 例如:ADD ["src","dest"]或者ADD https://xxx.com/html.tar.gz /var/www/html 或者:ADD html.tar.gz /var/www/htmlCOPY拷贝文件或目录到镜像(不能自动解压缩) 。例如:COPY ./start.sh /start.shENTRYPOINT运行容器时执行的Shell命令(不能被运行时传递的参数覆盖) 。例如:ENTRYPOINT ["/bin/bash","-c","/start.sh"] 或者ENTRYPOINT /bin/bash -c "/start.sh"VOLUME指定容器挂载点到宿主机自动生成的目录或其他容器 例如:VOLUME ["/var/lib/mysql"]USER为RUN,CMD和ENTRYPOINT执行命令指定运行用户 例如:USER Mr_chenWORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录(指定进入容器中默认被切换的目录) 。 例如:WORKDIR /dataHEALTHCHECK健康检查 。例如:HEALTHCHECK --interval=5m --timeout=3s --retries=3 CMD curl -f http://localhost/ || exit 1ARG在构建镜像时指定一些参数 。例如:ARG user
利用Dockerfile编写简单的nginxWeb镜像#首先开启ipv4转发echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -pnet.ipv4.ip_forward = 1#创建nginx的镜像目录mkdir -p dockerfile/lib/centos/nginxcd dockerfile/lib/centos/nginx#准备Dockerfile文件vim DockerfileFROM 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 installRUN 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配置文件拷贝到当前目录下lsDockerfile nginx-1.12.1.tar.gz nginx.conf#build基于nginx的docker镜像docker build -t nginx:1 .#nginx主配置文件cat conf/nginx.confuser root; worker_processes auto; error_log logs/error.log info;pidlogs/nginx.pid; events {use epoll; }http {includemime.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;sendfileon;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/phpcd /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.confCOPY 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#开启端口9000CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"]#开启php -c 指定主配置文件#将事先准备好的php.ini文件及php-5.6.31.tar.gz拷贝到当前目录下lsDockerfile php-5.6.31.tar.gz php.ini#build基于php的docker镜像docker build -t php:1 .创建nginx-php网络环境,并启动容器#创建一个叫做lnmp的网络docker network create lnmpdad428646d8f8278f36b80b3b960493aee8be1960bb1f505bfeebc97022b6385docker network lsNETWORK IDNAME DRIVERSCOPE0604a9338e1bbridgebridgelocalb68e9da0b1e6host host localdad428646d8flnmp bridgelocalcf4b2d0b4394none null local#创建nginx-php网页挂载目录mkdir -p /www#启动php容器docker run -dit --name lnmp-php --net lnmp --mount type=bind,src=https://tazarkount.com/www,dst=/usr/local/nginx/html php:15b49fc160f9e42364238a937149bbb475036b8a28feddf0fe05c1e70b414a151#启动nginx容器docker run -dit --name lnmp-nginx --net lnmp -p 8888:80 --mount type=bind,src=/www,dst=/usr/local/nginx/html nginx:17ce4d14cf756859e814186090a12b770916f150ed2a5fab2f0dc6ba8c347aab8docker ps -aCONTAINER IDIMAGE COMMANDCREATEDSTATUSPORTSNAMES7ce4d14cf756nginx:1"./sbin/nginx -g 'da…"16 seconds agoUp 15 seconds0.0.0.0:8888->80/tcplnmp-nginx5b49fc160f9ephp:1 "./sbin/php-fpm -c /…"6 minutes agoUp 6 minutes9000/tcp lnmp-php#创建测试页面php.infoecho "" > /www/index.php通过浏览器进行访问测试

文章插图
构建JAVA网站环境镜像#创建java镜像构建存储目录mkdir -p dockerfile/lib/centos/tomcatcd dockerfile/lib/centos/tomcat#将所需软件包拷贝到当前目录下lsapache-tomcat-8.0.46.tar.gz Dockerfile jdk-8u45-linux-x64.tar.gz server.xml#筹备Dockerfilevim DockerfileFROM centos:7MAINTAINER wkADD 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#解压tomcatCOPY 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=https://tazarkount.com/app/,dst=/usr/local/apache-tomcat-8.0.46/webapps tomcat:1docker ps -aCONTAINER IDIMAGE COMMANDCREATEDSTATUSPORTSNAMES15eca19688catomcat:1"./bin/catalina.sh r…"17 seconds agoUp 16 seconds0.0.0.0:8080->8080/tcptomcat7ce4d14cf756nginx:1"./sbin/nginx -g 'da…"2 hours agoUp About an hour0.0.0.0:8888->80/tcplnmp-nginx5b49fc160f9ephp:1 "./sbin/php-fpm -c /…"2 hours agoUp About an hour9000/tcplnmp_php#创建网站测试页mkdir /app/ROOTvim /app/ROOT/index.html ddddddddddddddddddd

文章插图
整套项目一键打包部署Docker Compose用法
Compose是一个定义和管理多容器的工具,使用Python语言编写 。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像,数据卷,网络,映射端口等;然后一条命令管理所有服务,比如启动,停止,重启等
安装
unzip docker-compose-linux-x86_64.zip Archive: docker-compose-linux-x86_64.zip inflating: docker-composell docker-compose-rw-r--r-- 1 root root 8858496 Aug 31 2017 docker-composechmod +x docker-composemv 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相同,但端口不能低于60volumes挂载宿主机路径或命名卷 。如果是命名卷在顶级volumes定义卷名称restart重启策略,默认no,always | on-failure | unless-stoppedhostname容器主机名
常用命令
字段描述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'#容器版本为3services:#容器服务有以下nginx:#nginx的容器hostname: nginx#容器主机名为nginxbuild:#指定dockerfile文件的位置context: ./nginx#dockerfile文件位置在当前路径下的nginx目录里dockerfile: Dockerfile#dockerfile文件名:Dockerfileports:#指定映射端口主机81映射到80- 81:80networks:#指定容器网卡在lnmp网桥- lnmpvolumes:#挂载当前目录下的./wwwroot到容器nginx的网页目录- ./wwwroot:/usr/local/nginx/html php:#和nginx类似hostname: phpbuild:context: ./phpdockerfile: Dockerfilenetworks:- lnmpvolumes:- ./wwwroot:/usr/local/nginx/html mysql:hostname: mysqlimage: mysql:5.6#下载镜像mysql5.6版本ports:- 3306:3306networks:- lnmpvolumes:#挂载mysql主配置文件和数据文件- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysqlcommand: --character-set-server=utf8#执行命令,覆盖默认命令environment:#添加环境变量MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: wordpressMYSQL_USER: userMYSQL_PASSWORD: user123networks:#加入网络lnmp,引用顶级networks下条目 lnmp:#一键部署LNMPdocker-compose -f docker-compose.yml up#-f指定当前目录下的docker-compose为启动文件,up创建和启动容器#一键查看所有部署的容器进程docker-compose -f docker-compose.yml psNameCommand StatePorts-------------------------------------------------------------------------------------composelnmp_mysql_1docker-entrypoint.sh --cha ...Up0.0.0.0:3306->3306/tcp composelnmp_nginx_1./sbin/nginx -g daemon off;Up0.0.0.0:81->80/tcpcomposelnmp_php_1./sbin/php-fpm -c /usr/loc ...Up9000/tcp#一键终止所有部署的容器进程docker-compose -f docker-compose.yml stopStopping composelnmp_nginx_1 ... doneStopping composelnmp_php_1... doneStopping 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: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 82:80networks:- lnmtvolumes:- ./webapps:/opt/webapps tomcat01:hostname: tomcat01build: ./tomcatnetworks:- lnmtvolumes:- /usr/local/jdk1.8.0_45:/usr/local/jdk1.8.0_45- ./webapps:/usr/local/apache-tomcat-8.0.46/webapps tomcat02:hostname: tomcat02build: ./tomcatnetworks:- lnmtvolumes:- /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: mysqlimage: mysql:5.6ports:- 3307:3306networks:- lnmtvolumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: dbMYSQL_USER: userMYSQL_PASSWORD: user123networks: lnmt:每个容器安装JAVA环境,会使容器过大,所以用本地java环境挂在到tomcat容器内,这样节省空间
#由于tomcat容器进程需要挂载docker宿主机本地的java环境#所以在docker宿主机本地安装jdk-8u45-linux-x64.tar.gztar xf jdk-8u45-linux-x64.tar.gz -C /usr/local#一键部署ngxin+tomcat反向代理集群docker-compose -f docker-compose.yml upnginx反向代理配置文件user root; worker_processes auto; error_log logs/error.log info;pidlogs/nginx.pid; events {use epoll; }http {includemime.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;sendfileon;keepalive_timeout 65;upstream www.example.com {#ip_hash;server tomcat01:8080;#在compose的接口文件里定义的hostname主机名可直接解析为IPserver 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;}}}【Docker的镜像制作与整套项目一键打包部署的实现】到此这篇关于Docker的镜像制作与整套项目一键打包部署的实现的文章就介绍到这了,更多相关Docker 镜像制作与打包部署内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
