前言聲明:
如果您有更好的技術與作者分享,或者商業合作;
請訪問作者個人網站 http://www.esqabc.com/view/message.html 留言給作者。
如果該案例觸犯您的專利,請在這裏:http://www.esqabc.com/view/message.html
留言給作者說明原由,作者一經查實,馬上刪除。
Docker製作image 有兩種方法:
(1) docker commit(就是基於鏡像來進行修改)
(2) 創建 docker build 使用Dockerfile 自動化製作image
具體詳情可以看看這個:https://www.jianshu.com/p/8ee0c8d275cb
1,基於Dockerfile 文件製作(Alpine)鏡像
1,下載一個基礎鏡像(Alpine)
如果不知道怎麼選擇基礎鏡像請看:https://blog.csdn.net/nklinsirui/article/details/80967677
[root@localhost ~]# docker search alpine
[root@localhost ~]# docker pull alpine
[root@localhost ~]# docker images
2,創建文件:Dockerfile
[root@localhost ~]# cd /home/tools
[root@localhost tools]# touch Dockerfile
3,編輯Docker文件
[root@localhost ]# vi /home/tools/Dockerfile
#注意:命令要大寫 #是註解
#基於alpine鏡像創建,既用FROM 後面是告訴docker 我們的鏡像基於什麼來搭建
#如果FROM不存,Docker會自動在倉庫裏面查找,並下載到本地
FROM alpine:latest
#MAINTAINER 後面是鏡像的描述
MAINTAINER esqabc "www.esqabc.com"
#安裝JDK
#把jdk-8u211-linux-x64.tar.gz文件添加到/usr/local
#注意:jdk-8u211-linux-x64.tar.gz文件夾所在的目錄
ADD ./jdk-8u211-linux-x64.tar.gz /usr/local/
RUN rm -rf /usr/local/jdk-8u211-linux-x64.tar.gz
#更換Alpine源爲mirrors.ustc.edu.cn
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.9/main > /etc/apk/repositories && \
echo http://mirrors.ustc.edu.cn/alpine/v3.9/community >> /etc/apk/repositories
RUN apk update && apk upgrade
#Alpine安裝
RUN apk --no-cache add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk && \
apk add glibc-2.29-r0.apk
######設置JAVA變量環境#########
ENV JAVA_HOME=/usr/local/jdk1.8.0_211
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH
CMD ["java","-version"]
4,執行創建鏡像命令
[root@localhost tools]# docker build -t esqabcalpines:v1 .
注意:docker build命令需要Dockerfile文件所在的目錄執行
5,運行剛剛創建的鏡像
[root@localhost ]# docker run -d -it --name esqabcalpine esqabcalpines:v1 /bin/sh
[root@localhost ]# docker ps
出現這個,就說明已經啓動成功
6,如果需要創建鏡像,並且發佈jar項目,只需要修改一個DockerFile文件即可,修改如下
[root@localhost ]# vi /home/tools/Dockerfile
#注意:命令要大寫 #是註解
#基於alpine鏡像創建,既用FROM 後面是告訴docker 我們的鏡像基於什麼來搭建
#如果FROM不存,Docker會自動在倉庫裏面查找,並下載到本地
FROM alpine:latest
#MAINTAINER 後面是鏡像的描述
MAINTAINER esqabc "www.esqabc.com"
#安裝JDK
#把jdk-8u211-linux-x64.tar.gz文件添加到/usr/local
#注意:jdk-8u211-linux-x64.tar.gz文件夾所在的目錄要與DockerFile文件的目錄一致
ADD ./jdk-8u211-linux-x64.tar.gz /usr/local/
RUN rm -rf /usr/local/jdk-8u211-linux-x64.tar.gz
#發佈項目,創建一個目錄/home/tools,並且把項目dockerjar.jar拷貝到/home/tools
#注意:dockerjar.jar文件夾所在的目錄要與DockerFile文件的目錄一致
RUN cd /home && mkdir tools
ADD ./dockerjar.jar /home/tools
#更換Alpine源爲mirrors.ustc.edu.cn
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.9/main > /etc/apk/repositories && \
echo http://mirrors.ustc.edu.cn/alpine/v3.9/community >> /etc/apk/repositories
RUN apk update && apk upgrade
#Alpine安裝
RUN apk --no-cache add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk && \
apk add glibc-2.29-r0.apk
######設置JAVA變量環境#########
ENV JAVA_HOME=/usr/local/jdk1.8.0_211
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH
#開啓內部服務端口
EXPOSE 8888
#啓動服務
CMD java -jar /home/tools/dockerjar.jar
7,運行鏡像
方式1,關閉或者退出容器窗口就會關閉容器,可以看到項目運行的Console輸出
[root@localhost ]# docker run -it --name esqabcalpine -p 8888:8888 esqabcalpines:v1
瀏覽器效果,在瀏覽器輸入:http://localhost:8888或者http://ip:8888
方式2:容器後臺運行,不可以看到項目運行的Console輸出,返回容器ID,項目並沒有啓動,關閉或者退出容器窗口不會關閉容器
[root@localhost ]# docker run -d -it --name esqabcalpine -p 8888:8888 esqabcalpines:v1 /bin/sh
瀏覽器效果,在瀏覽器輸入:http://localhost:8888或者http://ip:8888
造成這種原因是啓動命令的問題,只要修改一下啓動命令就可以了,去掉後面的 /bin/sh
docker run -d -it --name esqabcalpine -p 8888:8888 esqabcalpines:v1
瀏覽器效果,在瀏覽器輸入:http://localhost:8888或者http://ip:8888
8,進入運行中的容器
[root@localhost ~]# docker exec -it esqabcalpine /bin/sh
注意:請用下面的命令退出;
按鍵盤:ctrl+d 退出容器且關閉
按鍵盤:ctrl+p+q 退出容器但不關閉
2,基於Dockerfile 文件製作(centos)鏡像
1,下載一個基礎鏡像(centos)
如果不知道怎麼選擇基礎鏡像請看:https://blog.csdn.net/nklinsirui/article/details/80967677
[root@localhost ~]# docker search centos
[root@localhost ~]# docker pull centos
[root@localhost ~]# docker images
2,創建文件:Dockerfile
[root@localhost ~]# cd /home/tools
[root@localhost tools]# touch Dockerfile
3,編輯Docker文件
[root@localhost ]# vi /home/tools/Dockerfile
#注意:命令要大寫 #是註解
#基於alpine鏡像創建,既用FROM 後面是告訴docker 我們的鏡像基於什麼來搭建
#如果FROM不存,Docker會自動在倉庫裏面查找,並下載到本地
FROM centos:7
#MAINTAINER 後面是鏡像的描述
MAINTAINER esqabc "www.esqabc.com"
# 配置OS環境配置
RUN yum install -y wget
#安裝JDK
#把jdk-8u211-linux-x64.tar.gz文件添加到/usr/local
#注意:jdk-8u211-linux-x64.tar.gz文件夾所在的目錄要與DockerFile文件的目錄一致
ADD ./jdk-8u211-linux-x64.tar.gz /usr/local/
RUN rm -rf /usr/local/jdk-8u211-linux-x64.tar.gz
######設置JAVA變量環境#########
ENV JAVA_HOME=/usr/local/jdk1.8.0_211
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH
# 安裝tomcat
RUN cd /home && mkdir tools
RUN wget -P /home/tools http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.40/bin/apache-tomcat-8.5.40.tar.gz
RUN tar xzf /home/tools/apache-tomcat-8.5.40.tar.gz -C /home/tools && rm -rf /home/tools/apache-tomcat-8.5.40.tar.gz
#把apache-tomcat-8.5.39.tar.gz文件添加到/home/tools
#注意:apache-tomcat-8.5.39.tar.gz文件夾所在的目錄要與DockerFile文件的目錄一致
#ADD ./apache-tomcat-8.5.39.tar.gz /home/tools
#RUN rm -rf /home/tools/apache-tomcat-8.5.39.tar.gz
#打包項目並拷貝到tomcat webapps目錄
RUN cd /home && mkdir webapp
ADD ./dockerweb.war /home/webapp
RUN cd /home/webapp && cp /home/webapp/dockerweb.war /home/tools/apache-tomcat-8.5.40/webapps/
#開啓內部服務端口
EXPOSE 8080
#啓動tomcat服務器
CMD /home/tools/apache-tomcat-8.5.40/bin/startup.sh run && tail -f /home/tools/apache-tomcat-8.5.40/logs/catalina.out
4,執行創建鏡像命令
[root@localhost tools]# docker build -t esqabccentos:v1 .
[root@localhost tools]# docker images
5,運行剛剛創建的鏡像
[root@localhost ]# docker run -d -it --name esqabccento -p 8888:8080 esqabccentos:v1
[root@localhost tools]# docker ps
6,進入容器
[root@vultr tools]# docker exec -it a2e2b156c575 /bin/bash
瀏覽器輸入:http://localhost:8888/dockerweb/或者http://ip:8888/dockerweb/
出現頁面就說明已經成功
注意:
1,在進入容器後,輸入命令沒有反應或者等好久纔有反應的情況;
請用root用戶或者添加權限方式啓動或者進入容器
(1)添加權限啓動
[root@localhost ~]# docker run -i -t --privileged=true --name esqabccento -d -p 8888:8080 9c8e59bb5dae
9c8e59bb5dae :是容器的ID
privileged=true :添加特權
(2)使用root用戶啓動
[root@localhost ~]# docker run -i -t --user root --name esqabccento -d -p 80:8080 9c8e59bb5dae
9c8e59bb5dae :是容器的ID
(3)添加權限進入容器
[root@localhost ~]# docker exec -it --privileged=true cc61f0bf91f3
cc61f0bf91f3 :是容器的ID
privileged=true :添加特權
(4)使用root用戶進入容器
[root@localhost ~]# docker exec -it --user root cc61f0bf91f3
cc61f0bf91f3 :是容器的ID