使用 Dockerfile 定制鏡像
從剛才的 docker commit 的學習中,我們可以了解到,鏡像的定制實際上就是 定制每一層所添加的配置、文件。如果我們可以把每一層修改、安裝、構建、操作 的命令都寫入一個腳本,用這個腳本來構建、定制鏡像,那么之前提及的無法重復 的問題、鏡像構建透明性的問題、體積的問題就都會解決。這個腳本就是 Dockerfile。
示范一:tomcat基礎鏡像
cat Dockerfile
FROM centos
#制定基礎鏡像
MAINTAINER xxxx
RUN mkdir -p /opt/app/tomcat && \
mkdir -p /opt/applog/MskyLog && \
mkdir -p /data/appdatas/cat && \
useradd jboss5 && \
chown -R jboss5:jboss5 /opt/app/tomcat && \
chown -R jboss5:jboss5 /opt/applog/MskyLog && \
chown -R jboss5:jboss5 /data/appdatas/cat
ADD apachetomcatserver.tar.gz /opt/app/tomcat
ADD jdk1.8.0_102.tar.gz /opt/app/tomcat
ENV LANG=en_US.utf8
ENV JAVA_HOME=/opt/app/tomcat/jdk1.8.0_102
ENV PATH=$JAVA_HOME/bin:$PATH
EXPOSE 8180
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
然后,我們使用 Dockerfile 文件,通過 docker build 命令來構建一個鏡像。
docker build -t tomcat_test .
示范二:tomcat具體應用(以xxx為例)
cat Dockerfile
FROM tomcat_test
MAINTAINER xxxx
COPY UmeCar.war /opt/app/tomcat/apachetomcatserver/webapps
USER jboss5
ENTRYPOINT ["/opt/app/tomcat/apachetomcatserver/bin/startup.sh","run"]
docker build -t xxx .
給鏡像打標簽:docker tag
制作完鏡像后根據自己的需要給鏡像打標簽(重起鏡像名稱),將上述制作好的鏡像打一個標簽,通常是以私有倉庫地址為鏡像名稱的。
docker tag tomcat_test 10.237.79.203/test/ tomcat_test
查看鏡像:
[root@docker-bulid test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xxxx latest 5dad1eed56ff 6 minutes ago 780MB
10.237.79.203/test/tomcat_test latest 7304d31c44fe 24 minutes ago 595MB
tomcat_test latest 7304d31c44fe 24 minutes ago 595MB
centos latest 67fa590cfc1c 8 days ago 202MB
將鏡像推送到私有鏡像倉庫中:docker push
使用命令docker push + 鏡像名字:
[root@docker-bulid test]# docker push 10.237.79.203/test/tomcat_test
The push refers to repository [10.237.79.203/test/tomcat_test]
c943684290b7: Pushed
6fdfb7ca8f55: Pushed
7b470a43942f: Pushed
877b494a9f30: Pushed
latest: digest: sha256:2bf7491d7ac220e8d6bdae7d70bc1b90f0f2c500ebb584e0b3cf24b20b8a2932 size: 1162
方法二:執行docker commit
docker commit 是基於已有的容器創建新的鏡像。
docker pull xxx/xxx
docker run -itd xxx/xxx
docker ps -a
進入容器
docekr exec -it id號 /bin/bash
然后更改容器
exit退出
提交新鏡像
docker commit xxxx xxx/xxxx:new