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