Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDSClaw,2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库

一、Dockerfile自定义镜像


镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成


入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数


层(Layer):在BaseImage基础上添加安装包、依赖、配置等,每次操作都形成新的一层


基础镜像(BaseImage):应用依赖的系统函数库,环境、配置、文件等


       Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer


指令 说明 示例
FROM 指定基础镜像

FROM centos:6

ENV

设置环境变量,可在后面指令使用

ENV key value

COPY

拷贝本地文件到镜像的指定目录

COPY ./mysql-5.7.rpm /tmp

RUN

执行Linux的shell命令,一般是安装过程的命令

RUN yum install gcc

EXPOSE

指定容器运行时监听的端口,是给镜像使用者看的

EXPOSE 8080

ENTRYPOINT

镜像中应用的启动命令,容器运行时调用

ENTRYPOINT java -jar xx.jar


更多详细语法的说明,可参考官方文档


Dockerfile reference | Docker Documentation


Dockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image.


https://docs.docker.com/engine/reference/builder/


案例:基于java:8-alpine镜像,将一个Java项目构建为镜像


实现思路:


1、构建一个空的目录,然后在目录中新建一个文件,命名为Dockefile


2、拷贝或传入项目的jar包到这个目录



3、编写Dockerfile文件:


基于java:8-alpine作为基础镜像


将对应的项目拷贝到镜像中


暴露端口


编写入口ENTRYPOINT


# 指定基础镜像
FROM java:8-alpine
# 拷贝项目到镜像
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar


4、使用docker buile命令构建镜像


docker build -t javaweb:2.0



5、使用docker run创建容器并运行


docker run --name web -p 8090:8090 -d javaweb:2.0



二、CentOS安装DockerCompose


       Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。


Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行


version: "3.8"
services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    volumes:
     - "/tmp/mysql/data:/var/lib/mysql"
     -  "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
  web:
    build: .
    ports:
     - "8090:8090"


1、下载docker-compose


Linux下需要通过命令


# 安装
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose


如果下载速度比较慢,或者下载失败,可以在CSDN上下载别人上传的docker-compose文件



下载好之后上传到/usr/local/bin/目录中


2、修改文件权限(给文件添加执行权)


# 修改权限
chmod +x /usr/local/bin/docker-compose


3、Base自动补全命令


# 补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose


如出现错误,需要修改字节的hosts文件:


echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts


DockerCompose有什么?


帮助我们快速部署分布式应用,无需一个个微服务去构建镜像和部署


案例:将cloud-demo微服务集群利用DockerCompose部署


1、构建对应的cloud-demo文件夹,每个项目的文件夹对应相应Dockefile文件



version: "3.2"
services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "$PWD/mysql/data:/var/lib/mysql"
      - "$PWD/mysql/conf:/etc/mysql/conf.d/"
  userservice:
    build: ./user-service
  orderservice:
    build: ./order-service
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"


2、修改cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名



3、使用maven打包工具,将项目中的每个微服务都打包为app,jar


    <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


4、将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中


5、将cloud-demo上传至虚拟机,利用docker-compose up -d来部署


三、Docker镜像仓库


常见镜像仓库服务


镜像仓库(Docker Registry)有公共和私有的两种形式:


● 公共仓库:例如Docker官方的Docker Hub,国内也有一些云服务商提供类似于Docker Hub的公共服务,比如网易云镜像服务、DaoCloud镜像服务、阿里云镜像服务等


● 除了使用公开仓库外,用户还可以在本地搭建私有Docker Registry 。企业字节的镜像最好是采用私有的Docker Registry来实现


搭建私有镜像仓库


简化版镜像仓库


Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。


搭建方式比较简单,命令如下:


docker run -d \
    --restart=always \
    --name registry \
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry


命令中挂载了一个数据卷registry-data到容器内的/var/lib/registry 目录,这是私有镜像库存放数据的目录。访问http://YourIp:5000/v2/_catalog 可以查看当前私有镜像服务中包含的镜像


带有图形化界面版本


使用DockerCompose部署带有图像界面的DockerRegistry,命令如下:


version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry


配置Docker信任地址


私服采用的是http协议,默认不被Docker信任,所以需要做如下配置:


# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]
# 重加载
systemctl daemon-reload
# 重启docker
systemctl restart docker


案例:在私有镜像仓库推送或拉取镜像


推送镜像到私有镜像服务必须先tag,步骤如下:


1、重新tag本地镜像,名称前缀为私有仓库的地址:192.168.182.129:8080/


docker tag nginx:latest 192.168.182.129:8080/nginx:1.0 


2、推送镜像


docker push 192.168.182.129:8080/nginx:1.0


3、拉取镜像


docker pull 192.168.182.129:8080/nginx:1.0
相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
3040 3
|
7月前
|
关系型数据库 数据库 PostgreSQL
docker 安装 Postgres 17.6
本文介绍如何通过Docker安装和配置PostgreSQL 17.6。内容包括拉取镜像、导出配置文件、运行容器并挂载数据与配置文件目录,以及进入容器使用psql操作数据库的完整步骤,便于持久化管理和自定义配置。
1072 3
docker 安装 Postgres 17.6
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
733 6
|
6月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
549 2
|
7月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1708 16
|
8月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
600 10
|
8月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
648 0
|
NoSQL Java Linux
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
595 76
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?

热门文章

最新文章