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


    目录

    一、Dockerfile自定义镜像

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

    二、CentOS安装DockerCompose

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

    三、Docker镜像仓库

    常见镜像仓库服务

    搭建私有镜像仓库

    简化版镜像仓库

    带有图形化界面版本

    配置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 DocumentationDockerfiles 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

    1. # 指定基础镜像
    2. FROM java:8-alpine
    3. # 拷贝项目到镜像
    4. COPY ./docker-demo.jar /tmp/app.jar
    5. # 暴露端口
    6. EXPOSE 8090
    7. # 入口,java项目的启动命令
    8. 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文件是一个文本文件,通过指令定义集群中的每个容器如何运行

    1. version: "3.8"
    2. services:
    3.   mysql:
    4.     image: mysql:5.7.25
    5. environment:
    6. MYSQL_ROOT_PASSWORD: 123
    7.     volumes:
    8.      - "/tmp/mysql/data:/var/lib/mysql"
    9.      -  "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
    10.   web:
    11.     build: .
    12.     ports:
    13.      - "8090:8090"

    1、下载docker-compose

    Linux下需要通过命令

    1. # 安装
    2. 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、修改文件权限(给文件添加执行权)

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

    3、Base自动补全命令

    1. # 补全命令
    2. 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文件

     docker-compose.yml文件:

    1. version: "3.2"
    2. services:
    3. nacos:
    4. image: nacos/nacos-server
    5. environment:
    6. MODE: standalone
    7. ports:
    8. - "8848:8848"
    9. mysql:
    10. image: mysql:5.7.25
    11. environment:
    12. MYSQL_ROOT_PASSWORD: 123
    13. volumes:
    14. - "$PWD/mysql/data:/var/lib/mysql"
    15. - "$PWD/mysql/conf:/etc/mysql/conf.d/"
    16. userservice:
    17. build: ./user-service
    18. orderservice:
    19. build: ./order-service
    20. gateway:
    21. build: ./gateway
    22. ports:
    23. - "10010:10010"

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

     

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

    1. <build>
    2. <finalName>app</finalName>
    3. <plugins>
    4. <plugin>
    5. <groupId>org.springframework.boot</groupId>
    6. <artifactId>spring-boot-maven-plugin</artifactId>
    7. </plugin>
    8. </plugins>
    9. </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镜像仓库,具备仓库管理的完整功能,但是没有图形化界面。

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

    1. docker run -d \
    2. --restart=always \
    3. --name registry \
    4. -p 5000:5000 \
    5. -v registry-data:/var/lib/registry \
    6. registry

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

    带有图形化界面版本

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

    1. version: '3.0'
    2. services:
    3. registry:
    4. image: registry
    5. volumes:
    6. - ./registry-data:/var/lib/registry
    7. ui:
    8. image: joxit/docker-registry-ui:static
    9. ports:
    10. - 8080:80
    11. environment:
    12. - REGISTRY_TITLE=私有仓库
    13. - REGISTRY_URL=http://registry:5000
    14. depends_on:
    15. - registry

    配置Docker信任地址

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

    1. # 打开要修改的文件
    2. vi /etc/docker/daemon.json
    3. # 添加内容:
    4. "insecure-registries":["http://192.168.150.101:8080"]
    5. # 重加载
    6. systemctl daemon-reload
    7. # 重启docker
    8. 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 
    
  • 相关阅读:
    Nginx 从入门到精通-Nginx-Web服务器的瑞士军刀
    React Native实现Toast轻提示和loading
    87-分布式前端微信操作
    学习c++的第十天
    GO语言基础
    【目标检测】42、RepVGG | 使用结构重参数化来实现精度和速度平衡的主干网络
    systemverilog学习 ---- 任务和函数
    Gradient Boosting
    Fiddler实现android手机抓包
    基于LSTM-Adaboost的电力负荷预测的MATLAB程序
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/128052614