🌻🌻 目录
- 一、Dockerfile入门
- 1.1 Dockerfile 常用命令
- 1.2 Dockerfile 搭建 jdk 环境
- 1.3 Dockerfile 搭建 tomcat 环境镜像
- 1.4 Dockerfile 创建微服务 java 镜像
- 二、使用Nexus搭建Docker镜像私有仓库
- 2.1 安装 Nexus
- 2.2 访问配置 Nexus
- 2.3 配置 Docker 服务器连接到 Nexus 私有仓库
- 2.4 连接 docker 私服镜像仓库及使用
一、Dockerfile入门
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像(centos或者ubuntu,即操作系统级别的镜像)并最终创建一个新的镜像。
对于开发人员
:可以为开发团队提供一个完全一致的开发环境;对于测试人员
:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;对于运维人员
:在部署时,可以实现应用的无缝移植。
1.1 Dockerfile 常用命令
命令 | 作用 |
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条),可以在创建容器的时候传递参数给容器 |
RUN command | 是Dockerfile的核心部分,执行系统指令(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
CMD | 指定容器启动时运行的命令 |
1.2 Dockerfile 搭建 jdk 环境
- 第一步:在宿主机创建jdk存储目录
mkdir /usr/local/test001
- 第二步:下载 jdk-8u131-linux-x64.tar.gz 并上传到服务器(宿主机)中的/usr/local/test001目录
- 第三步:在/usr/local/test001目录下创建文件Dockerfile
touch Dockerfile
vi Dockerfile
FROM centos:7 #设置基础镜像名称
MAINTAINER daniel #设置镜像作者
WORKDIR /usr/local #设置工作目录
RUN mkdir /usr/local/java #在镜像创建目录
ADD jdk-8u151-linux-x64.tar.gz /usr/local/java/ #复制宿主机jdk安装包到镜像(自动解压)
ENV JAVA_HOME /usr/local/java/jdk1.8.0_151 #设置环境变量JAVA_HOME
ENV CLASSPATH $JAVA_HOME/lib #设置环境变量 CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH #设置环境变量 PATH
- 第四步:执行命令构建镜像
docker build -t='jdk1.8' .
注意后边的空格和点(.表示当前目录,也就是Dockerfile所在目录),不要省略
- 第五步:查看镜像是否建立完成
docker images
创建一个j1容器
验证是否成功构建
1.3 Dockerfile 搭建 tomcat 环境镜像
- 第一步:在宿主机创建
tomcat
存储目录
mkdir /usr/local/dockertomcat
- 第二步:上传安装包到服务器
下载 jdk-8u131-linux-x64.tar.gz、apache-tomcat-8.5.15.tar.gz并上传到服务器(宿主机)中的/usr/local/dockertomcat目录
- 第三步:在
/usr/local/dockertomcat
目录下创建文件Dockerfile
touch Dockerfile
vi Dockerfile
FROM centos:7 #设置基础镜像名称
MAINTAINER daniel #设置镜像作者
WORKDIR /usr/local #设置工作目录
RUN mkdir /usr/local/app #在镜像创建目录
ADD jdk-8u151-linux-x64.tar.gz /usr/local/app/ #复制宿主机jdk安装包到镜像(自动解压)
ADD apache-tomcat-9.0.21.tar.gz /usr/local/app/
ENV JAVA_HOME /usr/local/app/jdk1.8.0_151 #设置环境变量JAVA_HOME
ENV CATALINA_HOME /usr/local/app/apache-tomcat-8.5.15
ENV CLASSPATH $JAVA_HOME/lib #设置环境变量 CLASSPATH
ENV PATH $JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH #设置环境变量 PATH
EXPOSE 8080 #暴露8080端口
CMD ["/usr/local/app/apache-tomcat-8.5.15/bin/catalina.sh","run"] #容器启动时运行tomcat
- 第四步:执行命令构建镜像
docker build -t='tomcat8.5' .
注意后边的空格和点(.表示当前目录),不要省略
- 第五步:查看镜像是否建立完成
docker images
- 第六步:使用镜像创建运行容器
docker run -di --name=t1 -p 8081:8080 tomcat8.5
创建失败问题:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “exec: “/usr/local/app/apache-tomcat-8.5.15/bin/catalina.sh”: stat /usr/local/app/apache-tomcat-8.5.15/bin/catalina.sh: no such file or directory”: unknown.
解决:
- 第七步:访问测试tomcat
http://192.168.188.181:8088/
1.4 Dockerfile 创建微服务 java 镜像
- 第一步、 项目案例下载
- 注意:
EurekaServer01
服务器单独部署,暂不使用集群,需要修改属性配置文件
#服务器端口号
server:
port: 10086
#应用名称
spring:
application:
name: EurekaServer
#是否将自己注册到Eureka服务中,本身就是所有无需注册
eureka:
client:
register-with-eureka: false
#是否从Eureka中获取注册信息
fetch-registry: false
#EurekaServer注册中心地址
service-url:
defaultZone: http://localhost:10086/eureka #注册中心访问地址
- 注意:pom.xml一定要增加springboot 的maven编译插件,要不然打包不能使用
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
- 编译工程EurekaServer01执行构建指令
- 得到构建好的jar包:EurekaServer01-1.0.jar
拷贝到本地磁盘测试可以如下
java -jar EurekaServer01-1.0.jar
浏览器输入: http://localhost:10086/
- 第二步:在宿主机创建jar存储目录
mkdir /usr/local/dockerspringboot
上传编译构建好的jar包 EurekaServer01-1.0.jar 到该目录
- 第三步:在/usr/local/dockerspringboot目录下创建文件Dockerfile
vi Dockerfile
# 基于哪个镜像
FROM jdk1.8
# 拷贝文件到容器,也可以直接写成ADD xxxxx.jar /app.jar
ADD EurekaServer01-1.0.jar /app.jar
# 声明需要暴露的端口
EXPOSE 10086
# 配置容器启动后执行的命令
CMD ["java","-jar","/app.jar"]
- 第四步:执行命令构建镜像
docker build -t='springboot1' .
注意后边的空格和点(.表示当前目录),不要省略
- 第五步:查看镜像是否建立完成
docker images
- 第六步:使用镜像创建运行容器
docker run -di --name=s1 -p 10086:10086 springboot1
- 第七步:访问测试
http://192.168.188.181:10086/
二、使用Nexus搭建Docker镜像私有仓库
Docker镜像创建好了,怎么样实现在不同的用户和服务器之间共享镜像,Docker官方提供了DockerHub可以允许用户把自己创作的镜像上传到服务器,但是对于包含企业私有应用的镜像不允许暴露给公共用户,这个时候就需要企业搭建自己的私有镜像存储仓库。
nexus是一款非常优秀的私有仓库搭建软件,可以很方便的搭建私有镜像仓库。
为了下面更好的操作,再搭建一台服务器(虚拟机)
进入后:
下载地址:https://www.sonatype.com/download-oss-sonatype
2.1 安装 Nexus
- 安装nexus需要首先安装jdk环境 ( jdk安装参考 )
下载 jdk-8u151-linux-x64.tar.gz
java -version
- 上传 nexus-3.15.2-01-unix.tar.gz 安装包到服务器
- 创建目录、解压缩 nexus
mkdir /usr/local/nexus
tar xvf nexus-3.15.2-01-unix.tar.gz -C /usr/local/nexus
- 启动nexus
cd /usr/local/nexus/nexus-3.15.2-01/bin
./nexus start
- 启动后稍等大于1分钟,查看端口监听
netstat -antp|grep 8081
端口监听问题:
-bash: netstat: command not found
解决:
yum install -y net-tools
成功解决,说明linux中没有安装这个东东,需要安装下哈
2.2 访问配置 Nexus
- 访问地址 http://ip:8081 我的是:
http://192.168.188.182:8081/
出现登陆框,输入账号 admin 密码 admin123
登录成功
- 配置nexus创建Docker私有仓库
- 进入系统设置界面
点击Repositories
点击创建仓库(Create Repository
)
选择要创建的仓库类型(docker(hosted)
)
配置docker仓库信息
查看仓库详情
- 仓库地址:192.168.188.182:8086
- 仓库账号: admin
- 密码: admin123
2.3 配置 Docker 服务器连接到 Nexus 私有仓库
步骤一:
进入上面Dockerfile (之前)的那台服务器(192.198.188.181)
关闭并且删除启动过的容器,如下:
步骤二:
- 修改 /etc/docker/daemon.json 配置docker私有仓库
编辑:
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://fln0ctgy.mirror.aliyuncs.com"],
"insecure-registries":["192.168.188.182:8086"]
}
- 刷新守护进程、重启dcker
systemctl daemon-reload
systemctl restart docker
2.4 连接 docker 私服镜像仓库及使用
- 登录私服镜像仓库
docker login 192.168.188.182:8086
- 输入账号:admin
- 密码:admin123
- 提示,Login Succeeded 表示登录成功
- 为镜像打一个tag标签
在上传镜像之前需要先打一个tag,用于版本标记。
格式是这样的:
docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag>
例如:
docker tag springboot1 192.168.188.182:8086/springboot1
- 上传(推送)镜像
docker push 192.168.188.182:8086/springboot1
登录私服查看,则已经推送成功 http://192.168.188.182:8081/
- 删除推送的镜像和之前的同一个镜像,为了看看是否能拉取成功
- 下载镜像
从私服中下载镜像也很简单,执行以下命令即可
docker pull 192.168.188.182:8086/springboot1:latest
注意:确保docke服务器和私服在同一网段、或者能够进行通信。
- 搜索镜像(大家看到可以再琢磨哈)
- 搜索镜像也与之前的类似,如下:
docker search 192.168.188.182:8086/springboot1
- 就可以搜索带有springboot1的镜像了: