Docker基础(简单易懂)

目录

一、docker是什么

核心概念

二、docker安装

1、卸载docker

[2、使用yum 安装](#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本身并不是容器,他是创建容器的工具,是一个应用容器引擎。

简单来说:

  1. 就是可以快速部署启动应用
  2. 实现虚拟化,完整资源隔离
  3. 一次编写,四处运行(有一定的限制,比如Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用)

为什么要用?

  1. 提供一次性的环境,假如需要安装Mysql,则需要安装很多依赖库、版本等,如果使用Docker则通过镜像就可以直接启动运行。
  2. 快速动态扩容,使用docker部署了一个应用,可以制作成镜像,然后通过docker快速启动
  3. 组建微服务架构,可以在一个机器上模拟出多个微服务,启动多个应用
  4. 更好的资源隔离和共享。

一句话:开箱即用,快速部署,可移植性强,环境隔离

核心概念

  1. 镜像(image)。注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放Ubuntu操作系统镜像的仓库,称为Ubuntu仓库,其中可能包括14.04、12.04等不同版本的镜像。

  2. 容器(container)。Docker镜像(Image)类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统。例如:一个镜像可以只包含一个完整的Ubuntu操作系统环境,可以把它称为一个Ubuntu镜像。

  3. 仓库(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 安装

  1. 安装yum命令的一些依赖包
Go 复制代码
# yum -y install yum-utils
  1. 设置国内的yum源。这样下载会快,也稳定(可设可不设)
Go 复制代码
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 更新yum源缓存,并安装 docker-ce
Go 复制代码
# yum -y install docker-ce docker-ce-cli containerd.io
  1. 测试docker是否安装成功,查看版本
Go 复制代码
# docker version

5)启动docker

Go 复制代码
# 开机自启动
# systemctl start docker
# 启动docker
# systemctl start docker
  1. 测试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:[镜像版本号]
相关推荐
漫无目的行走的月亮5 小时前
在Docker中运行微服务注册中心Eureka
docker
大道归简8 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
zeruns8029 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站
爱跑步的程序员~9 小时前
Docker
docker·容器
疯狂的大狗9 小时前
docker进入正在运行的容器,exit后的比较
运维·docker·容器
长天一色10 小时前
【Docker从入门到进阶】01.介绍 & 02.基础使用
运维·docker·容器
伊玛目的门徒10 小时前
docker 搭建minimalist-web-notepad
运维·docker·notepad
theo.wu12 小时前
使用Buildpacks构建Docker镜像
运维·docker·容器
wusam21 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)
学习·docker·centos
wusam1 天前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器