#首先開(kāi)啟ipv4轉發(fā) echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p net.ipv4.ip_forward = 1 #創(chuàng )建nginx的鏡像目錄 mkdir -p dockerfile/lib/centos/nginx cd dockerfile/lib/centos/nginx #準備Dockerfile文件 vim Dockerfile FROM centos:7 #構建的新鏡像是基于哪個(gè)鏡像(構建的nginx是基于centos7構建的,依賴(lài)centos7的系統支持,如果沒(méi)有鏡像自動(dòng)下載) MAINTAINER wk #鏡像制作人 RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel #構建鏡像時(shí)運行shell命令,yum安裝nginx的依賴(lài)包 ADD nginx-1.12.1.tar.gz /tmp #拷貝文件或目錄到鏡像下,遇到壓縮文件自動(dòng)解壓縮 RUN cd /tmp/nginx-1.12.1 && \ #運行shell命令編譯安裝nginx,make -j 給與2個(gè)線(xiàn)程編譯 ./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設置工作目錄(指定進(jìn)入容器中默認被切換的目錄)。 EXPOSE 80 #聲明容器的端口號 CMD ["./sbin/nginx", "-g", "daemon off;"] #運行容器時(shí)執行的shell命令 -g daemon off 不以守護進(jìn)程的方式開(kāi)啟nginx,即不以后臺運行的方式開(kāi)啟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; } } }
#創(chuàng )建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安裝依賴(lài) ADD php-5.6.31.tar.gz /tmp/ #將安裝包考到 /tmp下并自動(dòng)解壓縮 RUN cd /tmp/php-5.6.31 && \ #編譯安裝php,復制php啟動(dòng)文件.并修改啟動(dòng)文件的配置 ./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主配置文件拷貝進(jìn)去 RUN rm -rf /tmp/php-5.6.31* && yum clean all #刪除不用的文件,清空yum緩存使容器最輕量化 WORKDIR /usr/local/php #進(jìn)入容器的位置,也是php程序的位置 EXPOSE 9000 #開(kāi)啟端口9000 CMD ["./sbin/php-fpm", "-c", "/usr/local/php/etc/php-fpm.conf"] #開(kāi)啟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 .
#創(chuàng )建一個(gè)叫做lnmp的網(wǎng)絡(luò ) 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 #創(chuàng )建nginx-php網(wǎng)頁(yè)掛載目錄 mkdir -p /www #啟動(dòng)php容器 docker run -dit --name lnmp-php --net lnmp --mount type=bind,src=/www,dst=/usr/local/nginx/html php:1 5b49fc160f9e42364238a937149bbb475036b8a28feddf0fe05c1e70b414a151 #啟動(dòng)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 #創(chuàng )建測試頁(yè)面php.info echo "<?php phpinfo();?>" > /www/index.php
通過(guò)瀏覽器進(jìn)行訪(fǎng)問(wèn)測試
#創(chuàng )建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 #創(chuàng )建javaJDK環(huán)境 ENV JAVA_HOME /usr/local/jdk1.8.0_45 #強行生成一個(gè)環(huán)境變量 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 #工作目錄 進(jìn)入容器所在的目錄 EXPOSE 8080 #映射端口 ENTRYPOINT ["./bin/catalina.sh", "run"] #用catalina。sh run前臺啟動(dòng)tomcat #build基于tomcat的鏡像 docker build -t tomcat:1 . #創(chuàng )建網(wǎng)頁(yè)掛載目錄 mkdir -p /app #啟動(dòng)tomcat的容器進(jìn)程 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 #創(chuàng )建網(wǎng)站測試頁(yè) mkdir /app/ROOT vim /app/ROOT/index.html ddddddddddddddddddd
Docker Compose用法
Compose是一個(gè)定義和管理多容器的工具,使用Python語(yǔ)言編寫(xiě)。使用Compose配置文件描述多個(gè)容器應用的架構,比如使用什么鏡像,數據卷,網(wǎng)絡(luò ),映射端口等;然后一條命令管理所有服務(wù),比如啟動(dòng),停止,重啟等
安裝
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文件格式及編寫(xiě)注意事項
YAML是一種標記語(yǔ)言很直觀(guān)的數據序列化格式,可讀性高。類(lèi)似于XML數據描述語(yǔ)言,語(yǔ)法比XML簡(jiǎn)單的很多
YAML數據結構通過(guò)縮進(jìn)來(lái)表示,連續的項目通過(guò)減號來(lái)表示,鍵值對用冒號分隔,數組用中括號括起來(lái),hash用花括號括起來(lái)
YAML文件格式注意事項:
配置文件常用字段
常用命令
一鍵部署LNMP網(wǎng)站平臺
#查看compose_lnmp包 tree /root/compose_lnmp/ /root/compose_lnmp/ ├── docker-compose.yml #docker-compose啟動(dòng)接口文件 ├── 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 #網(wǎng)頁(yè)目錄 └── index.php #默認網(wǎng)頁(yè)文件
vim docker-compose.yml #docker-compose啟動(dòng)接口文件必須是以.yml 結尾 他和ansbile都是python寫(xiě)的 version: '3' #容器版本為3 services: #容器服務(wù)有以下 nginx: #nginx的容器 hostname: nginx #容器主機名為nginx build: #指定dockerfile文件的位置 context: ./nginx #dockerfile文件位置在當前路徑下的nginx目錄里 dockerfile: Dockerfile #dockerfile文件名:Dockerfile ports: #指定映射端口主機81映射到80 - 81:80 networks: #指定容器網(wǎng)卡在lnmp網(wǎng)橋 - lnmp volumes: #掛載當前目錄下的./wwwroot到容器nginx的網(wǎng)頁(yè)目錄 - ./wwwroot:/usr/local/nginx/html php: #和nginx類(lèi)似 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: #添加環(huán)境變量 MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: wordpress MYSQL_USER: user MYSQL_PASSWORD: user123 networks: #加入網(wǎng)絡(luò )lnmp,引用頂級networks下條目 lnmp:
#一鍵部署LNMP docker-compose -f docker-compose.yml up #-f指定當前目錄下的docker-compose為啟動(dòng)文件,up創(chuàng )建和啟動(dòng)容器
#一鍵查看所有部署的容器進(jìn)程 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 #一鍵終止所有部署的容器進(jìn)程 docker-compose -f docker-compose.yml stop Stopping composelnmp_nginx_1 ... done Stopping composelnmp_php_1 ... done Stopping composelnmp_mysql_1 ... done#一鍵啟動(dòng)容器,在后臺運行docker-compose -f docker-compose.yml start #一鍵清理所有部署的容器進(jìn)程 docker-compose -f docker-compose.yml down
#查看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 #網(wǎng)頁(yè)測試文件
#查看docker-compose的啟動(dòng)接口文件 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環(huán)境被掛載了! - ./webapps:/usr/local/apache-tomcat-8.0.46/webapps #掛載網(wǎng)頁(yè)目錄 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:
每個(gè)容器安裝JAVA環(huán)境,會(huì )使容器過(guò)大,所以用本地java環(huán)境掛在到tomcat容器內,這樣節省空間
#由于tomcat容器進(jìn)程需要掛載docker宿主機本地的java環(huán)境 #所以在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; } } }
到此這篇關(guān)于Docker的鏡像制作與整套項目一鍵打包部署的實(shí)現的文章就介紹到這了,更多相關(guān)Docker 鏡像制作與打包部署內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站