1. 程式人生 > >Dockerfile建立映象(ssh,http,nginx,tomcat,supervisor)

Dockerfile建立映象(ssh,http,nginx,tomcat,supervisor)

一,使用Dockerfile建立docker-ssh映象:

mkdir /tmp/docker/Dockerfile
cd  /tmp/docker/Dockerfile

vim Dolcerfile
FROM rhel7        #指定基礎映象
MAINTAINER [email protected]   #作者資訊
ENV HOSTNAME server1   #設定容器主機名
EXPOSE 22    #容器對外開放的埠
COPY dvd.repo /etc/yum/repos.d/dvd.repo     #複製本地檔案到容器中
RUN yum install -y openssh-clients openssh-server && yum clean all && ssh-keygen -t rsa -f
"/etc/ssh/ssh_host_rsa_key" -q -N "" && ssh-keygen -t ecdsa -f "/etc/ssh/ssh_host_ecdsa_key" -q -N "" && ssh-keygen -t ed25519 -f "/etc/ssh/ssh_host_ed25519_key" -q -N "" && echo root:redhat | chpasswd CMD ["/usr/sbin/sshd","-D"] vim dvd.repo [dvd] name=rhel7.3
baseurl=http://172.25.92.250/rhel7.3 gpgcheck=0 在Docerfile的目錄下 docker build -t rhel7:test1 . #建立rhel7:test1映象,包含ssh服務 docker run -d --name vm1 rhel7:test1 #使用rhel7:test1映象建立容器 docker inspect vm1 #檢視容器資訊 ssh [email protected]172.17.0.2 #測試

檢視建立ssh映象的過程:
這裡寫圖片描述

二,使用Dockerfile建立docker-http映象:

mkdir /tmp/docker/Dockerfile
cd /tmp/docker/Dockerfile

[root@foundation92
Dockerfile]# cat Dockerfile FROM rhel7 MAINTAINER ly@test.com ENV HOSTNAME server2 EXPOSE 80 COPY dvd.repo /etc/yum/repos.d/dvd.repo RUN yum install -y httpd && yum clean all VOLUME ["/var/www/html"] CMD ["/usr/sbin/httpd","-D","FOREGROUND"] [root@foundation92 Dockerfile]# cat dvd.repo [dvd] name=rhel7.3 baseurl=http://172.25.92.250/rhel7.3 gpgcheck=0 [root@foundation92 Dockerfile]# pwd /tmp/docker/Dockerfile [root@foundation92 Dockerfile]# docker build -t rhel7:httpd . mkdir /tmp/html cd /tmp/html vim index.html <h1>Docker-httpd create sucessfully!</h1> docker run -d -v /tmp/html/:/var/www/html --name httpd2 rhel7:httpd #建立容器httpd2 docker inspect httpd2 #檢視容器資訊

測試:
這裡寫圖片描述

docker save -o apache.tar rhel7:http #儲存為本地tar檔案。

三,使用Dockerfile建立tomcat映象(rpm):

docker rm -f `docker ps -aq`


mkdir /tmp/docker/Dockerfile
cd /tmp/docker/Dockerfile

[root@foundation92 Dockerfile]# cat Dockerfile 
FROM rhel7
MAINTAINER ly@test.com
ENV HOSTNAME server3
EXPOSE 8080
COPY dvd.repo /etc/yum/repos.d/dvd.repo
RUN yum install -y tomcat && yum clean all
VOLUME ["/var/lib/tomcat/webapps/ROOT"]
CMD ["/usr/libexec/tomcat/server","start"]

[root@foundation92 Dockerfile]# cat dvd.repo 
[dvd]                                                                 
name=rhel7.3
baseurl=http://172.25.92.250/rhel7.3
gpgcheck=0

[root@foundation92 Dockerfile]# pwd
/tmp/docker/Dockerfile
[root@foundation92 Dockerfile]# docker build -t rhel7:tomcat .

[root@foundation92 html]# pwd
/tmp/html
[root@foundation92 html]# cat index.jsp 
Now time is: <%=new java.util.Date()%>

docker run -d --name tomcat1 -p 80:8080 -v /tmp/html/:/var/lib/tomcat/webapps/ROOT rhel7:tomcat

測試:
這裡寫圖片描述
可以看見Tomcat容器建立成功。

使用tomcat原始碼構建tomcat映象:

vim Dockerfile
FROM rhel7
MAINTAINER [email protected].com
ENV HOSTNAME server4
ENV JAVA_HOME /usr/local/jdk1.7.0_79
EXPOSE 8080
ADD jdk-7u79-linux-x64.tar.gz /uar/local/
ADD apache-tomcat-7.0.37.tar.gz /usr/local/
VOLUME ["/usr/lcoal/apache-tomcat-7.0.37/webapps/ROOT"]
CMD ["/usr/local/apache-tomcat-7.0.37/bin/startup.sh"]                          
~                                                         

Dockerfile建立supervisor

CMD 如果只有一個命令,那建立如果我們需要執行多個服務怎麼辦呢?最好的辦法是分別在不同的容器中執行,通過 link 進行連線,比如先前實驗中用到的 web,app,db 容器。如果一定要在一個容器中執行多個服務可以考慮用 Supervisord 來進行程序管理,方式就是將多個啟動命令放入到一個啟動指令碼中。

[root@foundation92 Dockerfile]# pwd
/tmp/docker/Dockerfile
[root@foundation92 Dockerfile]# ls 
Dockerfile  dvd.repo  supervisord.conf

[root@foundation92 Dockerfile]# cat Dockerfile 
FROM rhel7
MAINTAINER test@mirro.com
ENV HOSTNAME server5
EXPOSE 80 22
COPY dvd.repo /etc/yum.repos.d/dvd.repo
RUN yum install -y httpd openssh-clients openssh-server supervisor  && yum clean all && ssh-keygen -t rsa -f "/etc/ssh/ssh_host_rsa_key" -q -N "" && ssh-keygen -t ecdsa -f "/etc/ssh/ssh_host_ecdsa_key" -q -N "" && ssh-keygen -t ed25519 -f "/etc/ssh/ssh_host_ed25519_key" -q -N "" && echo root:westos | chpasswd
COPY supervisord.conf /etc/supervisord.conf
VOLUME ["/var/www/html"]
CMD ["/usr/bin/supervisord"]

[root@foundation92 Dockerfile]# cat dvd.repo 
[dvd]
name=rhel7.3
baseurl=http://172.25.92.250/rhel7.3
gpgcheck=0

[update]
name=update
baseurl=ftp://172.25.92.250/pub/docker           #用於下載supervisor的yum源
gpgcheck=0

[root@foundation92 Dockerfile]# cat supervisord.conf  #配置檔案,如果有多個服務需要啟動可以在檔案後繼續新增[program:xxx]
[supervisord]
nodaemon=true
[program:httpd]
command=/usr/sbin/httpd
[program:sshd]
command=/usr/sbin/sshd -D

[root@foundation92 Dockerfile]# docker build -t rhel7:image1 .  #根據Dockerfile建立映象

[root@foundation92 Dockerfile]# docker run -d --name vm2 -v /tmp/docker/html:/var/www/html rhel7:image1         #建立容器
[root@foundation92 Dockerfile]# ssh 172.17.0.3  
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is 9d:1a:fd:f1:39:d4:8f:c1:34:d0:c9:07:49:e2:07:ec.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.3' (ECDSA) to the list of known hosts.
[email protected]'s password: 
-bash-4.2# yum install -y net-tools
-bash-4.2# netstat -antlp       #可以看見容器對外開方的埠22,80全部開啟
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      9/sshd              
tcp        0      0 172.17.0.3:54663        172.25.92.250:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:54660        172.25.92.250:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:54667        172.25.92.250:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:54664        172.25.92.250:80        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:59728        172.25.92.250:21        TIME_WAIT   -                   
tcp        0      0 172.17.0.3:22           172.17.0.1:49074        ESTABLISHED 20/sshd: root@pts/0 
tcp6       0      0 :::80                   :::*                    LISTEN      10/httpd            
tcp6       0      0 :::22                   :::*                    LISTEN

Dockerfile中常用指令:

  1. 指定容器執行的使用者
    該使用者將作為後續的 RUN 命令執行的使用者。
    一些需要指定用
    戶來執行的應用部署時非常關鍵,比如提供 hadoop 服務的容器通常會使用 hadoop 使用者來啟動服務。
    命令使用方式,例如使用 shiyanlou 使用者來執行後續命令:
    USER shiyanlou

  2. 指定後續命令的執行目錄
    由於我們需要執行的是一個靜態網站,將啟動後的工作目錄切換到/var/www/html 目錄:WORKDIR /var/www/html

  3. 對外連線埠號
    由於內部服務會啟動 Web 服務,我們需要把對應的 80 埠暴露出來,可以提供給容器間互聯使用,可以使用 EXPOSE 命令。
    在映象操作部分增加下面一句:
    EXPOSE 80

  4. 設定容器主機名
    ENV 命令能夠對容器內的環境變數進行設定:
    ENV HOSTNAME sevrer1.example.com

  5. 向映象中增加檔案
    向映象中新增檔案有兩種命令:COPY 和 ADD。
    COPY 命令可以複製本地資料夾到映象中:
    COPY website /var/www/html
    ADD 命令支援新增本地的 tar 壓縮包到容器中指定目錄,壓縮包會被自動解壓為目錄,也可以自動下載 URL 並拷貝到映象,例如:
    ADD html.tar /var/www
    ADD http://www.westos.org/html.tar /var/www
    根據實驗需求,我們把需要的一個網站放到映象裡,需要把一個 tar 包新增到 apache 的
    /var/www 目錄下,因此選擇使用 ADD 命令:
    ADD html.tar /var/www

  6. CMD 與 ENTRYPOINT
    ENTRYPOINT 容器啟動後執行的命令,讓容器執行表現的像一個可執行程式一樣,與CMD 的 區 別 是 不 可 以 被 docker run 覆 蓋 , 會 把 docker run 後 面 的 參 數 當 作 傳 遞 給ENTRYPOINT 指令的引數。Dockerfile 中只能指定一個 ENTRYPOINT,如果指定了很多,只 有 最 後 一 個 有 效 。 docker run 命 令 的 -entrypoint 參 數 可 以 把 指 定 的 參 數 繼 續 傳 遞 給ENTRYPOINT。

  7. 掛載資料卷
    將 apache 訪問的日誌資料儲存到宿主機可以訪問的資料卷中:
    VOLUME [“/var/log/apche2”]

  8. 設定容器內的環境變數
    使用 ENV 設定一些 apache 啟動的環境變數:
    ENV APACHE_RUN_USER www-data
    ENV APACHE_RUN_GROUP www-data
    ENV APACHE_LOG_DIR /var/log/apche2
    ENV APACHE_PID_FILE /var/run/apache2.pid
    ENV APACHE_RUN_DIR /var/run/apache2
    ENV APACHE_LOCK_DIR /var/lock/apche2

相關推薦

Dockerfile建立映象sshhttpnginxtomcat,supervisor

一,使用Dockerfile建立docker-ssh映象: mkdir /tmp/docker/Dockerfile cd /tmp/docker/Dockerfile vim Dolcerfile FROM rhel7 #指定基礎映象

使用Dockerfile建立映象Docker compose部署服務

一、Dockerfile指令簡介 1、FROM指定來源於哪個映象 例如:FROM centos  FROM centos:latest 2、MAINTAINER指定作者資訊 例如:MAINTAINER wyu wyu.com 3、RUN映象操作指令 例如:RUN yu

Docker之搭建2048遊戲四種網路模式的學習容器和管理資料卷的管理Dockerfile建立映象

1.映象管理 物理機上: 軟體包: docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm [

使用Dockerfile建立一個帶 ssh 服務的基礎映象

[[email protected] ~]# docker tag sshd:dockerfile cakin24/sshd:dockerfile [[email protected] ~]# docker images REPOSITORY TAG

influxdb介紹安裝使用等轉載:http://www.jianshu.com/p/d2935e99006e

influxdb是目前比較流行的時間序列資料庫。 何謂時間序列資料庫? 什麼是時間序列資料庫,最簡單的定義就是資料格式裡包含Timestamp欄位的資料,比如某一時間環境的溫度,CPU的使用率等。但是,有什麼資料不包含Timestamp呢?幾乎所有的資料其實都可以打上一個Timestamp欄位。時間序列資料的

Linux兩臺主機之間建立信任ssh免密碼

背景: 有時候我們在兩個主機之間複製檔案的時候,提示輸入密碼,很不方便,那如何免密碼複製呢?,就是使用通過linux公鑰和祕鑰,建立雙機信任關係。 在整理之前,我先說下ssh免密碼的要點 :  你想免密碼登陸到哪個主機哪個使用者, 就把你自己的公鑰檔案內容追加到遠端主

使用Dockerfile建立映象(七)

Dockerfile Dockerfile是一個文字格式的配置檔案,使用者可以使用Dockerfile快速建立自定義的映象。 基本結構 Dockerfile由一行行命令語句組成,並且支援以#開頭的註釋行。 一般而言,Dockerfile分為四個部分:基礎映象資訊

使用Dockerfile建立映象

Dockerfile是一個文字格式的配置檔案 1  基本結構 dockerfile由一行行命令語句組成,以#開頭的是註釋行 主體內容分四部分:   基礎映象資訊   維護者資訊   映象操作指令   容器啟動時執行指令 2 &n

dockerfile建立映象

2018-10-13 Docker 使用Dockerfile建立映象 Dockerfile 是什麼:一個文字格式的配置檔案 能做什麼:快速建立自定義映象 由哪幾部分構成: 基礎映象資訊 維護者資訊 映象操作指令 容器啟動時執行指令 舉例: # escape

[轉]Docker基礎-使用Dockerfile建立映象

本文轉自:https://www.cnblogs.com/jie-fang/p/7927643.html 1、基本結構   Dockerfile由一行行命令語句組成,並支援以#開頭的註釋行。例如: # This dockerfile uses the ubuntu image #

Docker實戰:使用Dockerfile建立映象

#第一行必須指定基於的基礎映象 FROM centos #維護者資訊 MAINTAINER docker_user [email protected] #映象的操作指令 RUN ........ #容器啟動時執行指令 CMD /usr/sbi

docker——Dockerfile建立映象

1 FROM centos 2 3 MAINTAINER yaolin 4 5 COPY jdk1.7.0_79 jdk1.7.0_79 6 ADD websocket.jar app.jar 7 8 ENV JAVA_HOME=/jdk1.7.0_79 9 ENV PATH=$JA

通過dockerfile 建立映象以及更新映象

製作Docker映象 1 安裝 Docker Docker 要求CentOS 系統的核心版本高於 3.10 。 #檢視當前系統的版本 uname -r #安裝 Docker 軟體包和依賴包 yum -y install docker 安裝完成 #從遠端倉庫拉取 

利用Dockerfile建立映象並生成容器

建立Dockerfile(以mysql 5.7為例) 可以從Docker Hub上下載官方Dockerfile,以及docker-entrypoint.sh 具體內容太長,還是在Docker Hu

docker篇:如何建立映象

如何建立映象? 如何修改物件? docker pull tranining/ 下載映象到本地 docker images 檢視映象 docker run -it 映象名字 /bin/bash (啟動這個映象,並且建立一個命令列) 這樣就進入到了

Docker技術入門與實戰 第8章 使用Dockerfile建立映象

Dockerfile是一個文字格式的配置檔案,使用者可以使用Dockerfile來快速建立自定義映象。本章首先介紹Dockerfile典型的基本結構和它支援的眾多指令,並具體講解通過這些指令來編寫定製映象的Dockerfile,以及如何生成映象。最後介紹使用Dockerfil

docker官方映象下載及使用Dockerfile建立映象

2、search centos 3、docker pull centos:7.2.1511 4、建立Dockerfile檔案: [[email protected] centos7.2]# cat Dockerfile FROM centos:7.2.1511

013、Dockerfile構建映象2019-01-02 週三

參考 https://www.cnblogs.com/CloudMan6/p/6830067.html   Dockerfile構建映象過程分析   [email protected]:~/111# ls   

新增服務到開機自動啟動centos7開機自啟動nginxphp-fpm

說明 參考網路上其他人文章。將他人技術文章親自測試並總結補充。 開機自啟動nginx,php-fpm(其他服務類似) centos 7以上是用Systemd進行系統初始化的,Systemd 是 Linux 系統中最新的初始化系統(init),它主要的設計目標是克服

一文總結應用、Web、HTTP伺服器Apache、NginxTomcat、IIS、JBoss、Glassfish等區別

一個學習的總結,或者說是彙總,有些連結給出的觀點過時,已按照自己的理解經過修改編輯; 應用、Web、HTTP伺服器 這篇文章講述典型的Web伺服器的工作原理。 Web伺服器和應用伺服器有什麼區別?EAR和WAR部署包之間的不同? 參考stackove