目录
[2、使用yum 安装](#2、使用yum 安装)
一、docker是什么
docker的理念来自于集装箱,本质上就是一种虚拟机技术。一个开源的应用容器引擎,
让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口。使用go语言编写的。
实际上就是docker上拉取应用,只要Linux上能装docker,它就能使用docker上拉取的应用,
解决了环境不一致、解决了扩容、解决了资源之间相互隔离,动态扩容、微服务组件等问题
注意:docker本身并不是容器,他是创建容器的工具,是一个应用容器引擎。
简单来说:
- 就是可以快速部署启动应用
- 实现虚拟化,完整资源隔离
- 一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)
为什么要用?
- 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行。
- 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过docker快速启动
- 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
- 更好的资源隔离和共享。
一句话:开箱即用,快速部署,可移植性强,环境隔离
核心概念
-
镜像(image)。注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。
-
容器(container)。Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。
-
仓库(repository)。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。可以从一个镜像创建无数个容器。平时我们主要操作的就是容器。我们也可以把容器打包成镜像以方便再次使用。镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

二、docker安装
下面命令中有些命令后面会带个 \ 是因为嫌这个命令太长了给分隔开来,
如果运行命令不成功可以把 \ 给去了
1、卸载docker
先卸载是怕虚拟机之前有docker相关的残留
Go
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
去 \ 后写法:
Go
# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
2、使用yum 安装
- 安装yum命令的一些依赖包
Go
# yum -y install yum-utils
- 设置国内的yum源。这样下载会快,也稳定(可设可不设)
Go
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 更新yum源缓存,并安装 docker-ce
Go
# yum -y install docker-ce docker-ce-cli containerd.io
- 测试docker是否安装成功,查看版本
Go
# docker version
5)启动docker
Go
# 开机自启动
# systemctl start docker
# 启动docker
# systemctl start docker
- 测试docker是否启动成功(在仓库中拉取一个helloWorld镜像)
Go
# docker run --rm hello-world
三、docker常用命令
1、帮助命令
Go
# docker version #显示docker的版本信息。
# docker info #显示docker的系统信息,包括镜像和容器的数量
# docker 命令 --help #帮助命令
#帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/
2、镜像命令
汇总:
Go
# docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
# docker search 搜索镜像
# docker pull 下载镜像 docker image pull
# docker rmi 删除镜像 docker image rm
1)查看镜像
Go
# docker images
执行结果如下:
Go
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 7 weeks ago 13.3kB
mysql latest e3fcc9e1cc04 9 months ago 544MB
说明:
REPOSITORY:镜像的名称;
TAG:版本,latest表示最新版本;
IMAGEID:镜像ID,自动生成不会重复;
CREATED:什么时候创建的;
SIZE:大小
2)查询镜像
Go
# 以查询mysql镜像为例
# docker search mysql
说明:
NAME: 镜像仓库源的名称
DESCRIPTION: 镜像的描述
OFFICIAL: 是否 docker 官方发布
stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
AUTOMATED: 自动构建
3)拉取镜像
Go
# docker pull mysql
4)删除镜像
Go
# mysql为例
# docker rmi mysql
3、容器命令
Go
# 创建并启动容器
# docker run 参数 image
# 查看所有容器
# docker ps -a
# 删除容器
# docker rm 容器id
# 启动容器
# docker start 容器id
# 停止容器
# docker stop 容器id
# 重启容器
# docker restart 容器id
# 强制停止容器
# docker kill 容器id
# 在运行的容器中执行命令
# docker exec 参数 容器id 命令
# 查看容器日志
# docker logs 容器id
四、容器数据卷
如果数据都在容器中,那么我们容器删除,数据就会丢失。例如mysql,如果把mysql容器删除了,那么数据也没有了。这种情况是不好的。所以我们需要把容器和数据分开。我们想把Docker容器中产生的数据,同步到本地(宿主机)。这就是容器卷。
Go
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
例如mysql:
Go
# 参数说明
# -d 程序后台运行
# -p 绑定宿主机端口和容器端口
# --name 给容器起个名字
# -v 挂载容器卷
# -it 输出
# run --name=mysql -p 3316:3306 -v /etc/mysql/data:/data -it -e MYSQL_ROOT_PASSWORD=123456 -d mysql
Go
#进入mysql容器
docker exec -it mysql bash
Go
#修改mysql密码
mysql -u root -p
五、DockerFile
1、dockerFile介绍
dockerfile 是用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1、 编写一个dockerfile文件
2、 docker build 构建称为一个镜像
3、 docker run运行镜像
4、 docker push发布镜像(DockerHub 、阿里云仓库)
2、基础命令
Go
# DockerFile常用指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
3、springboot制作镜像并推送(linux)
1)打包springboot工程
Go
mvn package
2)上传到已经安装好docker的操作系统
3)编写dockerfile
注意dockerfile和jar要在同一目录下
Go
FROM java:8
COPY *.jar /app9091.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","app9091.jar"]
4)制作镜像
# 注意 后面有个. 表示是同级目录
# docker build -t springboot01:v1 .
5)制作成功后查看镜像
# docker images
6)将镜像推送到阿里云镜像仓库
此部分命令参考阿里云镜像仓库页面
Go
# 请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
# 镜像版本号tag和ImageId 通过 docker images 查看
# docker login --username=wujianyou10****@163.com registry.cn-hangzhou.aliyuncs.com
# docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]
# docker push registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]
7)测试拉取镜像
Go
# docker pull registry.cn-hangzhou.aliyuncs.com/youyou102105/test01:[镜像版本号]