原创 | 全网最实在的docker入门教程四

作者:潘吉祥


上一篇我们学习了如何使用Dockerfile制作自己的镜像,不过这种方式更像纯粹的运维方式,作为开发者来说,未免有些小繁琐,一个不小心写错些命令就执行失败,我们还不知道错误在哪,这着实有些……

放心,今天的东西会帮你解决这个问题!再次之前,我觉得有必要先对之前的东西稍微做一下回顾,以免混淆:

查看镜像:docker images

查看正在运行的容器:docker ps

查看所有的容器:docker ps -a

删除镜像:docker rmi 镜像名(id)

删除容器:docker rm 容器名(id)

我们可以创建自己的镜像,也可以从公共仓库下载现成的镜像;

容器的创建依赖对应的镜像(我们可以把镜像比作一个安装包,把容器看做运行的对应的软件)

下面进入今天的正题:

为了跟切近真实开发场景,笔者使用了自己开发的一个小项目来进行演示

事实上在企业开发中,我们都会把自己的微服务镜像打包到我们自己的docker的私有仓库,所以这里还要简单地介绍关于私有仓库呦:

1. 私有仓库也很简单,操作都是基本的,首先拉取私有仓库镜像,有了它就可以创建私有仓库容器:

docker pull registry

2.创建启动私有仓库容器:

docker run -id --name=my_registry -p 5000:5000 registry

可以看到,我们使用下载到的registry创建并运行了my_registry容器!

此时我们可以使用浏览器查看我们的私有仓库:

格式:http://docker宿主机ip:5000/v2/_catalog

我们可以看到json格式的输出:表示我们现在的私有仓库没有任何镜像。

注意:ip是虚拟机的ip,不是物理机的ip。

3. 此时我们的私有仓库只是启动了,但是并没有与我们的docker建立联系,我们还需要修改配置文件:

vim /etc/docker/daemon.json
添加以下配置,让docker与我们的私有仓库建立联系。
"insecure-registries":["192.168.1.23:5000"]

这个配置文件是不是有点熟悉?没错,之前是用来配置docker下载镜像加速的,注意,多个配置之间以逗号分隔。

4. 然后重启docker服务:

我们可以测试一下我们的私有仓库是否可以使用了,上传一个镜像我们试试:

标记为此私有仓库的镜像:docker tag 镜像名(id) 私有仓库ip端口/自定义名字

此操作只是标记这个镜像要上传到的私有仓库,push的时候docker能识别它要上传到定义的仓库。

5. 可以看到我们标记的镜像,这样我们就可以把它上传到我们的私有仓库了,不过刚才我们重启了docker,因此registry容器需要重新运行起来

docker start my_registry
docker push 我们标记的镜像

可以看到,上传了哈!

好了,前奏工作完成之后进入今天的重点环节。

DockerMaven

我们部署微服务的方式有两种:

第一种:通过源码打包之后手动上传到虚拟机然后再复制到jdk容器里;

第二种:也是开发使用的方式,避免上面太过繁琐的方法,采用更加自动化的maven插件部署。

下面来看具体的步骤:

1. 修改docker配置,让它可以让程序远程访问:

vim /lib/systemd/system/docker.service

找到ExecStart,在它后面添加配置 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

这是没修改之前的配置

修改之后:

2. 修改之后,刷新配置,重启docker即可:

systemctl daemon-reload
systemctl restart docker
docker start registry

3. 在服务工程pom文件里添加插件配置

<build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <configuration>
   <!--标记镜像名project.artifactId就是push到私有仓库的名字,:后面的project.version会成为版本号-->                 <imageName>192.168.1.23:5000/${project.artifactId}:${project.version}</imageName>
                    <baseImage>jdk1.8</baseImage>
                    <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <dockerHost>http://宿主机ip:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>

其实插件的本质也是使用Dockerfile,以上插件生成的Dockerfile文件如下:

FROM jdk1.8
ADD app.jar /
ENTRYPOINT ["java","‐jar","/app.jar"]

4. 使用maven命令打包并上传:

在服务工程目录下执行:

mvn clean package docker:build -DpushImage

过程可能会下载一些依赖,然后就可以看到上传了:

此时再查看私有仓库和我们的docker镜像:

5.这时就可以创建容器了:

这里的端口是server:port

docker run -id --name=literature -p 9000:9000 192.168.1.23:5000/literature:1.0-SNAPSHOT

我们的服务已经成为容器运行起来的!

可以访问哦!

注意:如果是自己的测试环境,服务的数据库配置文件连接的是localhost,要改成本机的真实在打包上传;

还有我这里是一个非常耦合的工程,没有依赖工程,如果是在微服务开发,MySQL和中间件等服务制成了容器运行在docker,那么在打包上传私有仓库之前打包的工程所依赖的服务都开启了。

至此,docker入门教程已经结束了!初学者还是要自己亲自动手实践才好啊!

全网最实在docker入门教程,关注不迷路呦!

END

【推荐阅读

原创 | 全网最实在的docker入门教程一

原创 | 全网最实在的docker入门教程二

原创 | 全网最实在的docker入门教程三

三万字、91道MySQL面试题(收藏版)

数据库链接池终于搞对了,直接从100ms到3ms

SpringBoot 操作 ElasticSearch 详解(万字长文)

字节跳动今日头条前端面经(4轮技术面+hr面)

如何用一行代码实现网页变灰效果?

贼好用的Java工具类库,GitHub星标10k+,你在用吗?


感谢阅读,请扫码关注
明天见
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农code之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值