持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
迁移与备份
-
容器保存为镜像
docker commit [容器名] [保存的镜像名] -
镜像备份
docker save -o [镜像备份名.tar] [镜像] -
镜像恢复与迁移
docker load -i [镜像备份名.tar]
Docker 私有仓库
私有仓库搭建与配置
-
拉取私有仓库镜像
docker pull registry -
启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry打开浏览器访问地址:【主机 IP:5000/v2/_catalog】
-
修改 daemon.json
vim /etc/docker/daemon.json添加以下内容,保存退出
{"insecure-registries":["主机 IP:5000"]}{"insecure-registries":["192.168.3.39:5000"]}此步是用于让 docker 信任私有仓库地址
-
重启 Docker 服务
systemctl restart docker -
启动 registry 容器
docker start registry
上传本地镜像
-
将本地镜像打包
docker tag [本地镜像名称]:[版本] [主机 IP:5000]/[镜像名]docker tag mysql:5.7 192.168.3.39:5000/mysql -
push 上传镜像到私有仓库
docker push [镜像名 REPOSITORY]docker push 192.168.3.39:5000/mysql -
浏览器访问地址:【主机 IP:5000/v2/_catalog】
Dockerfile
Dockerfile 是由一系列命令和参数组成的脚本文件。这些命令应用于基础镜像并最终创建一个新的镜像。
常用命令
| 命令 | 作用 |
|---|---|
| FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
| MAINTAINER usr_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 | 设置工作目录 |
制作 JDK1.8 镜像
-
首先,在 Linux 中创建一个 jdk8 目录,用来存放我们的 JDK 文件
mkdir -p /usr/local/jdk8 -
将 JDK8 的
*.tar.gz包通过 XFTP 上传到/usr/local/jdk8目录下 -
在
/usr/local/jdk8目录下,创建并编辑 Dockerfile 文件(也就是 JDK 包和 Dockerfile 需要在同一目录下)vim Dockerfile添加以下内容:
FROM centos:7 WORKDIR /usr RUN mkdir /usr/local/java ADD jdk-8u311-linux-x64.tar.gz /usr/local/java ENV JAVA_HOME /usr/local/java/jdk1.8.0_311 ENV PATH $JAVA_HOME/bin:$PATH- FROM centos:7:指定基础镜像为 Centos7
- WORKDIR /usr:工作目录
- RUN mkdir /usr/local/java:创建目录
- ADD jdk-8u311-linux-x64.tar.gz /usr/local/java:将 jdk8 包拷贝并解压到 ==/usr/local/java== 目录
- ENV JAVA_HOME【ENV PATH】:配置环境变量
-
构建镜像
docker build -t='jdk1.8' .==.== 表示当前目录,不能丢
-
等待 Docerfile 里的命令执行完成,构建成功
DockerMaven 插件进行微服务部署
DockerMaven 插件 Github 地址:github.com/spotify/doc…
微服务部署
手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器
通过使用 Maven 插件实现自动部署,对于数量众多的微服务,手动部署非常麻烦且容易出错,所以建议使用自动部署。
步骤
总体步骤:
- DockerMaven 先将项目打成 Jar 包
- 再将 Jar 包打包成 Image 镜像
- 之后将镜像上传到私有仓库
- 最后我们直接去 Doker 里面通过镜像创建容器去运行访问就可以了
修改主机配置
-
修改主机的 docker.service 文件,使其可以远程访问
vim /lib/systemd/system/docker.service打开 docker.service 文件,将
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock修改为:
ExecStart= ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -
重启服务
systemctl daemon-reload -
重新启动 Docker
systemctl restart docker -
启动私人仓库
docker start registry
修改防火墙规则
-
修改防火墙暴露 2375 端口(开放端口很重要,困了好久)
firewall-cmd --zone=public --add-port=2375/tcp --permanent #开放2375/tcp端口 -
更新防火墙,使防火墙设置生效
firewall-cmd --reload -
查看防火墙开放端口
firewall-cmd --zone=public --list-ports
IDEA 插件配置
-
在 pom.xml 中添加 plugin 配置
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <!--绑定 maven package 命令--> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--打包后的镜像名称--> <imageName>${project.artifactId}:${project.version}</imageName> <!--doker 远程地址--> <dockerHost>http://192.168.3.39:2375</dockerHost> <!--基于基础镜像构建--> <baseImage>jdk1.8</baseImage> <!--运行 jar 包的命令--> <entryPoint>["java","-jar","-Dspring.profiles.active=dev","/${project.build.finalName}.jar"] </entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> -
执行 Maven 的 package 命令
-
等待打包完成
-
在宿主机上查看镜像
docker images可以看到我们以项目名命名的镜像,版本为 pom.xml 中的版本
-
创建容器 test1,端口映射到 7070
docker run -di --name=test1 -p 7070:7070 dockertest:0.0.1-SNAPSHOT -
浏览器访问【宿主机 IP:端口】即可以正常访问。