亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Docker的鏡像制作與整套項目一鍵打包部署的實現

瀏覽:3日期:2024-11-05 15:53:01
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']或者ADD https://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 -f http://localhost/ || exit 1 ARG 在構建鏡像時指定一些參數。例如: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;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/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 ID NAMEDRIVER SCOPE0604a9338e1b bridge bridge localb68e9da0b1e6 hosthostlocaldad428646d8f lnmpbridge localcf4b2d0b4394 nonenulllocal#創建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: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 ID IMAGECOMMAND CREATED STATUS PORTS NAMES7ce4d14cf756 nginx:1 './sbin/nginx -g ’da…' 16 seconds ago Up 15 seconds 0.0.0.0:8888->80/tcp lnmp-nginx5b49fc160f9e php:1'./sbin/php-fpm -c /…' 6 minutes ago Up 6 minutes 9000/tcplnmp-php#創建測試頁面php.infoecho '<?php phpinfo();?>' > /www/index.php

通過瀏覽器進行訪問測試

Docker的鏡像制作與整套項目一鍵打包部署的實現

構建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:7 MAINTAINER 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=/app/,dst=/usr/local/apache-tomcat-8.0.46/webapps tomcat:1docker ps -aCONTAINER ID IMAGECOMMAND CREATED STATUS PORTS NAMES15eca19688ca tomcat:1 './bin/catalina.sh r…' 17 seconds ago Up 16 seconds 0.0.0.0:8080->8080/tcp tomcat7ce4d14cf756 nginx:1 './sbin/nginx -g ’da…' 2 hours ago Up About an hour 0.0.0.0:8888->80/tcp lnmp-nginx5b49fc160f9e php:1'./sbin/php-fpm -c /…' 2 hours ago Up About an hour 9000/tcp lnmp_php#創建網站測試頁mkdir /app/ROOTvim /app/ROOT/index.html ddddddddddddddddddd

Docker的鏡像制作與整套項目一鍵打包部署的實現

整套項目一鍵打包部署

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-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相同,但端口不能低于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’   #容器版本為3services: #容器服務有以下  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: user123networks: #加入網絡lnmp,引用頂級networks下條目 lnmp:

#一鍵部署LNMPdocker-compose -f docker-compose.yml up #-f指定當前目錄下的docker-compose為啟動文件,up創建和啟動容器

#一鍵查看所有部署的容器進程docker-compose -f docker-compose.yml ps Name CommandState 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 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: 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: 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 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; } }}

到此這篇關于Docker的鏡像制作與整套項目一鍵打包部署的實現的文章就介紹到這了,更多相關Docker 鏡像制作與打包部署內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Docker
相關文章:
主站蜘蛛池模板: 久久国产精品99久久久久久牛牛 | 高清在线一区二区三区亚洲综合 | 欧美一级看片a免费观看 | 女人被狂躁的视频免费免费看 | 九一精品视频 | 久青草国产高清在线视频 | 国产精品亚洲精品 | 精品毛片 | 国产综合自拍 | 国产一区免费观看 | 2021精品国夜夜天天拍拍 | 欧美男女激情 | 国产精品久久久久久久久久一区 | 在线播放一区二区三区 | 国产精品视频流白浆免费视频 | 欧美最大成人毛片视频网站 | 91精品国产91久久久久久青草 | 国产精品第1页在线观看 | 免费香蕉视频 | 亚洲第一网站免费视频 | 999久久66久6只有精品 | 欧美成人免费在线视频 | 亚洲欧美精品成人久久91 | 奥田咲在线播放 | 成年免费大片黄在线观看一 | 国产首页精品 | 日韩国产成人 | 欧美日韩你懂的 | 中国人xxxxxxx免费看 | 国产玖玖在线观看 | 亚洲欧美综合网 | 免费国产视频 | 日本高清二三四本2021 | 成人一区二区免费中文字幕 | 香蕉免费一区二区三区在线观看 | 免费看欧美毛片大片免费看 | 免费观看性生交大片人 | 成年轻人在线看片 | 成人看片毛片免费播放器 | 99久久er热在这里都是精品66 | 福利片成人午夜在线 |