看下面这个图
从中可以看出,Docker 包含三个基本概念,分别是镜像(Image)、容器(Container)和仓库(Repository)。镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心。
回到正题,Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
要想更深入的了解 Docker 镜像,镜像的原理也必不可少,而这其中最重要的概念就是镜像层(Layers)(如下图)。镜像层依赖于一系列的底层技术,比如文件系统(filesystems)、写时复制(copy-on-write)、联合挂载(union mounts)等。
总的来说,你最需要记住这点:
在 Dockerfile 中, 每一条指令都会创建一个镜像层,继而会增加整体镜像的大小。
镜像作为 Docker 最突出的创新之一,它变革了软件交付标准。理解镜像,对理解整个 Docker 的生命周期非常重要。
在Linux下操作
Java项目
在当前文件夹下创建个文件夹目录:docker(注:可以随便找个地方创建此文件夹)
里面放你的Java对的程序Jar包
在当前目录下创建dockerfile 文件
里面编辑添加如下内容:
FROM java:8
# 把jar包添加到镜像中
# auth-authentication-1.0.0.jar 这里是我Java打出来的Jar包的名字 你的要改成你的名字
ADD auth-authentication-1.0.0.jar /app.jar
# 镜像暴露的端口
EXPOSE 8010
RUN bash -c 'touch /app.jar'
# 容器启动命令
ENTRYPOINT ["java","-jar","/app.jar"]
# 设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezonei
此时docker 文件夹下有如下文件:
运行如下命令,注意不要少了最后的“ . ”
Docker build -t auth-authentication-1.0.0.jar:v1.0 .
# auth-authentication-1.0.0.jar:v1.0 构建docker镜像为1.0版本
查看你构建的docker镜像
docker images
这个图是随便截的
那里是你构建的docker镜像的名字(auth-authentication-1.0.0) tag是版本号(v1.0)
Image id 是此镜像的ID号(d124ab8e75a7)
把构建的docker 镜像打为tar包
docker save d124ab8e75a7 > xxx.tar(名字随便起的,你可以按你项目的名字来起)
这时候就可以在你创建的docker 的文件夹下看到你打的tar包了,打出来的包很大
这时候就可以上传到docker 的服务器上了
登录
docker login 127.0.0.1 (此IP我随便填写的,到时候看你的服务器IP地址)
输入自己的docker账号密码
载入tar包
docker load -i xxx.tar 然后就会出来镜像的id
Docker tar sha256:xxx 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1
Docker push 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1
Docker tag sha256:xxxx (这里填上面出来的镜像id) 192.xxx.xxx.xxx/xxx.tar:v1.0.0.1 (后明填你服务器地址和文件夹路径在带你的镜像包名字和版本号)
这样自己就tag 好了
然后docker push 推到docker 上 就可以了
这时候 你就可以在你的docker上看到你刚才推上去的包了
下面是 vue 和python 的dockerfile 文件
# VUE dockerfile
#dockerfile
#使用 nginx最新版本作为基础镜像
FROM nginx
#将当前文件夹的dist文件复制到容器的/usr/share/nginx/html目录
COPY ./dist /usr/share/nginx/html/
# 拷贝.conf文件到镜像下,替换掉原有的nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf
#声明运行时容器暴露的端口(容器提供的服务端口)
EXPOSE 9123
#CMD:指定容器启动时要运行的命令
CMD ["nginx", "-g", "daemon off;"]
#=====================vue还需要配一个nginx.conf文件。防止地址404 找不到地址
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 20m;
server {
listen 80;
server_name www.longdb.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#===========================python ==dockerfile
# syntax=docker/dockerfile:1
FROM python:3.9
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3","-m" , "flask", "run", "--host=0.0.0.0", "--port=20010"]
#====================== requirements.txt 这个里面是你python用到的依赖库 直接填名字就好
下面截图下每个文件里的配置
VUE
Python
把dockerfile 和 requirements.txt 文件 放到项目中 然后再项目里面运行docker的一系列操作就可以了