文章目录
一、Dockerfile是什么?
基础知识
- 每个保留关键字(指令)都是必须大写字母
- 执行从上到下顺序执行
- #表示注释
- 每个指令都会创建提交一个新的镜像层。
DockerFile指令说明
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤, tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令, 可以追加命令
ONBUILD # 当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY # 类似ADD, 将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量
二、Dockerfile构建过程
- Dockerfile制作tomcat镜像
准备工作:
编写Dockerfile文件,官方命名Dockerfile, build会自动寻找这个文件,就不需要-f指定了
[root@node1 dockerfile]# vim Dockerfile
FROM centos
MAINTAINER anzj<2820524218@qq.com>
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.1.tar.gz /usr/local/
#设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_181
#设置环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#设置环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.1
#设置环境变量
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.1
#设置环境变量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
ENTRYPOINT ["/usr/local/apache-tomcat-9.0.1/bin/catalina.sh","run"]
构建tomcat镜像
[root@node1 dockerfile]# docker build -t diytomcat:v1 .
Sending build context to Docker daemon 195MB
Step 1/11 : FROM centos
---> 300e315adb2f
Step 2/11 : MAINTAINER anzj<2820524218@qq.com>
---> Running in 5bf0290aa049
Removing intermediate container 5bf0290aa049
---> e3199577d9e8
Step 3/11 : ADD jdk-8u181-linux-x64.tar.gz /usr/local/
---> 084375553de5
Step 4/11 : ADD apache-tomcat-9.0.1.tar.gz /usr/local/
---> ab42286a7da3
Step 5/11 : ENV JAVA_HOME /usr/local/jdk1.8.0_181
---> Running in 2db697d2b9e7
Removing intermediate container 2db697d2b9e7
---> 653fbce1feb0
Step 6/11 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in d6a792fc4bda
Removing intermediate container d6a792fc4bda
---> 28e00a12f9a0
Step 7/11 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.1
---> Running in 6c9fb21994ae
Removing intermediate container 6c9fb21994ae
---> 0f9d060023b8
Step 8/11 : ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.1
---> Running in 94a0a016f8c0
Removing intermediate container 94a0a016f8c0
---> ad155138d1b0
Step 9/11 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in 2ce704d98fa9
Removing intermediate container 2ce704d98fa9
---> f5580da2fef8
Step 10/11 : EXPOSE 8080
---> Running in 847bd9549d11
Removing intermediate container 847bd9549d11
---> 8a3ac408faa0
Step 11/11 : ENTRYPOINT ["/usr/local/apache-tomcat-9.0.1/bin/catalina.sh","run"]
---> Running in ff0466f233e7
Removing intermediate container ff0466f233e7
---> 7e78ebfe09e4
Successfully built 7e78ebfe09e4
Successfully tagged diytomcat:v1
[root@node1 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat v1 7e78ebfe09e4 6 seconds ago 604MB
prom/node-exporter latest b8a614cef113 45 hours ago 21.2MB
quay.io/coreos/flannel v0.14.0 8522d622299c 2 months ago 67.9MB
centos latest 300e315adb2f 7 months ago 209MB
kubernetesui/dashboard v2.0.1 85d666cddd04 14 months ago 223MB
registry.aliyuncs.com/google_containers/kube-proxy v1.18.0 43940c34f24f 15 months ago 117MB
registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 17 months ago 683kB
tomcat 7-alpine 81cd9536b1e6 2 years ago 147MB
vmware/harbor-log v1.2.0 c7887347f435 3 years ago 200MB
vmware/harbor-jobservice v1.2.0 1fb18427db11 3 years ago 164MB
vmware/harbor-ui v1.2.0 b7069ac3bd4b 3 years ago 178MB
vmware/harbor-adminserver v1.2.0 a18331f0c1ae 3 years ago 142MB
vmware/harbor-db v1.2.0 deb8033b1c86 3 years ago 329MB
vmware/registry 2.6.2-photon 5d9100e4350e 3 years ago 173MB
vmware/nginx-photon 1.11.13 285492ff20d6 4 years ago 147MB
grafana/grafana 4.2.0 8c4ef64b4ad1 4 years ago 278MB
启动镜像
# docker run -d -p 9090:8080 --name mytomcat diytomcat:v1
访问测试
三、推送到DockerHub
- 1、注册账号:https://hub.docker.com/
- 2、通过命令行登录
[root@node1 dockerfile]# docker login -u anapp #DockerID 唯一的
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3.打一个tag
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
[root@node1 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat v1 7e78ebfe09e4 32 minutes ago 604MB
prom/node-exporter latest b8a614cef113 45 hours ago 21.2MB
quay.io/coreos/flannel v0.14.0 8522d622299c 2 months ago 67.9MB
centos latest 300e315adb2f 7 months ago 209MB
kubernetesui/dashboard v2.0.1 85d666cddd04 14 months ago 223MB
registry.aliyuncs.com/google_containers/kube-proxy v1.18.0 43940c34f24f 15 months ago 117MB
registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 17 months ago 683kB
tomcat 7-alpine 81cd9536b1e6 2 years ago 147MB
vmware/harbor-log v1.2.0 c7887347f435 3 years ago 200MB
vmware/harbor-jobservice v1.2.0 1fb18427db11 3 years ago 164MB
vmware/harbor-ui v1.2.0 b7069ac3bd4b 3 years ago 178MB
vmware/harbor-adminserver v1.2.0 a18331f0c1ae 3 years ago 142MB
vmware/harbor-db v1.2.0 deb8033b1c86 3 years ago 329MB
vmware/registry 2.6.2-photon 5d9100e4350e 3 years ago 173MB
vmware/nginx-photon 1.11.13 285492ff20d6 4 years ago 147MB
grafana/grafana 4.2.0 8c4ef64b4ad1 4 years ago 278MB
[root@node1 dockerfile]# docker tag diytomcat:v1 anapp/tomcat:v1 # anapp一定是DockerID 否则提交不成功
[root@node1 dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
anapp/tomcat v1 7e78ebfe09e4 32 minutes ago 604MB
diytomcat v1 7e78ebfe09e4 32 minutes ago 604MB
prom/node-exporter latest b8a614cef113 45 hours ago 21.2MB
quay.io/coreos/flannel v0.14.0 8522d622299c 2 months ago 67.9MB
centos latest 300e315adb2f 7 months ago 209MB
kubernetesui/dashboard v2.0.1 85d666cddd04 14 months ago 223MB
registry.aliyuncs.com/google_containers/kube-proxy v1.18.0 43940c34f24f 15 months ago 117MB
registry.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 17 months ago 683kB
tomcat 7-alpine 81cd9536b1e6 2 years ago 147MB
vmware/harbor-log v1.2.0 c7887347f435 3 years ago 200MB
vmware/harbor-jobservice v1.2.0 1fb18427db11 3 years ago 164MB
vmware/harbor-ui v1.2.0 b7069ac3bd4b 3 years ago 178MB
vmware/harbor-adminserver v1.2.0 a18331f0c1ae 3 years ago 142MB
vmware/harbor-db v1.2.0 deb8033b1c86 3 years ago 329MB
vmware/registry 2.6.2-photon 5d9100e4350e 3 years ago 173MB
vmware/nginx-photon 1.11.13 285492ff20d6 4 years ago 147MB
grafana/grafana 4.2.0 8c4ef64b4ad1 4
years ago 278MB
4.下载镜像
docker push anapp/tomcat:tagname
四、推送到阿里云仓库
- 登录阿里云控制台
- 创建命名空间
-
点击刚刚创建的仓库
-
按照命令下面的命令执行即可
root@node1 src]# docker tag 7e78ebfe09e4 registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp:v2
[root@node1 src]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
anapp/tomcat v1 7e78ebfe09e4 19 hours ago 604MB
registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp v2 7e78ebfe09e4 19 hours ago 604MB
[root@node1 src]# docker push registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp:v2
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp]
73ead83820ce: Pushed
f54b866f0424: Pushed
2653d992f4ef: Pushed
v2: digest: sha256:a728fd02694be39a0669897ed060dc386db06a4d235205e45739cd47001896f1 size: 953
[root@node1 src]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp v2 7e78ebfe09e4 19 hours ago 604MB
# 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp:[镜像版本号]
五、部署tomcat和web应用
1、k8s部署tomcat
- 目录结构:
[root@ecs-431f-0001 tomcat]## vim tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: registry.cn-hangzhou.aliyuncs.com/anzhijie/anapp:v2 #阿里云下载到本地的镜像
ports:
- containerPort: 8080
[root@ecs-431f-0001 tomcat]# kubectl -creat -f tomcat-deployment.yaml
[root@ecs-431f-0001 tomcat]# vim tomcat-service.yaml
kind: Service
apiVersion: v1
metadata:
name: tomcat-service
spec:
type: NodePort
selector:
app: tomcat
ports:
- protocol: TCP
port: 80
targetPort: 8080
[root@ecs-431f-0001 tomcat]# kubectl create -f tomcat-service.yaml
[root@ecs-431f-0001 tomcat]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/tomcat-deployment-66cf7565b-z6cqj 1/1 Running 0 69m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 12d
service/tomcat-service NodePort 10.103.110.188 <none> 80:31707/TCP 68m
2、k8s向tomcat容器中部署应用
[root@ecs-431f-0001 tomcat]# kubectl cp commonAnnotation.war tomcat-deployment-66cf7565b-z6cqj:/usr/local/apache-tomcat-9.0.1/webapps # 将war包复制到容器内部
[root@ecs-431f-0001 tomcat]# kubectl exec tomcat-deployment-66cf7565b-z6cqj -it -- /bin/bash
[root@tomcat-deployment-66cf7565b-z6cqj /]# 进入容器
[root@tomcat-deployment-66cf7565b-z6cqj /]# cd /usr/local/apache-tomcat-9.0.1/webapps/
[root@tomcat-deployment-66cf7565b-z6cqj webapps]# ls -l # 成功部署
total 32
drwxr-x--- 3 root root 4096 Sep 27 2017 ROOT
drwxr-x--- 4 root root 4096 Jul 19 02:31 commonAnnotation
-rw-r--r-- 1 root root 6527 Jul 19 02:31 commonAnnotation.war
drwxr-x--- 14 root root 4096 Sep 27 2017 docs
drwxr-x--- 6 root root 4096 Sep 27 2017 examples
drwxr-x--- 5 root root 4096 Sep 27 2017 host-manager
drwxr-x--- 5 root root 4096 Sep 27 2017 manager
- 访问部署的项目
访问成功