# Dockerfile
# This dockerfile uses the ubuntu image | |
# VERSION 2 - EDITION 1 # Author: docker_user | |
# Command format: Instruction [arguments / command] .. | |
# 基本映像檔,必須是第一個指令 | |
FROM ubuntu | |
# 維護者: docker_user <docker_user at email.com> (@docker_user) | |
MAINTAINER docker_user [email protected] | |
# 更新映像檔的指令 | |
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list | |
RUN apt-get update && apt-get install -y nginx | |
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf | |
# 建立新容器時要執行的指令 | |
CMD /usr/sbin/nginx |
# Dockerfile 基本語法
# Example
FROM centos:7 | |
MAINTAINER jack | |
RUN yum install -y wget | |
RUN cd / | |
ADD jdk-8u152-linux-x64.tar.gz / | |
RUN wget http://apache.stu.edu.tw/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.tar.gz | |
RUN tar zxvf apache-tomcat-7.0.82.tar.gz | |
ENV JAVA_HOME=/jdk1.8.0_152 | |
ENV PATH=$PATH:/jdk1.8.0_152/bin | |
CMD ["/apache-tomcat-7.0.82/bin/catalina.sh", "run"] |
# Dockerfile 實作
已經體驗過使用 Docker 的指令,把 Docker Image Pull 到 local,並且執行 container,然後在 container 上安裝 HTTP Service,就類似是在使用 VM。
# 實作目標:
記住要使用 WSL2 此虛擬機 來實作 Docker
可參考前面 安裝 Windows,或以下訊息
# 第一步:
建立 Dockerfile
建立寫 Dockerfile 會用到的資料夾,指令如下
$ mkdir docker-test $ cd docker-test
下載 JDK 的安裝檔放在 docker-test 資料夾裡,使用的版本是 jdk-19.0.2
下載連結
https://download.java.net/java/GA/jdk19.0.2/fdb695a9d9064ad6b064dc6df578380c/7/GPL/openjdk-19.0.2_linux-x64_bin.tar.gzsudo apt install
將檔案移至路徑 \wsl$\Ubuntu\home\[user name]\docker-test
撰寫 Dockerfile
$ vi Dockerfile
Dockerfile 的內容如下
FROM centos:7
MAINTAINER HsingYu
# 安裝 wget,yum 是 centos 的安裝指令
RUN yum install -y wget
RUN cd /
# 加入 jdk-19.0.2 壓縮檔案,加入後會自動解壓縮
ADD openjdk-19.0.2_linux-x64_bin.tar.gz /
# 下載 apache-tomcat-10.1.7.tar.gz
RUN wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.7/bin/apache-tomcat-10.1.7.tar.gz
# 解壓縮 apache-tomcat-10.1.7.tar.gz
RUN tar zxvf apache-tomcat-10.1.7.tar.gz
# 設置 java 的環境變數
ENV JAVA_HOME=/jdk-19.0.2
ENV PATH=$PATH:/jdk-19.0.2/bin
CMD ["/apache-tomcat-10.1.7/bin/catalina.sh", "run"]
撰寫完 Dockerfile 之後資料夾的結構如下圖
# 第二步:
Build Docker Image
預設在和 Dockerfile 檔案同層的資料夾底下輸入, docker build 指令,如下
$ docker build -t mytomcat . --no-cache
使用 --no-cache 的主要原因,是避免在 Build Docker image 時被 cache 住,而造成沒有 build 到修改過的 Dockerfile。
Build 完的結果如下圖:
Build 完 Docker Image 之後,使用 docker images 指令查看是否有 build 成功如下圖
# 第三步:
在 Build 完 Docker Image 之後就可以執行 Docker Container,這時 Tomcat 的 Service 也會跟者被執行起來,指令如下
在瀏覽器跑
$ docker run -p 8080:8080 mytomcat
在虛擬機跑
$ docker run mytomcat
Tomcat Service 會被執行起來的主要原因是在 Dockerfile 裡面有寫 CMD 指令,呼叫啟動 Tomcat Service
# 第四步:
打開 Browser 確認
- 要打開 Browser 確認 Tomcat Service 有沒有被執行起來時,發現我們不知道 Docker Container 的 IP,這時侯只能使用 docker exec 進入 docker container 查詢 IP 。
要使用 docker exec 指令之前需要先知道 Container 的 ID 所以需要先使用 docker ps 指令查詢 Container ID,如下圖:
# 參考文章
實作撰寫第一個 Dockerfile