前言声明:
如果您有更好的技术与作者分享,或者商业合作;
请访问作者个人网站 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