首页 > 系统相关 >Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库

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

时间:2022-12-03 10:03:09浏览次数:39  
标签:自定义 CentOS 仓库 registry mysql 镜像 docker 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

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

实现思路:

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

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

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

 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

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

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

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

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

二、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文件

Dockerfile自定义镜像、CentOS安装DockerCompose及Docker镜像仓库_运维_04

 下载好之后上传到/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文件

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

 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中的服务名

 

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

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

标签:自定义,CentOS,仓库,registry,mysql,镜像,docker,Docker
From: https://blog.51cto.com/u_15815415/5908471

相关文章

  • centos8.4中的journalctl使用
    journalctl用来查询systemd-journald服务收集到的日志。systemd-journald服务是systemdinit系统提供的收集系统日志的服务。journalctl通常用来查询systemd管理的Uni......
  • centos添加用户权限(XXX is not in the sudoers file. This incident will be report
    一.问题新安装的虚拟机在用户使用sudo修改文件权限时提示XXXisnotinthesudoersfile. Thisincidentwillbereported.二.解决参考:https://blog.csdn.net/danykk/......
  • Docker 推送跨平台镜像至 docker hub
    docker的神奇之处,目前大概也有了点初步的了解了,由于最近在处理跨平台构建镜像的问题,发现docker在拉取镜像时,会自动根据当前机器的架构,拉取符合当前架构的镜像,这样保证了镜......
  • Centos7 安装wkhtmltopdf 提示缺少依赖库
    首先下载安装包:​​https://wkhtmltopdf.org/downloads.html​​,如果没有代理工具,下载会很慢。。。。。上传至服务器任意目录后,执行安装:​​rpm-ivhwkhtmltox-0.12.5-1.c......
  • centos服务器设置代理上网的方法
    这里以centos7.0为例,记录代理服务器设置过程:1.全局的代理设置:vi/etc/profile添加下面内容http_proxy=http://username:password@yourproxy:8080/ftp_proxy=http:......
  • CentOS 6 内核进行了安全更新
    开源新闻速递:基于RedHatEnterprise Linux 6的 CentOS 6内核进行了安全更新。此次内核更新还修复了另外7个bug。使用上面提到的操作系统的用户需要赶紧进行内......
  • windows rdp远程连接Centos
    前言Linux下有个xrdp包,通过安装此包就可以使Linux系统支持rdp协议了,也就是说可以通过windows远程工具连接Linux系统了。需要注意的是安装了xrdp只是支持了rdp协议,真正要......
  • 自定义的Qt时间轴控件
    这是一个垂直的时间轴,显示效果非常简单,但不能显示有格式的文本。如果想显示有格式文本可以把右侧显示本文的位置换成QLabel控件去显示有格式文本。如果想改变文本行间距,根......
  • 自定义hooks
    importReact,{useState,useEffect}from'react';exportconstuseStateHooks=(val:any)=>{  let[value,setValue]=useState(val);  constsetFunc=(v:any)=......
  • CentOS Linux 的安装
    CentOSLinux的安装作者:Grey原文地址:博客园:CentOSLinux的安装CSDN:CentOSLinux的安装说明本安装说明是基于Windows10下VMwareworkstation16安装Linux,Li......