docker高级

1.镜像的备份和保存

1、先把容器变成镜像: docker commit 容器名称 新的镜像的名称

2、导出镜像: docker save -o 镜像保存的目录/镜像名称.tar 上一步保存的新的镜像的名称

3、导入镜像: docker load -i 镜像保存的目录/镜像名称.tar

2.Docker的registry私服

1、私有仓库搭建与配置

(1)拉取私有仓库镜像(此步省略)
 docker pull registry

(2)启动私有仓库容器
 docker run -di --name=registry -p 5000:5000 registry

(3)打开浏览器 输入地址http://192.168.189.141:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

(4)修改daemon.json 
(vi /etc/docker/daemon.json)
 添加以下内容,保存退出。
 {"insecure-registries":["192.168.13.111:5000"]}
 此步用于让 docker信任私有仓库地址

(5)重启docker 服务
 systemctl restart docker

2、镜像上传至私有仓库

(1)标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.189.141:5000/jdk1.8

(2)再次启动私服容器
docker start registry

(3)上传标记的镜像
docker push 192.168.189.141:5000/jdk1.8

3.Dockerfile构建镜像

1、常用命令

命令作用
FROM image_name:tag定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name声明镜像的创建者
ENV key value设置环境变量 (可以写多条)
RUN command是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir设置工作目录

2、案例:使用脚本创建镜像

步骤:
(1)创建目录
mkdir –p /usr/local/dockerjdk8

下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录


(3)创建文件Dockerfile 
vi Dockerfile
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER thh
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u211-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_211
ENV JRE_HOME $JAVA_HOME/jre
ENV PATH $JAVA_HOME/bin:$PATH


(4)执行命令构建镜像
docker build -t='jdk1.8' .
注意后边的空格和点,不要省略


(5)查看镜像是否建立完成
docker images

注意

1:创建文件Dockerfile 这里的D必须大写,不能有任何的偏差。

4、自动发布微服务:部署Eureka微服务
使用DockerMaven插件

核心步骤:

<build>
    <finalName>app</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- docker的maven插件,官网:
        https://github.com/spotify/docker-maven-plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <configuration>
                <!-- 镜像名称
                       有两种形式:
                       1)tensquare_eureka:1.0-SNAPSHOT : tensquare_eureka镜像名称,1.0-SNAPSHOT: 标签,只能在Docker本地仓库构建处理
                       2)192.168.207.111:5000/tensquare_eureka:1.0-SNAPSHOT: 192.168.207.111:5000是Docker的私服地址,既能在本地仓库构建,也能上传到私服
                -->
                <imageName>192.168.207.111:5000/${project.artifactId}:${project.version}</imageName>
                <!-- FROM jdk1.8 -->
                <baseImage>jdk1.8</baseImage>
                <!-- ENTRYPOINT ["java","-jar","/app.jar"] -->
                <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                <resources>
                    <!-- ADD app.jar /app.jar -->
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
                <!-- 2375: Docker专门为DockerMaven插件开放构建镜像的端口 -->
                <dockerHost>http://192.168.207.111:2375</dockerHost>
            </configuration>
        </plugin>
    </plugins>
</build>

mvn clean package docker:build -DpushImage 用maven命令直接打包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oRIGUSpz-1581146119045)(docker.assets/1577928623650.png)]

                <!--绑定Docker 命令到 Maven 各个阶段-->
                <!--解释:我们可以把 Docker 分为 build、tag、push,然后分别绑定 Maven 的 package、deploy 阶段-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--这里将插件绑定在package这个操作上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                            <!--<goal>push</goal> -->
                        </goals>
                    </execution>
                </executions>

docker 开放2375端口

微服务部署有两种方法:
(1)手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。
(2)通过Maven插件自动部署。
对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这里学习如何自动部署,这也是企业实际开发中经常使用的方法。


Maven插件自动部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问
vi /lib/systemd/system/docker.service 
其中ExecStart=后添加配置 
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 
修改后如下 
 
2)刷新配置,重启服务

systemctl daemon-reload
systemctl restart docker
docker start registry

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7cWaWbY-1581146119046)(docker.assets/1577870918965.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值