赞
踩
目录
案例:基于java:8-alpine镜像,将一个Java项目构建为镜像
案例:将cloud-demo微服务集群利用DockerCompose部署
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成
入口(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 |
实现思路:
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
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有什么?
帮助我们快速部署分布式应用,无需一个个微服务去构建镜像和部署
1、构建对应的cloud-demo文件夹,每个项目的文件夹对应相应Dockefile文件
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中的服务名
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 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
私服采用的是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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。