1、简述
Docker 作为一种流行的容器化技术,使得开发者可以轻松创建、部署和管理容器化应用。在使用 Docker 构建完镜像后,将其上传到一个可靠的镜像仓库是关键的一步。阿里云提供了稳定且高效的容器镜像服务(ACR),本文将详细介绍如何将 Docker 镜像上传到阿里云。
2、准备工作
在开始之前,请确保您已经完成以下准备工作:
- 注册并登录到阿里云账户。
- 创建一个阿里云容器镜像服务(ACR)实例。
- 安装并配置好 Docker 环境。
创建阿里云容器镜像服务实例
- 登录到阿里云控制台。
- 在左侧导航栏中,选择“容器镜像服务”。
- 点击“创建实例”,填写实例名称,选择计费方式和区域,完成实例创建。
2、编写Dockerfile 文件
以jdk 和Tomcat为例,先准备好上传镜像的材料apache-tomcat-8.5.83.tar.gz ,jdk-8u202-linux-x64.tar.gz。根据自己所需要的版本去官网下载,下载好放指定位置编写好Dockerfile 文件:
# 基础镜像
FROM ubuntu
# 描述
MAINTAINER jdk_comcat:8
# 解压与复制jdk.tar.gz
# 由于add/copy的文件必须使用上下文目录的内容, 因此要先将jdk.tar.gz拷贝到当前目录
ADD jdk-8u202-linux-x64.tar.gz /usr/local
ADD apache-tomcat-8.5.83.tar.gz /usr/local
# 配置 JDK 的环境变量和字符集
ENV JAVA_HOME /usr/local/jdk1.8.0_202
ENV PATH $JAVA_HOME/bin:$PATH
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV LANG C.UTF-8
# 配置tomcat环境变量
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.83
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.83
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 暴露端口
EXPOSE 8080
# 启动tomcat -- 最后的命令要一直运行下去,以防容器退出
ENTRYPOINT /usr/local/apache-tomcat-8.5.83/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.83/logs/catalina.out
3、构建镜像
在将镜像上传到阿里云之前,您需要先构建镜像。假设您的 Dockerfile 位于当前目录:
[root@localhost tomcat]# sudo docker build -t jdk_tomcat:8 .
Sending build context to Docker daemon 204.7MB
Step 1/13 : FROM ubuntu
---> ba6acccedd29
Step 2/13 : MAINTAINER jdk_comcat:8
---> Running in b5c84e47128f
Removing intermediate container b5c84e47128f
---> 72de2dce1ee2
Step 3/13 : ADD jdk-8u202-linux-x64.tar.gz /usr/local
---> 021c4fdb4c85
Step 4/13 : ADD apache-tomcat-8.5.83.tar.gz /usr/local
---> cdcc494eb5dc
Step 5/13 : ENV JAVA_HOME /usr/local/jdk1.8.0_202
---> Running in 2e951823402d
Removing intermediate container 2e951823402d
---> 85ac9b509ae3
Step 6/13 : ENV PATH $JAVA_HOME/bin:$PATH
---> Running in 7cf34f21e792
Removing intermediate container 7cf34f21e792
---> f22b2517ccf8
Step 7/13 : ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in ecff0f632b98
Removing intermediate container ecff0f632b98
---> 27cf9956e0b1
Step 8/13 : ENV LANG C.UTF-8
---> Running in 5d06830ff12a
Removing intermediate container 5d06830ff12a
---> e512ebf2fa3b
Step 9/13 : ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.83
---> Running in fe6a94685e33
Removing intermediate container fe6a94685e33
---> 2d7ac9eba680
Step 10/13 : ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.83
---> Running in f55ec425465a
Removing intermediate container f55ec425465a
---> e7333a163afb
Step 11/13 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in 84debe4a844f
Removing intermediate container 84debe4a844f
---> f72e6f752d2c
Step 12/13 : EXPOSE 8080
---> Running in 2e9d09b5830c
Removing intermediate container 2e9d09b5830c
---> c9d2b65d292f
Step 13/13 : ENTRYPOINT /usr/local/apache-tomcat-8.5.83/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.5.83/logs/catalina.out
---> Running in ad6353686b35
Removing intermediate container ad6353686b35
---> fa0bafc06889
Successfully built fa0bafc06889
Successfully tagged jdk_tomcat:8
4、启动当前镜像
通过docker run 启动jdk_tomcat:8 当前镜像
sudo docker run -itd -p 8080:8080 --name jdk_tomcat jdk_tomcat:8
启动成功后,通过 docker images 查看镜像。
通过docker ps查看容器:
[root@localhost tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1faae7d0ce90 jdk_tomcat:8 "/bin/sh -c '/usr/lo…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp jdk_tomcat
8e97133ab2de gitlab/gitlab-ce "/assets/wrapper" 30 hours ago Up 29 minutes (healthy) 80/tcp, 0.0.0.0:8090->8090/tcp, :::8090->8090/tcp, 0.0.0.0:8022->22/tcp, :::8022->22/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp gitlab
5、镜像仓库
5.1、登陆阿里云
在本地环境中,您需要通过 Docker CLI 登录到阿里云的镜像仓库。首先,获取仓库的登录命令:
docker login --username=*** registry.cn-hangzhou.aliyuncs.com
输入自己的密码:
问题:Error response from daemon: Get "https://registry.cn-hangzhou.aliyuncs.com/v2/": unauthorized: authentication required
解决方法:
1、不要使用第三方授权登陆,自己注册一个阿里云账号
2、修改DNS存值。
[root@localhost tomcat]# vi /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.220.2
保证DNS 存在值
5.2 添加标签和推送
通过docker images 获取镜像ID,然后通过阿里给的指令推送:
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat:[镜像版本号]
[root@localhost tomcat]# docker tag fa0bafc06889 registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat:8
[root@localhost tomcat]# docker push registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat:8
The push refers to repository [registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat]
032714f94ad3: Pushed
4e3b53d854a6: Pushed
9f54eef41275: Pushed
8: digest: sha256:68b03cdf1d81b57489b7bf6de2761d7c0cce826e85c31a93fe11a029b3a21eb5 size: 954
5.3 查看和拉取
查看阿里云镜像仓库:
拉取上传的镜像:
sudo docker pull registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_comcat:8
6、制作JDK 镜像
同理制作JDK镜像,添加jar包,测试jdk镜像是否成功:
docker run -d --name eureka-9001 --privileged=true --network host --restart always -w /usr/eureka/ -v /data/eureka:/usr/eureka registry.cn-hangzhou.aliyuncs.com/lskdxhl/jdk_li:8 /bin/sh -c 'sh start.sh'
成功启动Eureka:
7、总结
将 Docker 镜像上传到阿里云容器镜像服务(ACR)可以帮助您更方便地管理和分发镜像。通过本文的步骤,您可以轻松完成从构建镜像到上传镜像的整个流程。无论是开发、测试还是生产环境,阿里云 ACR 都提供了稳定和高效的解决方案。
希望这篇指南能对您有所帮助,祝您在使用 Docker 和阿里云时一切顺利!
评论区