目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

X

构建私有镜像仓库

私有镜像仓库

私有仓局

开通镜像服务

登录阿里云开通容器镜像服务。点击管理控制台-》初次使用会提示开通,然后设置密码。
创建镜像仓库
点击管理

 1# 登录阿里云Docker Registry
 2docker login --username=soulboy1990116 registry.cn-shanghai.aliyuncs.com
 3
 4# 从Registry中拉取镜像(拉取)
 5[root@localhost ~]# docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world
 6flask-hello-world: Pulling from abc1024/soulboy_images
 7[root@localhost ~]# docker run -d -p 5000:5000 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world
 8Digest: sha256:8c4f6441a730d5abff5838bc5faa53ae97b3212fda67d6944cb75f76af1804be
 9
10# 将镜像推送到Registry(推送)
11docker login --username=soulboy1990116  registry.cn-shanghai.aliyuncs.com
12# 将本地镜像8365e912bdbd  标记为 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world
13docker tag 8365e912bdbd registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world
14# 推送镜像到阿里云镜像仓库
15docker push registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world
16The push refers to repository [registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images]
1754d6fee42f0f: Pushed 
189bcf7e016add: Pushed 
19ee0ebee0324c: Pushed 
20a30cfc27bb5d: Pushed 
21d22688b29911: Pushed 
2208127eb3eb76: Pushed 
23a637c551a0da: Pushed 
242c8d31157b81: Pushed 
257b76d801397d: Pushed 
26f32868cde90b: Pushed 
270db06dff9d9a: Pushed 
28flask-hello-world: digest: sha256:8c4f6441a730d5abff5838bc5faa53ae97b3212fda67d6944cb75f76af1804be size: 2640

构建 SpringBoot 应用 docker 镜像

启动类添加 Controller 处理逻辑。http://localhost:8080/user/find

 1@SpringBootApplication
 2@Controller
 3public class DockerDemoApplication {
 4
 5    public static void main(String[] args) {
 6        SpringApplication.run(DockerDemoApplication.class, args);
 7    }
 8
 9    @RequestMapping("/user/find")
10    @ResponseBody
11    public Object findUser(){
12        Map<String, String > map = new HashMap<>();
13        map.put("name", "soulboy");
14        map.put("age","29");
15        return map;
16    }
17}

maven 里面添加配置 pom.xml
 Spotify 的 docker-maven-plugin 插件是用 maven 插件方式构建 docker 镜像的。
{project.build.finalName} ,缺省为 {project.artifactId}-${project.version}

 1<properties>
 2        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 3        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 4        <java.version>1.8</java.version>
 5        <docker.image.prefix>soulboy</docker.image.prefix>
 6    </properties>
 7
 8    <build>
 9        <!--项目打包的名称-->
10        <finalName>docker-demo</finalName>
11        <plugins>
12	    <!-- springboot插件-->
13            <plugin>
14                <groupId>org.springframework.boot</groupId>
15                <artifactId>spring-boot-maven-plugin</artifactId>
16            </plugin>
17	    <!-- docker插件:将springboot应用打包成docker镜像-->
18            <plugin>
19                <groupId>com.spotify</groupId>
20                <artifactId>dockerfile-maven-plugin</artifactId>
21                <configuration>
22                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
23                    <buildArgs>
24                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
25                    </buildArgs>
26                </configuration>
27            </plugin>
28        </plugins>
29    </build>

打包 SpringCloud 镜像并上传私有仓库并部署
 Dockerfile : 由一系列命令和参数构成的脚本,这些命令应用于基础镜像, 最终创建一个新的镜像
 创建 Dockerfile:默认是根目录,(可以修改为 src/main/docker/Dockerfile,如果修则需要制定路径)
在项目右键创建 Dockerfile

 1# FROM <image>:<tag> 需要一个基础镜像,可以是公共的或者是私有的,后续构建会基于此镜像,如果同一个Dockerfile中建立多个镜像时,可以使用多个FROM指令
 2FROM openjdk:8-jdk-alpine
 3# VOLUME 配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
 4VOLUME /tmp
 5# ARG  设置编译镜像时加入的参数, ENV 是设置容器的环境变量
 6ARG JAR_FILE
 7# COPY : 只支持将本地文件复制到容器,并重命名为app.jar,还有个ADD更强大但复杂点
 8COPY ${JAR_FILE} app.jar
 9# ENTRYPOINT 容器启动时执行的命令
10ENTRYPOINT ["java","-jar","/app.jar"]

点击 Terminal

1Microsoft Windows [版本 10.0.17763.107]
2(c) 2018 Microsoft Corporation。保留所有权利。
3F:\Project\ImageTest\docker-demo>mvn install dockerfile:build

将打包好的本地镜像 push 到远程的私有仓库(阿里云)

 1# 查看本地镜像发现  xdclass/docker-demo 已经打包完成
 2C:\Users\soulboy>docker images
 3REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
 4xdclass/docker-demo   latest              efb549968619        13 seconds ago      121MB
 5openjdk               8-jdk-alpine        a3562aa0b991        2 months ago        105MB
 6hello-world           latest              fce289e99eb9        6 months ago        1.84kB
 7
 8# 登录鉴权
 9docker login --username=soulboy1990116  registry.cn-shanghai.aliyuncs.com
10
11# 将本地镜像打标记
12docker tag efb549968619 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:docker-demo
13
14# 推送镜像到阿里云镜像仓库
15docker push registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:docker-demo

在阿里云容器镜像管理查看
容器镜像版本管理

从阿里云容器镜像服务拉取镜像到本地 http://192.168.31.22/user/find

1docker login --username=soulboy1990116  registry.cn-shanghai.aliyuncs.com
2
3docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:[镜像版本号]
4
5docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:docker-demo
6
7docker run -d -p 80:8080 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:docker-demo

作者:Soulboy