Docker镜像的制作,上传,拉取和部署 *** 作

Docker镜像的制作,上传,拉取和部署 *** 作,第1张

Docker镜像的制作,上传,拉取和部署 *** 作(利用阿里云)

本文主要介绍Docker镜像的制作、上传、拉取、部署 *** 作(使用阿里云),具有很好的参考价值。希望对大家有帮助。来和边肖一起看看吧。

由于学习过程中推送镜像总是倍->,我直接申请阿里云的Docker仓库之一(管理中心->:创建镜像库->:我的是华东2绑定github账号),搞定!以后push用这个仓库,pull用加速。注意根据使用场景切换,dockerhub会丢弃...记录 *** 作过程:

1.创建一个命名的hhubetween空(以当前学校为单位,只小写,每个账号只5个),创建一个菜鸟Docker镜像仓库docker1(绑定到github中的一个仓库,个人可以为所欲为。这个仓库镜像就像一个app,可以不断更新版本)。那么所有的测试图片都可以推送到这里。以后可以为其他特殊镜像申请其他镜像库(比如对于Tomcat,单独申请一个镜像库,对于redis,申请一个redis库,等等)。完整;

2.镜像制作,这一步单独进行,并详细记录;

3.镜像推送:制作完成后,需要将镜像推送至镜像测试仓库中的docker1。基本信息如下

1.公开地址:registry.cn-shanghai.aliyuncs.com/hhu/docker1

2.内部网地址(ECS可选):registry-internal.cn-shanghai.aliyuncs.com/hhu/docker1

3.代码库(即绑定github上的库):https://github.com/Jacksonary/Docker

我的第一个Docker镜像名字是:jacksonary/myfirstapp,根据网络情况选择公网推送。主要流程如下:

#1.从加速切换到仓库地址,并登录到[email protected]的Docker登录

#2.根据名称或ID为图像创建标签。默认为最新的docker标签Jacksonary/myfirstappregistry.cn-Shanghai.aliyuncs.com/hhu/docker1[:镜像版本号]

#3.推送镜像dockerpushregistry.cn-shanghai.aliyuncs.com/hhu/docker1[:镜像版本号]

然后可以在阿里云仓库查看推送的图片,如下图:

在获取上述镜像文件时,需要指定镜像版本号,所以在推送镜像时,建议追加必要的镜像版本号进行区分。如果我需要拉上面提到的镜子,我可以这样做:

#因为版本默认是最新的,所以可以默认获取或者追加:最新(推荐)docker拉registry.cn-shanghai.aliyuncs.com/hhu/docker1.

一、Docker镜子的制作

通常,项目放在一个文件夹中。比如官网有个项目叫flask-app,所以所有文件都在项目目录里。我们需要在项目的根目录下添加一个名为“Dockerfile”的文本文件,去掉它的txt后缀,然后用一个通用的文本编辑器编写Docker环境,比如下面的Dockerfile:

#1.指定基本镜像为Linux(alipineDocker镜像是只有5M的轻量级Linux系统) FROMalpine:3.5 #在alipine下安装python和pip,这个app是用Python写的,所以需要安装Python环境,通常是复制文件和安装依赖 RUNapkadd--updatepy2-pip #安装app所需的Python所必须的 COPYrequirements.txt/usr/src/app/ RUNpipinstall--no-cache-dir-r/usr/src/app/requirements.txt #复制应用必须的文件到镜像中 COPYapp.py/usr/src/app/ COPYtemplates/index.html/usr/src/app/templates/ #设置需要暴露的端口号 EXPOSE5000 #设置应用通过cmd启动Python应用程序 CMD["python","/usr/src/app/app.py"]

然后创建一个Docker镜像,PowerShell进入项目的根目录(也就是Dockerfile所在的目录),执行

dockerbuild-tjacksonary/myfirstapp。

这里需要注意的是,当我们用“Dockerfile”作为Docker的配置文件名时,是直接写的。但是,如果必须另外指定其他配置文件名,如“jdk-9-alpine。Dockerfile”作为Docker的配置文件,应该用-f来写,以指定配置文件:

dockerbuild-tjacksonary/myfirstapp-fJDK-9-alpine。Dockerfile。

其中-t表示将当前创建的图片标注为“jacksonary/myfirstapp”,/前半部分必须是你的Docker的用户名ID(如果你用的是Dockerhubwarehouse,因为Dockerhub默认是你的用户名,如果你用的是阿里云,我可以随意取),/后半部分是应用的名称,共同作为这张图片的标签,后面的URL路径不能丢失。圆点表示当前路径,执行后会自动发布到当前HV的虚拟机。你可以用dockerimages查看“jacksonary/myfirstapp”的附加图片,就完成了。

[摘要]关于Dockerfile文件配置:

1.Dockerfile文件必须以FROM开头,后跟基本容器和版本,表示当前图像的父容器。父容器通常以“用户名/图像名:版本号”的形式存在(Dockerhub也是如此)

2.RUN指令用于创建当前Docker映像。每次调用这个指令,Docker都会创建一个新的镜像层,很容易回滚到之前的镜像版本。它的语法是在RUN之后按照shell指令(比如RUNmkdir/user/local/foo),它会自动执行/bin/sh的shell。当然,你也可以指定诸如:run/bin/bash-c'mkdir。

3.copy命令可以将本地文件复制到容器中。

4.启动镜像时,将执行CMD指令定义的命令。与RUN指令不同,它不会创建新的图像层,而只是执行该指令。每个映像的Dockerfile文件中只能有一条CMD指令,也可以有多条指令要执行(这种情况下,最好将CMD作为脚本运行)。CDM执行指令时,我们需要指定这些指令运行到哪里,而run不需要指定,比如下面的cmd指令。

CMD["python","。/app.py"]

CMD["/bin/bash","echo","HelloWorld"]

5.五号。EXPOSE指令用于指定镜像程序将在哪个端口提供服务。这些信息可以通过DockerInspect获得。取回指令,但EXPOSE指令实际上并没有将端口暴露给主机,而是需要在dockerrun释放时以-p标志的形式暴露。以上是小写P需要指定主机到虚拟到主机端口的映射,大写P是随机端口,将镜像中的端口暴露给主机。具体暴露哪个端口可以通过dockerps查看,例如:

从上图可以看出,镜像端口8080暴露给主机端口32768,可以通过localhost:32768查看。

6.六号。PUSHcommand可以将图片发布到DockerCloud等平台。

7.ENV指令用于配置环境变量,例如:

#配置Java的环境变量,这是Linux中标准的JAVA环境变量 ENVJAVA_HOME=/opt/jdk-9 ENVPATH=$PATH:$JAVA_HOME/bin

二。部署并运行映像

创建镜像后,就可以来跑了。下面是我自己根据教程做的镜像:Docker拉registry.cn-shanghai.aliyuncs.com/hhu/docker1,可以拉下来运行在Docker:

码头工人拉registry.cn-shanghai.aliyuncs.com/hhu/docker1

registry.cn-shanghai.aliyuncs.com/hhu/docker1的名字

其中-p(此指令非常重要)表示将虚拟机上暴露的5000端口映射到本机8888端口,并将此镜像命名为myfirstapp。这时候你可以访问http://localhost:8888查看关于猫的git地图,每次刷新都会随机得到不同的猫地图。

三。镜像推送

文章开头,整个Docker图像的文件地址:https://github.com/Jacksonary/Docker/tree/master/flask-app

四。简单JAVA应用程序的部署

它是一个简单的java项目,由maven在这里打包。来,到我们的工作目录先执行一下。

mvn原型:generate-DgroupId=edu.hhu.Java-dartifactid=helloworld-DinteractiveMode=false

创建一个简单的mavenJava项目。我知道大部分人都能成功做到,但也有少数人执行这个命令无法创建一个项目(我就是其中之一)。小费

此目录中没有POM

一脸懵逼给他一个空pom,它提示pom里没有数据。好吧,让我们用另一种方法做它。我们先告诉他,我们要创建一个项目:

mvn原型:生成

然后会提示我们是否想要内置的骨架,只需选择7:Maven-Archetype-QuickStart,然后根据提示输入groupID、artifactId等信息,最后会询问你是否要打包,只需打包即可(这时目标目录会出现jar包)。好了,这一步完成了,接下来看看这个项目能不能用:

Java-CPtarget/helloworld-1.0-snapshot.jaredu.hhu.Java.app

其中-cp表示执行这个类文件所需的所有类的包路径——也就是系统类装入器的路径。默认骷髅会给你“HelloWorld”问候你。好了,java项目创建完毕。

步骤2编写Docker的配置文件Dockerfile:

来自openjdk:最新

复制目标/helloworld-1.0-snapshot.jar/usr/src/helloworld-1.0-snapshot.jar

CMDJava-CP/usr/src/helloworld-1.0-snapshot.jaredu.hhu.Java.app

第三部分创建一个镜像并执行它。

dockerbuild-tjacksonary/helloworld。

码头工人运行jacksonary/helloworld

四。复杂杂多容器在Docker(Docker-compose)中的应用

在实际开发中,往往需要很多服务,而不是在Ubuntu中打印一句话,比如WEB和数据库的交互。这种应用程序通常由多个容器组成,不需要用shell启动这些容器。所有的容器都会以“服务组”的方式定义在一个配置文件中,类似于Dockerfile,写在项目的根目录下,然后就可以使用了。

docker-撰写向上-d

Docker-compose脚本可用于启动、停止和重启应用程序以及应用程序中的所有服务。docker-compose的完整命令如下:

指令 内容 构建

构建或重建服务

帮助

获取命令帮助

杀死容器

日志

查看容器的输出

端口

打印端口绑定的公共端口

ps

列出容器

提取服务图像

重新启动

重启服务

rm

移除停止的容器

运行

运行一次性命令

刻度

设置服务的容器数量

开始

启动服务

停止

停止服务

向上

创建和启动容器

这些定义的Docker组件服务门户是docker-compse配置文件,通常以yml文件的形式存在,比如下面的docker-compse.yml(注意配置每个属性时冒号后面必须跟空case,端口映射除外):

version:'3.3' services: db: container_name:db image:mysql:8 environment: MYSQL_DATABASE:employees MYSQL_USER:mysql MYSQL_PASSWORD:mysql MYSQL_ROOT_PASSWORD:supersecret ports: -3307:3306 web: image:arungupta/docker-javaee:dockerconeu17 ports: -8081:8080 -9991:9990 depends_on: -db

在上面的组合文件中:

1.定义了两种服务:数据库和web。

2.image属性为每个服务字指定图像文件。

3.mysql:8mirror将启动mysql服务。

4.environment属性为初始化定义了MySQL服务环境变量:MYSQL_DATABASE通常在镜像启动时有一个指定名称的数据库。MYSQL_USER和MYSQL_PASSWORD结合起来创建一个新用户并设置密码。该用户将被授予MYSQL_DATABASE创建的数据库的超级权限,MYSQL_ROOT_PASSWORD是强制设置MYSQL超级用户的密码。

5.端口实现端口转发,前面是主机,后面是虚拟机。

6.Dependents_on属性表示两个服务之间的依赖关系。在这种情况下,WildFly(一个应用服务器)依赖于MySQL,所以MySQL会在WildFly之前启动。

有了上面提到的组合配置文件,PW可以在进入文件所在的目录后,使用docker-composeup-d以隔离模式启动两个服务。dockerps可以检查端口之间的映射,也可以发现启动了两个容器。docker-composelogs可以检查服务的日志,然后我们可以通过http://localhost:8081/resources/employees访问所有的人员信息。

docker-向下合成

以上制作、上传、拉取、部署Docker镜像的 *** 作(使用阿里云)都是边肖分享的内容。希望给大家一个参考,支持我们。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/774142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存