🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk)
💬 博主粉丝群介绍:① 群内高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。
【Docker】基于阿里云docker镜像服务的Docker镜像构建、托管保姆级教程(全网最详细教程)
1. 概述
1.1 什么是Docker?
Docker是一种开源的容器化平台,它允许开发人员将应用程序及其所有依赖项(如库、环境变量、配置文件等)打包成一个容器,从而实现应用程序在不同环境中的快速部署、可移植性和可复制性。Docker利用Linux内核提供的容器技术,将应用程序和其依赖项隔离在一个容器中,使得应用程序能够在不同的计算机、虚拟机或云平台上进行高效地部署和运行。
1.2 docker能干嘛?
Docker的应用场景包括但不限于:
- 应用程序打包和部署:开发人员可以将应用程序以及其所有依赖项打包成一个容器,从而实现一次构建,到处运行的部署方式。
- 微服务架构:Docker容器适合部署微服务架构,每个微服务可以打包成一个独立的容器,实现高度的模块化和可扩展性。
- 环境一致性:Docker容器提供了一种可靠的环境隔离方式,能够确保应用程序在不同环境中的一致性,从开发到测试再到生产环境的部署都能保持一致。
- 快速开发和测试:开发人员可以在本地环境中快速地启动、停止、删除容器,进行开发和测试,从而提高开发效率。
- 持续集成和持续部署:Docker容器可以与持续集成/持续部署工具集成,实现自动化构建、测试和部署流程,加快软件交付速度。
在嵌入式开发领域,Docker一般用于快速部署开发环境,保证所有服务器,所有开发人员的开发环境一致性,避免因环境差异带来各种各样的问题。
1.3 从哪里获取docker镜像
1.3.1 Docker Hub
Docker官方镜像平台提供了很多基础镜像,可以访问https://hub.docker.com/来查找。
1.3.2 其它Docker镜像服务平台
除了Docker Hub之外,国内外也有大量的平台提供了镜像搭建和维护服务,比如阿里云的容器镜像服务:https://cr.console.aliyun.com/cn-hangzhou/instances。
1.3.3 线下分发
他人构建好的镜像,可以打包后进行线下分发,他人获取后可以直接导入。
举例子:
可以使用
docker save
命令将myubuntu镜像导出为myubuntu.tar
sudodocker save -o myubuntu.tar myubuntu
myubuntu.tar镜像可以自由分发,另外一个人拿到myubuntu.tar后就可以使用
docker load
导入到自己的机器上,然后就可以使用该镜像创建并启动容器了。
sudodocker load -i myubuntu.tar
2. Ubuntu如何安装docker
要在Ubuntu上安装Docker,可以按照以下步骤进行:
- 更新apt软件包索引:
sudoapt update
- 安装依赖包,以允许apt软件包在HTTPS上使用存储库:
sudoaptinstall apt-transport-https ca-certificates curl software-properties-common
- 添加Docker的官方GPG密钥:
curl-fsSL https://download.docker.com/linux/ubuntu/gpg |sudo apt-key add -
- 添加Docker APT存储库:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 再次更新apt软件包索引:
sudoapt update
- 确保从Docker存储库而不是默认存储库中安装:
apt-cache policy docker-ce
- 最后,安装Docker:
sudoaptinstall docker-ce
- 验证Docker是否正确安装:
sudo systemctl status docker
通过这些步骤,可以在Ubuntu上成功安装Docker,并可以开始使用Docker引擎了。
3. 如何构建docker镜像
要构建Docker镜像,需要编辑一个Dockerfile文件,来描述镜像的构建过程。现以更新java版本为例,讲述整个更新过程。
3.1 组装基础Dockerfile
新建一个空目录,然后创建一个名为Dockerfile的文本文件,将如下内容拷贝进去
FROM ubuntu:1604
MAINTAINER Alex <[email protected]>
WORKDIR /home/admin/workspace
ENTRYPOINT ["/bin/bash"]
3.2 按需修改Dockerfile
将下载好的java运行环境压缩包拷贝到Dockerfile同一目录下。然后我们使用Dockerfile的
ADD
命令将本地当前目录下的
OpenJDK11U-jdk_x64_linux_11.0.12_7.tar.gz
解压并拷贝到
/opt/
目录下,然后用过
ENV
命令修改
PATH
环境变量,追加新的java执行目录即可。
对应代码如下所示:
FROM ubuntu:1604
MAINTAINER Alex <[email protected]>
ADD ./OpenJDK11U-jdk_x64_linux_11.0.12_7.tar.gz /opt/
ENV PATH /opt/openjdk-11.0.12_7/bin:$PATH
WORKDIR /home/admin/workspace
ENTRYPOINT ["/bin/bash"]
3.3 编译镜像
Dockerfile编写完成后,使用
docker build
命令在Dockerfile所在的目录中构建镜像:
$ sudodocker build -f Dockerfile -t ubuntu1604_update_java .
Sending build context to Docker daemon 203 MB
Step 1: FROM ubuntu:1604
---> 961496ae44f2
Step 2: MAINTAINER Alex <[email protected]>
---> Using cache
---> ae3210afff6e
Step 3: ADD ./OpenJDK11U-jdk_x64_linux_11.0.12_7.tar.gz /opt/
---> 7ea4f23aa58e
Removing intermediate container 66d7e8d08a31
Step 4: ENV PATH /opt/openjdk-11.0.12_7/bin:$PATH
---> Running in 9681ee611e2d
---> 4de8fc80f273
Removing intermediate container 9681ee611e2d
Step 5: WORKDIR /home/admin/workspace
---> Running in 015127eea321
---> 12d61d78f3fb
Removing intermediate container 015127eea321
Step 6: ENTRYPOINT /bin/bash
---> Running in cd95f1c5a241
---> 586de0560544
Removing intermediate container cd95f1c5a241
Successfully built 586de0560544
上述命令中,
-f Dockerfile
表示使用Dockerfile描述文件来构建镜像-t ubuntu1604_update_java
表示为新镜像指定一个名称(在此示例中为ubuntu1604_update_java).
表示Dockerfile在当前目录下。
3.4 查看镜像列表和镜像ID
镜像编译成功后,就可以通过
docker images
命令查看镜像列表了。如下所示,第一个就是我们钢构件成的镜像:
$ sudodocker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu1604_update_java latest 586de0560544 7 minutes ago 1.701 GB
dev_x86_backup_20211227 latest 12173815dc73 9 weeks ago 90.53 GB
dev_x86_backup_20211226 latest 14a64e5c857c 9 weeks ago 144.5 GB
ubuntu_1604_build_20211014 latest 961496ae44f2 4 months ago 1.376 GB
ubuntu18.04_sifeng latest 4bb2e57d175c 13 months ago 915.7 MB
ubuntu16.04_x64 latest 6a7a6103b47d 3 years ago 14.87 GB
3.5 验证镜像
镜像编译成功之后,可以用个
docker run
命令来验证。如下所示,执行
docker run
命令之后,会进入Docker环境,之后自行查看改动是否生效即可。确认完成之后,执行exit命令退出docker环境。
$ sudodocker run -it--rm ubuntu1604_update_java:latest
admin@1d7377478901:~/workspace$
admin@1d7377478901:~/workspace$ ls /opt/
openjdk-11.0.12_7
admin@1d7377478901:~/workspace$
admin@c66458d193aa:~/workspace$ typejavajava is /opt/openjdk-11.0.12_7/bin/java
admin@1d7377478901:~/workspace$
admin@1d7377478901:~/workspace$ java--version
openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment 18.9(build 11.0.12+7)
OpenJDK 64-Bit Server VM 18.9(build 11.0.12+7, mixed mode)
admin@1d7377478901:~/workspace$
admin@69bd748cfdc4:~/workspace$ exitexit
构建镜像的过程中,Docker将执行Dockerfile中指定的每个步骤,包括基础镜像的拉取、文件的复制、环境变量的设置等。最终,我们会获得一个包含指定应用程序和配置的Docker镜像,可以将其推送到Docker Hub或阿里云等镜像仓库中,也可以在本地使用。
4. 如何使用阿里云docker镜像服务
本章,我们以阿里云的Docker镜像服务为例,讲述如何其使用方法,包括平台初始化和镜像创建等操作。
待云端初始化完成并创建镜像之后,我们就可以将上一章中创建的docker镜像上传到阿里云存储下来,以备其它机器拉取使用了。
4.1 创建实例
打开阿里云容器镜像服务制台,新建实例。可按需选择企业版和个人版。下文都以个人版为例进行演示。
4.1.1 创建个人实例
4.1.2 确认风险
按照页面提示,个人版实例不提供SLA保障且有数量、安全性等限制,不保障安全和稳定,不建议生产业务中使用,以避免影响线上业务。如有需要可选择企业版实例或者其它方案进行存储分发。
4.1.3 设置密码
该密码在
docker login
命令登录阿里云Docker服务器时输入,用于
docker pull
命令下载私有镜像和
docker push
命令上传镜像时鉴权使用,请务必谨记。
4.2 创建命名空间
个人实例创建成功之后,需要先继续创建命名空间,命名空间用来管理镜像仓库,所以必须先创建命名空间,才能创建镜像。
点击左侧的
命名空间
,点击
创建命名空间
按钮,填入命名空间的名字之后,点击
确定
按钮保存即可。
4.3 创建镜像仓库
命名空间创建成功后,就可以创建镜像仓库了。
4.3.1 填写仓库基本信息
点击左侧的
镜像仓库
,点击
创建镜像仓库
,依次选择
命名空间
,填入
仓库名称
,选择
仓库类型
,填入
摘要
之后,点击
下一步
按钮。
4.3.2 设置代码源
我们最终是要将本地创建好的镜像上传到该镜像仓库,因此代码源选择
本地仓库
即可,最后点击
创建镜像仓库
按钮即可。
到此为止,镜像仓库就创建成功了,如下图所示,可以查看到相关信息以及操作指南。
5. docker镜像上传到阿里云
在第三章中,我们已经把docker镜像编译完成并验证OK,也已在阿里云镜像平台创建好了镜像仓库,接下来就可以将本地的镜像上传阿里云docker镜像服务器了。
5.1 镜像打tag
先对本地镜像打tag,标记本地镜像,将其归入某一仓库。
如下所示,我们将586de0560544(
ubuntu1604_update_java的Image ID,docker image命令可以查看到
)这个镜像归入registry.cn-hangzhou.aliyuncs.com/android_product/ubuntu16.04_android仓库。
sudodocker tag 586de0560544 registry.cn-hangzhou.aliyuncs.com/android_product/ubuntu16.04_android:latest
5.2 登录授权
$ docker login --username=<修改为自己的阿里云账号> registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为创建实例时设置的密码。
5.3 推送到服务器
镜像准备就绪,即可使用
docker push
命令推送到docker镜像服务器了。
sudodocker push reg.docker.alibaba-inc.com/tmjl_service/ubuntu-1604-build:latest
6. 总结
通过本文的探索,我们更深入地了解了Docker技术,并对其在软件开发和部署中的价值有了更清晰的认识。Docker的出现为应用程序的开发、部署和管理带来了革命性的变化,相信在未来,它将继续发挥重要作用,推动软件开发和部署的进步。
版权归原作者 I'mAlex 所有, 如有侵权,请联系我们删除。