栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Docker】二、docker镜像的制作运行发布

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Docker】二、docker镜像的制作运行发布

上一篇 【Docker】一、云时代容器Docker的基本操作

文章目录
  • 一、安装常用镜像实例
    • 1、Docker 安装 MySQL
    • 2、Docker的Tomcat容器部署web项目
  • 二、Docker容器的修改
    • 1、保存修改后的容器
    • 2、Docker镜像保存为文件与从文件导入镜像
  • 三、Docker搭建私有仓库
    • 1、私有仓库搭建
      • 1.1、可配置加速器加速下载
      • 1.2、获取镜像加速器地址
      • 1.3、下载registry镜像:
      • 1.4、启动镜像:
      • 1.5、然后可以通过restful接口查看仓库中的镜像(当前仓库是空的)
    • 2、私服仓库推送镜像
    • 3、保存镜像为文件
  • 四、Docker自定义镜像
    • 1、Dockerfile文件
    • 2、Dockerfile的基本结构
    • 3、Dockerfile指令
    • 4、自定义JDK镜像
    • 5、自定义Tomcat镜像
  • 五、Docker部署微服务
    • 1、Docker部署SpringBoot项目
    • 2、定义Jar包程序Dockerfile文件
    • 3、Docker部署War包SpringBoot程序
    • 4、Maven源码构建Docker镜像部署微服务
    • 5、IntelliJ IDEA下的Docker
  • 六、私有Docker仓库镜像下载
    • 1、 在拉取仓库镜像的机器上配置加速器和仓库地址:
    • 2、修改上面的配置后需要重启一下Docker;
    • 3、推送一个镜像到私有仓库:
    • 4、然后才能从仓库拉取

一、安装常用镜像实例 1、Docker 安装 MySQL
  • 下载MySQL镜像:
docker pull docker.io/mysql:latest  (安装的是mysql 8.0)
docker run -d -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456  mysql:latest

其中-e是指定环境变量

  • 进入容器:
docker exec -it 3e8bf7392b4e /bin/bash
看容器里面的mysql在什么位置:whereis mysql
  • 登录MySQL:
mysql -u root -p
  • 修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
  • 授权远程登录访问:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO ' root'@'%';
FLUSH PRIVILEGES;

容器是瞬态的。重启了容器,数据就没了;

  • 数据持久化
docker run -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
  • /opt/mysql/data 是宿主机的路径
    /var/lib/mysql 是容器的路径
2、Docker的Tomcat容器部署web项目
docker run -d -p 8080:8080 docker.io/tomcat
docker cp /root/test.html bf8a58328e18:/usr/local/tomcat/webapps/ROOT
  • 数据持久化
docker run -d -p 8080:8080 -v /opt/tomcat/data:/usr/local/tomcat/webapps docker.io/tomcat
二、Docker容器的修改 1、保存修改后的容器
docker   commit   容器id   xxx(镜像名:tagxxx)
比如:docker commit 90343fa54080 my_tomcat
docker commit 90343fa54080 my_tomcat:latest

把一个运行着的容器,由于里面改了一些东西,希望把该容器保存起来,可以使用上面这种做法,得到一个新镜像,下次用该新镜像运行;
(镜像是一个模板);

2、Docker镜像保存为文件与从文件导入镜像

制作好镜像后,有时需要将镜像复制到另一台服务器使用,那么有两种方式:
一种是上传镜像到仓库中(本地仓库或远程公共仓库)
一种是将镜像保存为文件然后传到其他服务器上,再从文件中载入镜像;
可以使用Docker save和Docker load命令来存储和载入镜像。

三、Docker搭建私有仓库 1、私有仓库搭建 1.1、可配置加速器加速下载
/etc/docker/daemon.json

{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
1.2、获取镜像加速器地址

1.3、下载registry镜像:
docker pull registry
docker pull  docker.io/registry
这两个一样
1.4、启动镜像:

docker run -d -p 5000:5000 registry

在这里插入代码片
1.5、然后可以通过restful接口查看仓库中的镜像(当前仓库是空的)
http://127.0.0.1:5000/v2/_catalog 
2、私服仓库推送镜像
docker tag [imageId] 127.0.0.1:5000/cat/redis:latest
1、docker tag 6408fdc94212 127.0.0.1:5000/cat/tomcat:latest
2、docker push 127.0.0.1:5000/cat/tomcat:latest
  • 执行命令效果
[root@server docker]# docker tag 6408fdc94212 127.0.0.1:5000/cat/tomcat:latest
[root@server docker]# 
[root@server docker]# docker push 127.0.0.1:5000/cat/tomcat:latest 
The push refers to a repository [127.0.0.1:5000/cat/tomcat]
cd5b7e2631fa: Pushed 
9f99f85da76a: Pushed 
2c17ac16afc6: Pushed 
2ee490fbc316: Pushed 
b18043518924: Pushed 
9a11244a7e74: Pushed 
5f3a5adb8e97: Pushed 
73bfa217d66f: Pushed 
91ecdd7165d3: Pushed 
e4b20fcc48f4: Pushed 
latest: digest: sha256:8e75a9065fd732f2d06fccba994b246d77360b6e9870ac02b60b5b7d1fc6007d size: 2422
[root@server docker]#
  • 查询镜像:
    http://127.0.0.1:5000/v2/_catalog
  • 查询刚才上传的镜像的版本
    http://127.0.0.1:5000/v2/cat/tomcat/tags/list

启动容器的时候,也可以通过 --name指定容器的名字
docker run -d --name mytomcat -p 8080:8080 my_tomcat‘

3、保存镜像为文件

如果要将镜像保存为本地文件,使用docker save命令;

docker save -o 要保存的文件名 要保存的镜像
查看已有镜像:docker images
保存镜像为文件: docker save -o redis.tar.gz docker.io/redis

完成后通过 ls 命令查看保存的文件在当前目录下;
把保存的此文件上传到另一台服务器上;
从文件载入镜像

从压缩文件载入镜像使用docker load命令;
docker load --input 文件

或者
docker load < 文件名 

导入后可以使用docker images命令查看;

四、Docker自定义镜像 1、Dockerfile文件

Dockerfile用于构建Docker镜像,Dockerfile文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像;

2、Dockerfile的基本结构

一般的,Dockerfile分为四部分:

  • 基础镜像信息;
  • 维护者/作者信息;(可选部分)
  • 镜像操作指令;
  • 容器启动时执行指令;

比如下面就是一个Dockefile文件样例:

FROM centos:latest
MAINTAINER docker_user
ENV JAVA_HOME /usr/local/java
ADD apache-tomcat-8.0.32.tar.gz /usr/local/
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh
CMD /usr/local/tomcat8/bin/catalina.sh start
3、Dockerfile指令
  • ROM
    格式为 FROM 或 FROM :
    Dockerfile文件的第一条指令必须为 FROM 指令,表示从哪个基础镜像开始构建;
  • MAINTAINER
    格式为 MAINTAINER ,可选的,指定维护者/作者信息;
  • ENV
    格式为 ENV ,指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持;
  • ADD
    格式为ADD ;
    复制指定的宿主机上的到容器中的(能够进行自动解压压缩包);
  • EXPOSE
    格式为 EXPOSE [...]
    告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p映射端口,Docker 宿主机会自动分配一个端口转发到指定的端口;
  • RUN
    格式为 RUN
    RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 来换行,如果需要将两条命令或者多条命令联合起来执行需要加上&&;
    如:cd /usr/local/src && wget xxxxxxx;
  • CMD
    指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令,如果指定了多条命令,只有最后一条会被执行。
    如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
  • WORKDIR:
    用来指定当前工作目录(或者称为当前目录)
  • USER:
    运行RUN指令的用户
  • VOLUME:
    用来创建一个在image之外的mount point
4、自定义JDK镜像
  • 定义Dockerfile文件:
FROM centos:latest
MAINTAINER cat
ADD jdk-8u191-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_191
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version

构建镜像:docker build -t my_jdk1.8.0_191 .
运行镜像:docker run -d ac84bde53958 (镜像id)

5、自定义Tomcat镜像
  • 定义Dockerfile文件:
FROM my_jdk1.8.0_191
MAINTAINER cat
ADD apache-tomcat-9.0.29.tar.gz /usr/local/
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.29
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.29/bin/catalina.sh run

构建镜像:docker build -t my-tomcat-9.0.29 .
运行镜像:docker run -d -p 8080:8080 7db5d55cd5c4

五、Docker部署微服务 1、Docker部署SpringBoot项目
  • 1、将开发的springboot程序打成jar包或者war包;
  • 2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
  • 3、定义Dockerfile文件,用于创建项目镜像;
2、定义Jar包程序Dockerfile文件
FROM my_jdk1.8.0_191
MAINTAINER cat
ADD springboot-web-1.0.0.jar /opt
RUN chmod +x /opt/springboot-web-1.0.0.jar
CMD java -jar /opt/springboot-web-1.0.0.jar

构建和运行Jar包程序的镜像
构建镜像:docker build -t springboot-web-jar .
运行容器:docker run -d -p 8080:8080 ac84bde53958

  • Jar包程序依赖容器环境准备
运行MySQL容器:docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

运行Docker化的Jar包程序,通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;

3、Docker部署War包SpringBoot程序
  • 定义War包程序Dockerfile文件
FROM my-tomcat-9.0.29
MAINTAINER cat
ADD springboot-web-1.0.0.war /usr/local/apache-tomcat-9.0.29/webapps
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.29/bin/catalina.sh run

构建和运行War包程序的镜像

  • 构建镜像:docker build -t springboot-web-war .
  • 启动镜像:docker run -d -p 8080:8080 b9f7c20c50c7
  • 启动查看日志:docker logs -f eb3de34a01a8(容器ID)
4、Maven源码构建Docker镜像部署微服务

前面我部署一个SpringBoot的微服务程序,是采用如下步骤进行的:
1、将开发的springboot程序打成jar包或者war包;(idea里面操作的)
2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
3、定义Dockerfile文件,用于创建项目镜像;
4、启动创建好的项目镜像把程序运行起来;

更多的情况,我们是直接在运维环境里,上传源码,直接maven打包jar或者war,然后再进一步构建成镜像,不过这个操作过程本质上与手动打包是类似的;
1、在Linux下配置maven运行环境;
2、将项目源代码上传到Linux某个目录下;(或从git上拉取源代码)
3、通过maven命令打包:mvn clean package -Dmaven.test.skip=true
4、编辑Dockerfile文件,生成项目镜像;
5、构建项目镜像;
6、运行项目镜像,启动项目程序;
war包的Dockerfile文件:

FROM docker.io/tomcat
MAINTAINER cat
ADD target/springboot-web-1.0.0.war /usr/local/tomcat/webapps
EXPOSE 8080
CMD /usr/local/tomcat/bin/catalina.sh run
构建镜像:docker build -t springboot-web-jar .
运行容器:docker run -d -p 8080:8080 ac84bde5348
5、IntelliJ IDEA下的Docker
  • 1、安装idea下的docker插件
  • 2、配置一下 /etc/docker/daemon.json的host ;
[root@server 35-springboot-web]# cat /etc/docker/daemon.json  
{
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["12.24.67.78:5000"]
}
  • 3、idea下配置 tcp://12.24.67.78.93:2375
  • 4、在项目下写一个Dockerfile文件;
FROM jdk1.8.0_11
MAINTAINER cat
ADD target/springboot-web-1.0.0.jar /opt
RUN chmod +x /opt/springboot-web-1.0.0.jar
CMD java -jar /opt/springboot-web-1.0.0.jar

5、运行或者build该Dockerfile文件;

也可以上传镜像到远程私有仓库(如下图):

六、私有Docker仓库镜像下载 1、 在拉取仓库镜像的机器上配置加速器和仓库地址:

[root@rabbit128 ~]# cat /etc/docker/daemon.json  
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["127.0.0.1:5000"]
}
[root@rabbit128 ~]# 
2、修改上面的配置后需要重启一下Docker; 3、推送一个镜像到私有仓库:
1、docker tag dcf9ec9265e0 127.0.0.1:5000/redis
2、docker push 127.0.0.1:5000/redis:latest
4、然后才能从仓库拉取
推送:docker push 114.116.213.93:5000//tomcat:latest
推送:docker push 127.0.0.1:5000/tomcat:latest
拉取:docker pull 127.0.0.1:5000/redis:latest
拉取:docker pull 114.116.213.93:5000/redis:latest
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号