1.Docker简介
1.1.为什么会有docker出现
Docker出现的背景
在实际开发过程中,会出现很多环境:开发环境、测试环境以及生产环境。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQ3OIyMU-1640254447380)(assets/image-20200731133822416.png)]](https://img-blog.csdnimg.cn/6cd0066bfae6428bba5dba3e6c26464f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
那么我们如何解决这个“水土不服”的问题?我们可以将软件带环境安装,来解决这种问题。
带环境安装
软件可以带环境安装?也就是说,开发人员要交付的是代码和环境,运维人员部署的时候把原始环境一模一样地复制过来。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0SR3h24h-1640254447382)(assets/image-20211118115214657.png)]](https://img-blog.csdnimg.cn/c0e71adfe9af4614a0d8e55670a342f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
总结:开发人员利用 Docker 可以消除“在我的机器上可正常工作”的问题

1.2.什么是Docker?
Docker 是一个开源的应用容器引擎
诞生于2013 年初,基于 Go 语言实现,dotCloud 公司出品
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,实现了“Build,Ship and Run Any App,Anywhere”的目标。
Docker从17.03 版本之后分为 CE(Community Edition: 社区版)和EE(Enterprise Edition: 企业版)。

1.3.虚拟机和容器
虚拟机(virtual machine):在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统,应用程序对此毫无感知,因为虚拟机跟真实系统一模一样。虚拟机缺点:启动慢,占用资源多。
Linux 容器(Linux Containers,缩写为 LXC):由于虚拟机存在缺点,Linux 发展出了另一种容器虚拟化技术,容器不是模拟一个完整的操作系统,只需要软件工作所需的库资源和设置。
Docker 将应用运行在容器上面,所以可以把Docker看做是mini版的Linux。

1.4.Docker 核心概念
| 概念 | 说明 |
|---|---|
| docker镜像(Images) | 软件打包好的用于创建 Docker 容器的模板【类】 |
| docker容器(Container) | 运行中的镜像称为容器【对象】 |
| docker仓库(Registry) | 用来保存各种打包好的软件镜像 |

2.Docker安装
2.1.安装Docker
1、查看内核版本,docker要求linux内核3.8以上
[root@localhost ~]# uname -a
2、把yum包更新到最新
[root@localhost ~]# yum update #可省略
3、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源为阿里云
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、可以查看所有仓库中可用的docker版本
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
6、安装docker
[root@localhost ~]# yum install docker-ce
或
[root@localhost ~]# yum install docker-ce-18.06.3.ce-3.el7
7、查看docker版本
[root@localhost ~]# docker -v
2.2.启动和关闭
启动:
[root@localhost ~]# service docker start #起动
查看状态:
[root@localhost ~]# service docker status #状态
停止:
[root@localhost ~]# service docker stop #关闭
重启:
[root@localhost ~]# service docker restart #重启docker
设置docker开机自启动:
[root@localhost ~]# systemctl enable docker
2.3.配置阿里云镜像加速
1.登录阿里云(http://dev.aliyun.com)

2.在控制台搜索容器镜像服务
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ikfWXYJ-1640254447383)(assets/image-20200905162559430.png)]](https://img-blog.csdnimg.cn/5bb81b74c9c242f69781191248f57ed8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AoXG5hG9-1640254447385)(assets/image-20200905160938116.png)]](https://img-blog.csdnimg.cn/857b110a38d14577ac1e6a28ec09734b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
3.找到镜像加速器
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lireLFy-1640254447386)(assets/image-20200905163523014.png)]](https://img-blog.csdnimg.cn/23b65812913d48eebd0028cb23992445.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
4、配置镜像加速
[root@localhost ~]# sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://crhn72f8.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
[root@localhost ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://crhn72f8.mirror.aliyuncs.com"]
> }
> EOF
sudo systemctl restart docker{
"registry-mirrors": ["https://crhn72f8.mirror.aliyuncs.com"]
}
[root@localhost ~]# sudo systemctl daemon-reload
[root@localhost ~]# sudo systemctl restart docker
[root@localhost ~]#
5.测试
[root@localhost ~]# docker info
... ...
Registry Mirrors:
https://crhn72f8.mirror.aliyuncs.com/
3.Docker常用命令
3.1.镜像命令
3.1.1.检索
语法:
docker search IMAGE
案例:
[root@localhost ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an ... 2823 [OK]
tomee Apache TomEE is an ... 82 [OK]
dordoka/tomcat Ubuntu 14.04, Tomcat 8 ba... 55 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image... 35 [OK]
3.1.2.拉取
从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。如果不知道镜像版本,可以去hub.docker.com 搜索对应镜像查看。
语法:
docker pull IMAGE:[TAG]
案例:
[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
e5ae68f74026: Pull complete 5.67MB/31.37MB
37c4354629da: Pull complete
b065b1b1fa0f: Pull complete
6954d19bb2e5: Pull complete 2.52MB/8.33MB
6333f8baaf7c: Pull complete
f9772c8a44e7: Pull complete
Digest: sha256:2f502d27c3e9b54295f1c591b3970340d02f8a5824402c8179dcd20d4076b796
Status: Downloaded newer image for redis:latest
[root@localhost ~]# docker pull redis:3.0
3.0: Pulling from library/redis
f5cc0ee7a6f6: Pull complete
5fc25ed18e87: Pull complete
e025bc8872f6: Pull complete
77c68b51b836: Pull complete
7c403ece3755: Pull complete
0a653bd338f4: Pull complete
31531fd948c6: Pull complete
Digest: sha256:730b765df9fe96af414da64a2b67f3a5f70b8fd13a31e5096fee4807ed802e20
Status: Downloaded newer image for redis:3.0
3.1.3.列表
列出本地主机上的镜像
语法:
docker images
案例:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest 904a98253fbf 12 days ago 680MB
redis 3.0 c44fa74ead88 4 years ago 91.6MB
3.1.4.删除
使用 docker rmi 命令删除镜像。
语法:
docker rmi IMAGE[:tag]
案例:
[root@localhost ~]# docker rmi redis
Untagged: redis:latest
Untagged: redis@sha256:2f502d27c3e9b54295f1c591b3970340d02f8a5824402c8179dcd20d4076b796
Deleted: sha256:aea9b698d7d1d2fb22fe74868e27e767334b2cc629a8c6f9db8cc1747ba299fd
Deleted: sha256:beb6c508926e807f60b6a3816068ee3e2cece7654abaff731e4a26bcfebe04d8
Deleted: sha256:a5b5ed3d7c997ffd7c58cd52569d8095a7a3729412746569cdbda0dfdd228d1f
Deleted: sha256:ee76d3703ec1ab8abc11858117233a3ac8c7c5e37682f21a0c298ad0dc09a9fe
Deleted: sha256:60abc26bc7704070b2977b748ac0fd4ca94b818ed4ba1ef59ca8803e95920161
Deleted: sha256:6a2f1dcfa7455f60a810bb7c4786d62029348f64c4fcff81c48f8625cf0d995a
Deleted: sha256:9321ff862abbe8e1532076e5fdc932371eff562334ac86984a836d77dfb717f5
[root@localhost ~]#
3.2.容器命令
3.2.1.新建并启动容器
语法:
docker run [options] IMAGE[:TAG]
OPTIONS说明:有些是一个减号,有些是两个减号
- –name:为容器指定一个名称
- -d:后台模式运行容器
案例:
[root@localhost ~]# docker run redis:3.0
[root@localhost ~]# docker run --name redis_1 redis:3.0
[root@localhost ~]# docker run --name redis_2 -d redis:3.0
3.2.2.列出启动容器
语法:
docker ps [options]
OPTIONS说明:
- -a :列出当前所有正在运行的容器+历史上运行过的
[root@localhost ~]# docker ps
[root@localhost ~]# docker ps -a
3.2.3.停止容器
语法:
docker stop CONTAINER NAME
[root@localhost ~]# docker stop redis_2
3.2.4.启动容器
语法:
docker start CONTAINER
例如:
[root@localhost ~]# docker start redis_2
3.2.5.删除容器
语法:
docker rm CONTAINER NAME
例如:
[root@localhost ~]# docker rm redis_2
3.2.6.与运行中的容器交互
语法:
docker exec [options] CONTAINER NAME [command]
OPTIONS说明:
- -i:以交互模式运行容器,通常与-t 连用
- -t:为容器重新分配一个伪终端,通常与-i 连用
案例:
[root@localhost ~]# docker exec -it redis_2 /bin/bash
root@5a896d980db4:/data#
root@5a896d980db4:~# pwd
/root
root@5a896d980db4:~# cd /
root@5a896d980db4:/# ll
bash: ll: command not found
root@5a896d980db4:/# ls -l
total 8
drwxr-xr-x. 2 root root 4096 Jun 20 2017 bin
drwxr-xr-x. 2 root root 6 Apr 20 2017 boot
drwxr-xr-x. 2 redis redis 6 Jun 23 2017 data
drwxr-xr-x. 5 root root 340 Dec 4 06:17 dev
lrwxrwxrwx. 1 root root 34 Jun 23 2017 entrypoint.sh -> usr/local/bin/docker-entrypoint.sh
drwxr-xr-x. 1 root root 66 Dec 4 06:17 etc
drwxr-xr-x. 2 root root 6 Apr 20 2017 home
drwxr-xr-x. 1 root root 6 Jun 23 2017 lib
drwxr-xr-x. 2 root root 34 Jun 20 2017 lib64
drwxr-xr-x. 2 root root 6 Jun 20 2017 media
drwxr-xr-x. 2 root root 6 Jun 20 2017 mnt
drwxr-xr-x. 2 root root 6 Jun 20 2017 opt
dr-xr-xr-x. 186 root root 0 Dec 4 06:17 proc
drwx------. 2 root root 37 Jun 20 2017 root
drwxr-xr-x. 3 root root 30 Jun 20 2017 run
drwxr-xr-x. 2 root root 4096 Jun 20 2017 sbin
drwxr-xr-x. 2 root root 6 Jun 20 2017 srv
dr-xr-xr-x. 13 root root 0 Dec 4 06:00 sys
drwxrwxrwt. 1 root root 6 Jun 23 2017 tmp
drwxr-xr-x. 1 root root 19 Jun 23 2017 usr
drwxr-xr-x. 1 root root 41 Jun 23 2017 var
root@5a896d980db4:/# exit
exit
[root@localhost ~]#
3.2.7.查看容器日志
语法:
docker logs CONTAINER NAME
案例:
[root@localhost ~]# docker logs redis_2
4.Docker数据卷
4.1.数据卷概念
我们先来思考几个问题:
- docker容器删除后,在容器中产生的数据还在吗? 比如我在redis的容器里面存储了数据,删除了redis容器之后,数据是否还在?
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3vWc19lx-1640254447388)(assets/wpsD564.tmp.jpg)]](https://img-blog.csdnimg.cn/df8e1536243942b1ac44a8f78edc62eb.png)
- docker容器和外部机器可以直接交换文件吗? 比如我们可以在windows里面编写代码之后,直接部署tomcat容器里面吗?
![ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YFpRbEw4-1640254447389)(assets/wpsD565.tmp.jpg)]](https://img-blog.csdnimg.cn/d44399bc6bb44746add83eebf6332fde.png)
数据卷的概念:
数据卷是宿主机中的一个目录或文件,数据卷设计的目的在于数据的持久化和共享数据,它完全独立于容器的生存周期;作用是容器数据持久化、外部机器和容器之间数据交换;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cDt3IAPV-1640254447391)(assets/wps1520.tmp.jpg)]](https://img-blog.csdnimg.cn/b8b174e7ef2e462bbad9160b0c09d71c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_13,color_FFFFFF,t_70,g_se,x_16)
语法:创建容器时,使用 –v 参数 设置数据卷。如果目录不存在,会自动创建。
docker run ... –v 宿主机目录:容器内目录 ......
4.2.容器与宿主机之间的数据共享
建立一个名为c1的容器,并挂载宿主机目录/root/data_host,对应容器目录/root/data_container
[root@localhost ~]# docker pull centos:7 #拉取镜像 [root@localhost ~]# docker run --name c1 -id -v /root/data_host:/root/data_container centos:7 #新建并启动容器 b17764ac91316795889b674a70de2029a6b2a902023328accf12160c535bfcd8 [root@localhost ~]# ll 总用量 8 -rw-------. 1 root root 1571 10月 19 16:49 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 12月 1 17:09 data_host #自动创建data_host -rw-r--r--. 1 root root 1619 10月 20 00:53 initial-setup-ks.cfg drwxr-xr-x. 2 root root 6 10月 19 17:03 公共 drwxr-xr-x. 2 root root 6 10月 19 17:03 模板 ... ... [root@localhost ~]#在宿主机data_host目录里面创建一个文件,检查容器的data_container目录是否同步
[root@localhost ~]# cd data_host/ [root@localhost data_host]# touch a.txt [root@localhost data_host]# docker exec -it c1 /bin/bash [root@33001b1e7251 /]# cd /root [root@33001b1e7251 ~]# ll total 4 -rw-------. 1 root root 3416 Nov 13 2020 anaconda-ks.cfg drwxr-xr-x. 2 root root 19 Dec 1 09:13 data_container [root@33001b1e7251 ~]# cd data_container/ #自动创建data_host [root@33001b1e7251 data_container]# ll total 0 -rw-r--r--. 1 root root 0 Dec 1 09:13 a.txt #同步a.txt [root@33001b1e7251 data_container]#
4.3.容器与容器之间的数据共享
创建容器c2,挂载data_host数据卷。
[root@localhost ~]# docker run --name c2 -id -v /root/data_host:/root/data_container centos:7 #新建并启动容器在c2容器里面创建一个文件,检查c1容器是否同步
[root@localhost data_host]# docker exec -it c2 /bin/bash [root@952232b7e451 ~]# cd /root/data_container/ [root@952232b7e451 data_container]# touch b.txt #创建文件 [root@952232b7e451 data_container]# exit exit [root@localhost data_host]# docker exec -it c1 /bin/bash [root@33001b1e7251 /]# cd /root/data_container/ [root@33001b1e7251 data_container]# ll total 0 -rw-r--r--. 1 root root 0 Dec 1 09:13 a.txt -rw-r--r--. 1 root root 0 Dec 1 09:50 b.txt #同步文件 [root@33001b1e7251 data_container]#
5.docker的应用安装
5.1.docker安装mysql
需求:
- 在Docker容器中部署MySQL,并通过外部mysql客户端操作MySQL Server。
问题:
- 容器内的网络服务和外部机器不能直接通信
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLBXHIjE-1640254447392)(assets/image-20211202142501222.png)]](https://img-blog.csdnimg.cn/f6e9d7cba5544b2cad78a80d69c68fcd.png)
解决方案:
- 当容器中的网络服务需要被外部的机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机器访问宿主机上的端口,从而间接访问容器的服务。(这种操作称为容器映射)。
安装步骤:
拉取mysql镜像
[root@localhost ~]# docker pull mysql:5.7创建容器
docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=1111 \ -d mysql:5.7参数说明:
-p:指定端口映射,宿主机port:宿主机port
**-e:**配置信息,此处配置mysql的root用户的登陆密码
修改容器中日志目录的权限
root@475d266f286c:/# chown -R mysql:mysql /var/log/mysql说明:安装mysql时会生成mysql:mysql用户组和用户,启动mysql默认是使用mysql用户mysql.cnf
在宿主机中创建mysql.cnf文件
[root@localhost conf]# cd /usr/local/docker/mysql/conf/ [root@localhost conf]# vim mysql.cnf [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-bin=/var/log/mysql/mysql-bin server-id=1重启容器并测试


5.2.docker安装tomcat
需求:
- 在Docker容器中部署Tomcat,并通过外部机器访问Tomcat部署的项目。
安装步骤:
拉取tomcat镜像
[root@localhost ~]# docker pull tomcat创建容器
docker run -p 8080:8080 --name tomcat \ -v /usr/local/docker/tomcat/webapps:/usr/local/tomcat/webapps \ -d tomcat在宿主机中部署工程
[root@localhost mysql]# cd /usr/local/docker/tomcat/webapps/ [root@localhost webapps]# cd test [root@localhost test]# vim index.html <h1>hello,dcoker!!!</h1>测试

说明:以后我们只需要把写好的项目发布到宿主机就可以了
5.3.docker安装redis
需求:
- 在Docker容器中部署Tomcat,并通过外部机器访问Tomcat部署的项目。
安装步骤:
下载安装包并解压
[root@localhost upload]# wget http://download.redis.io/releases/redis-3.0.0.tar.gz [root@localhost upload]# tar -zxvf redis-3.0.0.tar.gz拉取镜像
[root@localhost ~]# docker pull redis:3.0拷贝redis.conf
[root@localhost ~]# cd /usr/local/docker/ [root@localhost docker]# mkdir -p redis/data [root@localhost docker]# mkdir -p redis/conf [root@localhost docker]# cp /usr/upload/redis-3.0.0/redis.conf /usr/local/docker/redis/conf/创建容器
docker run -p 6379:6379 --name redis \ -v /usr/local/docker/redis/conf:/etc/redis/redis.conf \ -v /usr/local/docker/redis/data:/data \ -d redis:3.0 redis-server /etc/redis/redis.conf测试

6.Docker File
6.1.是什么Docker File?
Docker File是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本。
从应用软件的角度来看,Docker File、Docker镜像与Docker容器分别代表软件的三个不同阶段,Docker File面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

6.2.Docker File常用指令

- FROM:指定构建使用的基础镜像,
FROM命令必须写在其他的指令前 - EXPOSE:声明容器对外暴露的端口号
- ENV:设置环境变量,可以在容器内获取使用
- WORKDIR:终端默认的工作目录
- VOLUME :使容器内的一个目录具有持久化存储的功能
- CMD:指定容器启动时执行的一条命令,如果指定了多条
CMD命令,则只有最后一条会被执行;CMD会被docker run之后的参数替换 - ENTRYPOINT:同
CMD,但docker run之后的参数会传递给ENTRYPOINT形成新的命令组合。 - RUN:不同于CMD指令,RUN可以在Dockerfile中出现和执行多次
- ADD:从src复制文件到容器中的dest
- COPY:类似于ADD,不支持压缩包
- MAINTAINER:用于为Dockerfile署名
- ONBUILD:是一个特殊的指令,只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行

6.3.Docker File 入门
6.3.1.hub默认centos
6.3.1.1.测试
[root@localhost ~]# docker run -it centos:7 #运行centos容器
[root@2ec46814342e /]# pwd
/
[root@2ec46814342e /]# vim a.txt
bash: vim: command not found
[root@2ec46814342e /]# ifconfig
bash: ifconfig: command not found
6.3.1.2.问题
- 默认工作目录是/
- 默认不支持vim
- 默认不支持ifconfig
6.3.2.自定义centos
6.3.2.1.需求
- 登陆后的默认路径
- vim编辑器
- 查看网络配置ifconfig支持
6.3.2.2.编写Docker File
准备:
[root@localhost usr]# cd /usr/local/docker
[root@localhost docker]# vim docker-file
Docker File内容:
FROM centos:7 #继承centos:7
MAINTAINER mgw<mgw@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
6.3.2.3.构建
语法:
docker build [OPTIONS] PATH
OPTIONS说明:
- -f:DockerFile路径
- -t :自定义镜像名称:TAG
例如:
[root@localhost docker]# docker build -f docker-file -t mycentos:1.0 .
6.3.2.4.测试
[root@localhost docker]# docker run -it --name mycentos mycentos:1.0
[root@1eaed8189758 local]# vim a.txt
[root@1eaed8189758 local]# pwd
/usr/local
[root@1eaed8189758 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet)
RX packets 6 bytes 516 (516.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6.3.2.5.压缩镜像
如果我们要把镜像给别人使用,需要压缩镜像:
[root@localhost docker]# docker save -o mycentos.1.0.rar mycentos:1.0
[root@localhost docker]# ls
docker-file mycentos.1.0.rar mysql redis tomcat
6.3.2.5.解压镜像
如果被人要用这个镜像,只需要把这个压缩文件解压即可:
[root@localhost docker]# docker rmi mycentos:1.0
[root@localhost docker]# docker load -i mycentos.1.0.rar
6.3.2.5.查看镜像历史变更
[root@localhost docker]# docker history mycentos:1.0
7.Docker部署springboot项目
7.1.开启docker的远程连接访问
项目中使用maven可以通过DockerFile远程连接并构建镜像 ,达到快速测试的目的:
修改docker.service文件,添加监听
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y5GAaAav-1640254447395)(assets/image-20211206172257547.png)]](https://img-blog.csdnimg.cn/b60243bb490147a6acdbb25a5df8baae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
重启docker服务
systemctl daemon-reload systemctl restart docker测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySOe8WBe-1640254447396)(assets/image-20211206173056232.png)]](https://img-blog.csdnimg.cn/44b185bda12b4579ae8a7ee6fbf0f60d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
7.2.配置idea的远程Docker
安装docker插件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LAMBHRCz-1640254447397)(assets/image-20211206172608521.png)]](https://img-blog.csdnimg.cn/fac904c2403f49dca8e867bafc2d41ca.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
配置docker地址
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ybk4aewC-1640254447398)(assets/image-20201008165002014.png)]](https://img-blog.csdnimg.cn/f945cde761314bf785c67916e9b9d935.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTX3zYFz-1640254447400)(assets/image-20201008165256386.png)]](https://img-blog.csdnimg.cn/07218e5292294c8b969180ff3539afbb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
7.3.创建Dockerfile
在项目根目录下创建名为Dockerfile的文件:
#指定基础镜像,在其上进行定制
FROM openjdk:8-jre
#挂载目录
VOLUME /usr/local/docker
#复制target/common_eureka-1.0-SNAPSHOT.jar 到容器里
COPY target/common_eureka-1.0-SNAPSHOT.jar eureka.jar
#声明运行时容器提供服务端口
EXPOSE 8761
#指定容器启动程序及参数
ENTRYPOINT ["java","-jar","eureka.jar"]
7.4.打包工程
添加maven打包插件,并把工程打包:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
7.5.运行Dockerfile
右键启动Dockerfile:

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smh5eYX4-1640254447401)(assets/image-20201008200357699.png)]](https://img-blog.csdnimg.cn/baafec0735354949931bdf434bc8db68.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)
7.6.测试
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Nb9UxkB-1640254447402)(assets/image-20201008200232431.png)]](https://img-blog.csdnimg.cn/e9d542e8385e41379d60140c531df3a6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pWF5Lq66aKc,size_20,color_FFFFFF,t_70,g_se,x_16)