docker生成镜像的两种方式
docker pull tomcat
2.根据基础镜像,创建容器
docker run --name tomcat01 -p 80:8080 -d tomcat
注意:如果是从阿里云镜像仓库拿到的镜像,在webapps里面没有文件,因为阿里云镜像默认是最小的镜像,所有不必要的都被剔除,将webapps.dist中的文件copy到webapp中即可解决(命令:cp -r webapps.dist/* webapps)
3.修改容器内容
docker exec -it tomcat01 /bin/bash
cd webapps/ROOT
rm -f index.jsp
echo hello world > index.html exit
4.提交为新镜像
#docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像名:TAG
docker commit -m="自定义的Tomcat镜像" -a="wk" mytomcat wk/tomcat:v1.0
5.1 将自己的镜像上传到dockerHub
#第一步 先登录自己的docker仓库
docker login
#输入用户名和密码
#修改镜像名字
#docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 注意这里的目标镜像需要使用你dockerhub上的用户名 类似我的wkdocker01
docker tag wk/tomcat:v01 wkdocker01/tomcat:v1.0
#上传自己的镜像
docker push wkdocker01/tomcat:v1.0
5.2 将自己的镜像上传到阿里云
阿里云容器镜像地址:https://cr.console.aliyun.com/cn-hangzhou/repositories
首先在自己的阿里云容器镜像中创建自己的镜像仓库
选本地仓库 ,通过命令推送到阿里云镜像仓库
然后进入到自己的镜像仓库,这里有操作步骤教你上传镜像
6.使用子的镜像来运行容器(当然也可以在dockerHub上pull下来自己空间的镜像)
docker run --name mytom -p 8091:8080 -d wk/tomcat:v1.0
二:使用DockerFile构建spring boot项目镜像
1.准备:把自己的springboot项目打包成可执行jar包
2.把jar包上传到Linux服务器
3.开始构建自己的项目容器
3.1:在jar包路径下创建Dockerfile文件 vi Dockerfile
# 指定基础镜像,本地没有会从dockerHub pull下来 FROM java:8 #作者 MAINTAINER wk # 把可执行jar包复制到基础镜像的根目录下 ADD smart-admin.jar /smart-admin.jar # 镜像要暴露的端口,如要使用端口,在执行docker run命令时使用-p生效
EXPOSE 8080 # 在镜像运行为容器后执行的命令 ENTRYPOINT ["java","-jar","/smart-admin.jar"]
3.2:使用 docker build 命令构建镜像,基本语法
docker build -t wkdocker01/smart-admin:v1 .
# -f指定Dockerfile文件的路径
# -t指定镜像名字和TAG
# .指当前目录,这里实际上需要一个上下文路径
4.运行自己的项目
docker run --name smart-admin -p 8080:8080 -d wkdocker01/smart-admin:v1
三:把自己的vue前端项目上传到docker容器运行:
1.首先创建一个default.conf文件,用户替换nginx目录下的default.conf文件
server {
listen 80;
server_name 127.0.0.1; # 修改为docker服务宿主机的ip
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
location /smart-admin-api{ # smart-admin-api是vue项目里.env.production里的地址
proxy_pass http://127.0.0.1:10086/smart-admin-api/; # 这里写的是你后端接口的地址
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
该配置文件定义了首页的指向为 /usr/share/nginx/html/index.html
, 所以我们可以一会把构建出来的index.html文件和相关的静态资源放到/usr/share/nginx/html
目录下。
2.创建DockerFile文件
FROM nginx
MAINTAINER wk
#删除目录下的default.conf文件
RUN rm /etc/nginx/conf.d/default.conf
#将default.conf复制到/etc/nginx/conf.d/下,用本地的default.conf配置来替换nginx镜像里的默认配置
ADD default.conf /etc/nginx/conf.d/
#将项目根目录下dist文件夹(构建之后才会生成)下的所有文件复制到镜像/usr/share/nginx/html/目录下
COPY dist/ /usr/share/nginx/html/
3.将通过npm run build 打包好的dist文件拷贝到当前路径下
4.通过docker build命令构建镜像,注意不要少了. (点)
docker build -t smart-admin-vue:v1.0 .
5.通过docke run 启动容器
docker run --name smart-admin-vue -p 10085:80 -d smart-admin-vue:v1.0
6.通过执行docker ps查看是否启动成功容器
四:dockerFile常用的几个命令:
FROM
FROM指令是最重要的一个并且必须为Dockerfifile文件开篇的第一个非注释行,用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像提供的运行环境
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
MAINTAINER(depreacted)
Dockerfifile的制作者提供的本人详细信息
Dockerfifile不限制MAINTAINER出现的位置,但是推荐放到FROM指令之后
语法:
MAINTAINER <name>
name可以是任何文本信息,一般用作者名称或者邮箱
LABEL <key>=<value> <key>=<value> <key>=<value>...
一个Dockerfifile可以写多个LABEL,但是不推荐这么做,Dockerfifile每一条指令都会生成一层镜像,如果LABEL太长可以使用\符号换行。构建的镜像会继承基础镜像的LABEL,并且会去掉重复的,但如果值不同,则后面的值会覆盖前面的值。
COPY
COPY <src>...<dest>
COPY ["<src>",..."<dest>"]
# <src>:要复制的源文件或者目录,可以使用通配符
# <dest>:目标路径,即正在创建的image的文件系统路径;建议<dest>使用绝对路径,否则COPY指令则以WORKDIR为 其起始路径
ADD <src>...<dest>
ADD ["<src>",..."<dest>"]
WORKDIR <dirpath>
VOLUME <mountpoint>
VOLUME ["<mountpoint>"]
不能指定宿主机当中的目录,宿主机挂载的目录是自动生成的
EXPOSE <port>[/<protocol>] [<port>[/<protocol>]...]
ENV <key> <value>
ENV <key>=<value>...
ARG <name>[=<default value>]
指定一个变量,可以在docker build创建镜像的时候,使用 --build-arg <varname>=<value> 来指定参数
RUN <command>
RUN ["<executable>","<param1>","<param2>"]
RUN ["/bin/bash","-c","<executable>","<param1>"]
CMD <command>
CMD ["<executable>","<param1>","<param2>"]
CMD ["<param1>","<param2>"]
ENTRYPOINT<command>
ENTRYPOINT["<executable>","<param1>","<param2>"]
ONBUILD <instruction>