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中常用指令:
指定容器執行的使用者
該使用者將作為後續的 RUN 命令執行的使用者。
一些需要指定用
戶來執行的應用部署時非常關鍵,比如提供 hadoop 服務的容器通常會使用 hadoop 使用者來啟動服務。
命令使用方式,例如使用 shiyanlou 使用者來執行後續命令:
USER shiyanlou指定後續命令的執行目錄
由於我們需要執行的是一個靜態網站,將啟動後的工作目錄切換到/var/www/html 目錄:WORKDIR /var/www/html對外連線埠號
由於內部服務會啟動 Web 服務,我們需要把對應的 80 埠暴露出來,可以提供給容器間互聯使用,可以使用 EXPOSE 命令。
在映象操作部分增加下面一句:
EXPOSE 80設定容器主機名
ENV 命令能夠對容器內的環境變數進行設定:
ENV HOSTNAME sevrer1.example.com向映象中增加檔案
向映象中新增檔案有兩種命令: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/wwwCMD 與 ENTRYPOINT
ENTRYPOINT 容器啟動後執行的命令,讓容器執行表現的像一個可執行程式一樣,與CMD 的 區 別 是 不 可 以 被 docker run 覆 蓋 , 會 把 docker run 後 面 的 參 數 當 作 傳 遞 給ENTRYPOINT 指令的引數。Dockerfile 中只能指定一個 ENTRYPOINT,如果指定了很多,只 有 最 後 一 個 有 效 。 docker run 命 令 的 -entrypoint 參 數 可 以 把 指 定 的 參 數 繼 續 傳 遞 給ENTRYPOINT。掛載資料卷
將 apache 訪問的日誌資料儲存到宿主機可以訪問的資料卷中:
VOLUME [“/var/log/apche2”]設定容器內的環境變數
使用 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建立映象(ssh,http,nginx,tomcat,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開機自啟動nginx,php-fpm)
說明 參考網路上其他人文章。將他人技術文章親自測試並總結補充。 開機自啟動nginx,php-fpm(其他服務類似) centos 7以上是用Systemd進行系統初始化的,Systemd 是 Linux 系統中最新的初始化系統(init),它主要的設計目標是克服
一文總結應用、Web、HTTP伺服器,Apache、Nginx,Tomcat、IIS、JBoss、Glassfish等區別
一個學習的總結,或者說是彙總,有些連結給出的觀點過時,已按照自己的理解經過修改編輯; 應用、Web、HTTP伺服器 這篇文章講述典型的Web伺服器的工作原理。 Web伺服器和應用伺服器有什麼區別?EAR和WAR部署包之間的不同? 參考stackove