Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库 朴灿烈づ我的快乐病毒、 2024-03-31 11:53 17阅读 0赞 **目录** 一、Dockerfile自定义镜像 案例:基于java:8-alpine镜像,将一个Java项目构建为镜像 二、CentOS安装DockerCompose 案例:将cloud-demo微服务集群利用DockerCompose部署 三、Docker镜像仓库 常见镜像仓库服务 搭建私有镜像仓库 简化版镜像仓库 带有图形化界面版本 配置Docker信任地址 案例:在私有镜像仓库推送或拉取镜像 -------------------- ## 一、Dockerfile自定义镜像 ## 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成 > 入口(Entrypoint):镜像运行入口,一般是程序启动的脚本和参数 > > 层(Layer):在BaseImage基础上添加安装包、依赖、配置等,每次操作都形成新的一层 > > 基础镜像(BaseImage):应用依赖的系统函数库,环境、配置、文件等 **Dockerfile**就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer <table style="width:600px;"> <tbody> <tr> <td style="text-align:center;"><strong>指令</strong></td> <td style="text-align:center;"><strong>说明</strong></td> <td style="text-align:center;"><strong>示例</strong></td> </tr> <tr> <td style="text-align:center;">FROM</td> <td style="text-align:center;">指定基础镜像</td> <td> <p style="margin-left:0in;text-align:center;">FROM centos:6</p> </td> </tr> <tr> <td style="text-align:center;">ENV</td> <td> <p style="margin-left:0in;text-align:center;">设置环境变量,可在后面指令使用</p> </td> <td> <p style="margin-left:0in;text-align:center;">ENV key value</p> </td> </tr> <tr> <td style="text-align:center;">COPY</td> <td> <p style="margin-left:0in;text-align:center;">拷贝本地文件到镜像的指定目录</p> </td> <td> <p style="margin-left:0in;text-align:center;">COPY ./mysql-5.7.rpm /tmp</p> </td> </tr> <tr> <td style="text-align:center;">RUN</td> <td> <p style="margin-left:0in;text-align:center;">执行Linux的shell命令,一般是安装过程的命令</p> </td> <td> <p style="margin-left:0in;text-align:center;">RUN yum install gcc</p> </td> </tr> <tr> <td style="text-align:center;">EXPOSE</td> <td> <p style="margin-left:0in;text-align:center;">指定容器运行时监听的端口,是给镜像使用者看的</p> </td> <td> <p style="margin-left:0in;text-align:center;">EXPOSE 8080</p> </td> </tr> <tr> <td style="text-align:center;">ENTRYPOINT</td> <td> <p style="margin-left:0in;text-align:center;">镜像中应用的启动命令,容器运行时调用</p> </td> <td> <p style="margin-left:0in;text-align:center;">ENTRYPOINT java -jar xx.jar</p> </td> </tr> </tbody> </table> 更多详细语法的说明,可参考官方文档[Dockerfile reference | Docker DocumentationDockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image.![docs_2x.ico][]https://docs.docker.com/engine/reference/builder/][Dockerfile reference _ Docker DocumentationDockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image._docs_2x.ico_https_docs.docker.com_engine_reference_builder] ### 案例:基于java:8-alpine镜像,将一个Java项目构建为镜像 ### 实现思路: 1、构建一个空的目录,然后在目录中新建一个文件,命名为Dockefile 2、拷贝或传入项目的jar包到这个目录 ![0105a9736357477caed800a5e54becca.png][] 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** ![b4d6363874b444dca0f7c494ad0b5f67.png][] 5、使用docker run创建容器并运行 > **docker run --name web -p 8090:8090 -d javaweb:2.0** ![e055f3118bc04c1296839dba62d8c9e4.png][] ## 二、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文件 ![b81b613581014267b9de9062c7d6200f.png][] 下载好之后上传到/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文件 ![5010df7488a34bb498e21de463bae4e1.png][] docker-compose.yml文件: 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中的服务名 ![3a4148000cd44b3eb39a38e3c86a0649.png][] 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 [docs_2x.ico]: https://docs.docker.com/assets/favicons/docs@2x.ico [Dockerfile reference _ Docker DocumentationDockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image._docs_2x.ico_https_docs.docker.com_engine_reference_builder]: https://docs.docker.com/engine/reference/builder/ [0105a9736357477caed800a5e54becca.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/7d1961cb67f64ce0be2f0b4d121a1121.png [b4d6363874b444dca0f7c494ad0b5f67.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/4481e22711f84a21b7731d3e00e37cec.png [e055f3118bc04c1296839dba62d8c9e4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/13655f528ce14e2c9c97fbe61df2eb9b.png [b81b613581014267b9de9062c7d6200f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/bb9fd1823b0e47e19363a41c54be807e.png [5010df7488a34bb498e21de463bae4e1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/61f36fd44553413ebf23909878ed4aed.png [3a4148000cd44b3eb39a38e3c86a0649.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/31/9d7d0ae6f3f541edb745da3058c8f597.png
还没有评论,来说两句吧...