前言

学习Docker内容之前必备内容:Linux服务器阿里云账号(可以是虚拟机也可以是云服务器,若要将本地镜像推送到阿里云则需要云服务器),若您还不是很了解Linux的常用命令,请先学习Linux内容哟!!! OK,不废话了直接进入主题,本次讲解的Docker内容为基础内容,至于高级内容敬请期待哈,我也还在学习中。
提示:

  • 本文中我使用的是Centos7系统,若是其他版本系统可能会存在差异,请自行百度
  • Docker只能安在 64 位的操作系统上,Windos系统也可安装Docker但是不推荐安装

一、Docker内容简介

Docker是什么

Docker是基于Go语言实现的云开源项目,Docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Docker能做什么
  • 更快速的应用交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算资源利用

即:可以快速的利用镜像给服务器安装相关组件,如MySQL、Redis、Tomcat等等

Docker三要素

仓库:用于存放镜像和容器的地方,有远程仓库和本地仓库之分(和git很相似)

镜像:可以从远程下载到本地,类似于Java中的类,根据镜像可以创建多个容器

容器:镜像的实例,类似于Java中的对象,可以利用commit命令根据容器创建新的镜像

二、Docker的安装

确认系统版本

查看当前系统的版本号,确定是CentOS7及以上版本

[root@weiyiji ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
确认当前服务器可以连接外网
[root@weiyiji ~]# ping www.baidu.com
PING www.a.shifen.com (220.181.38.150) 56(84) bytes of data.
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=1 ttl=52 time=7.17 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=2 ttl=52 time=7.18 ms
64 bytes from 220.181.38.150 (220.181.38.150): icmp_seq=3 ttl=52 time=7.15 ms
安装GCC相关
yum -y install gcc gcc+
如果存在旧版本,卸载旧版本

参考地址:https://blog.csdn.net/qq_39999478/article/details/102809167

安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装Docker CE

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令即可:

yum -y install docker-ce
启动Docker
systemctl start docker
测试是否安装成功

安装成功后,查看安装版本

docker version

若显示结果如下,则说明安装成功

Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-203.git0be3e21.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      0be3e21/1.13.1
 Built:           Thu Nov 12 15:11:46 2020
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-203.git0be3e21.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      0be3e21/1.13.1
 Built:           Thu Nov 12 15:11:46 2020
 OS/Arch:         linux/amd64
 Experimental:    false
配置镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,
我使用的是阿里云的本人自己账号的镜像地址(需要自己注册有一个属于你自己的):
阿里云: https://dev.aliyun.com/search.html
使用账号登录,找到容器镜像服务-镜像加速器,获取自己的加速地址
在这里插入图片描述

配置本机Docker运行镜像加速器,将自己的加速地址配置进去:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://3a1lerus.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
### 三、Docker的常用命令
#### 帮助命令
```xml
docker version	// 查看docker版本号
docker info		// 查看docker详细信息
docker --help	// docker帮助命令,可用于查询操作镜像或容器命令
镜像命令
  • 搜索镜像命令:
docker search XXXX // 在https://hub.docker.com网站中搜索XXX镜像
docker search XXXX -s  // 列出收藏数不小于指定值的镜像
docker search XXXX --no-trunc  // 显示完整的镜像描述
docker search XXXX --automated   // 只列出 automated build类型的镜像
  • 下载镜像命令:
docker pull 镜像名字[:TAG]    // 不添加标签号,则默认下载最新版本最新版本为
  • 查看本地仓库镜像命令:
docker images  // 查询本机上所有的镜像(不包含中间映像层)
docker images -a  // 查询本机上所有的镜像(含中间映像层)
docker images -q  // 只显示镜像ID
docker images --digests  // 显示镜像的摘要信息
docker images --no-trunc  // 显示完整的镜像信息

删除镜像命令:

```xml
docker rmi  -f 镜像ID				// 删除单个镜像(镜像ID可换成镜像名称:标签)
docker rmi  -f 镜像ID1 镜像ID2		// 删除多个镜像(镜像ID可换成镜像名称:标签)
docker rmi -f $(docker images -qa)	// 删除本地全部镜像

以Tomact为示例进行演示以上相关命令:

  • 搜索镜像:docker search tomcat,选择需要下载版本,此处我下载consol/tomcat-7.0
[root@weiyiji ~]# docker search tomcat
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   3024      [OK]       
tomee                         Apache TomEE is an all-Apache Java EE certif…   87        [OK]       
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   57                   [OK]
bitnami/tomcat                Bitnami Tomcat Docker Image                     37                   [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      30                   
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              18                   [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                   [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              13                   [OK]
arm32v7/tomcat                Apache Tomcat is an open source implementati…   10                   
rightctrl/tomcat              CentOS , Oracle Java, tomcat application ssl…   6                    [OK]
maluuba/tomcat7-java8         Tomcat7 with java8.                             6                    
unidata/tomcat-docker         Security-hardened Tomcat Docker container.      5                    [OK]
arm64v8/tomcat                Apache Tomcat is an open source implementati…   3                    
amd64/tomcat                  Apache Tomcat is an open source implementati…   2                    
oobsri/tomcat8                Testing CI Jobs with different names.           2                    
jelastic/tomcat               An image of the Tomcat Java application serv…   2                    
cfje/tomcat-resource          Tomcat Concourse Resource                       2                    
ppc64le/tomcat                Apache Tomcat is an open source implementati…   1                    
picoded/tomcat7               tomcat7 with jre8 and MANAGER_USER / MANAGER…   1                    [OK]
camptocamp/tomcat-logback     Docker image for tomcat with logback integra…   1                    [OK]
99taxis/tomcat7               Tomcat7                                         1                    [OK]
chenyufeng/tomcat-centos      tomcat基于centos6的镜像                              1                    [OK]
softwareplant/tomcat          Tomcat images for jira-cloud testing            0                    [OK]
secoresearch/tomcat-varnish   Tomcat and Varnish 5.0                          0                    [OK]
s390x/tomcat                  Apache Tomcat is an open source implementati…   0     

以上属性介绍:

NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED
镜像名称镜像描述镜像下载次数是否为官方镜像-
  • 下载该指定的镜像:
docker pull consol/tomcat-7.0
  • 本地仓库查看该镜像
[root@weiyiji ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
consol/tomcat-7.0   latest    7c34bafd1150   5 years ago   601MB

以上属性介绍:

REPOSITORYTAGIMAGE IDCREATEDSIZE
镜像名称镜像的版本号,latest为最新版本号镜像ID镜像创建时间镜像大小
  • 删除指定镜像
docker rmi  -f 7c34bafd1150    
或者 docker rmi  -f consol/tomcat-7.0  (标签号为latest时,可以不用添加)
容器命令

提示:容器是根据镜像进行创建出来的,因此有容器之前必须要有镜像

  • 根据镜像新建容器命令:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS参数说明:

–name-d-i-t-P-p
为容器指定名称(不加系统会默认添加一个)以后台方式运行以交互模式运行容器,通常与 -t 同时使用为容器重新分配一个伪输入终端,通常与 -i 同时使用随机端口映射指定端口映射
  • 查询容器命令:
docker ps [OPTIONS]
-a-l-n-q–no-trunc
列出当前所有正在运行的容器+历史上运行过的显示最近创建的容器显示最近n个创建的容器静默模式,只显示容器编号不截断输出
  • 退出容器方式:

exit:容器停止退出
ctrl+P+Q:容器不停止退出

  • 启动容器:
docker start 容器ID或者容器名
  • 重启容器:
docker restart 容器ID或者容器名
  • 停止容器:
docker stop 容器ID或者容器名
  • 强制停止容器:
docker kill 容器ID或者容器名
  • 删除容器:
docker rm 容器ID     // 删除单个容器
docker rm 容器ID 容器ID2 容器ID3     // 删除多个容器
  • 其余容器命令(看黑板,重点)
docker logs -f -t --tail 容器ID  // 查看容器日志
docker top 容器ID			// 查看容器内运行的进程
docker inspect 容器ID       //   查看容器内部细节
docker exec -it 容器ID bin/bash  //  进入正在运行的容器并以命令行交互
docker attach 容器ID     // 进入容器
docker cp  容器ID:容器内路径 目的主机路径    // 复制文件从容器到主机上
attach和exec 区别:
		attach直接进入容器启动命令的终端,不会启动新的进程
		exec是在容器中打开新的终端,并且可以启动新的进程

以Tomcat进行案列演示:

  • 启动容器:
docker run -it -p 8080:8080 --name tomcat 7c34bafd1150 // 
  • 结果展示:
    在这里插入图片描述
  • 外网访问该服务:
    在这里插入图片描述
  • 不停止退出容器:Ctrl+P+Q
  • 查看容器运行状态:
[root@weiyiji ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
1d726150b212   7c34bafd1150   "/bin/sh -c /opt/tom…"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 8778/tcp   tomcat
  • 停止容器:
docker stop 1d726150b212

四、Docker镜像

Docker镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

镜像的特点

Docker镜像都是只读的当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”,镜像就像千层饼一样一层包着一层,比如我们的Tomcat镜像里面就包含了其他的镜像。

Docker容器提交生成新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

还是以Tomcat案列演示:

  • 先查看镜像:
[root@weiyiji ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
centos              latest    300e315adb2f   4 months ago   209MB
consol/tomcat-7.0   latest    7c34bafd1150   5 years ago    601MB
  • 利用commit命令创建新的容器:
[root@weiyiji ~]# docker commit -a="weiyiji" -m="test commit function" 1d726150b212 weiyiji/tomcat
sha256:f5acbc24214516317310a897012b438e3cb9a95914058026d4aa63f1365ff469
  • 再次查看镜像:
    在这里插入图片描述

五、Docker容器数据卷

什么是Docker容器数据卷

数据持久化文件,有点类似我们Redis里面的rdb和aof文件,通俗一点的说法就是,容器和物理宿主机之间文件的共享

容器数据卷的作用

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:

  • 数据卷可在容器之间共享或重用数据
  • 卷中的更改可以直接生效
  • 数据卷中的更改不会包含在镜像的更新中
  • 数据卷的生命周期一直持续到没有容器使用它为止
容器数据卷添加
方式一:直接利用命令添加
 docker run -it -v /宿主机绝对路径目录:/容器内目录      镜像名
方式二:利用DockerFile添加
  • 物理机新建Dockerfile文件
  • 构建Dockerfile文件(添加对应的命令内容)
  • 通过build命令生成新的镜像,然后运行该镜像
docker build -f [文件的全路径] -t 镜像的新名称     // 构建新镜像语句

在这里插入图片描述

六、DockerFile解析

什么是DockerFile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

DockerFile基础知识
  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交
Docker执行Dockerfile的大致流程
  • docker从基础镜像运行一个容器
  • 执行一条指令并对容器作出修改
  • 执行类似docker commit的操作提交一个新的镜像层
  • docker再基于刚提交的镜像运行一个新容器
  • 执行dockerfile中的下一条指令直到所有指令都执行完成
Dockerfile的保留字指令
  • FROM:基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN: 容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露出的端口
  • WORKDIR: 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY:类似ADD,拷贝文件和目录到镜像中。
    将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD: 指定一个容器启动时要运行的命令,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  • ENTRYPOINT :指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
  • ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

七、演示如何将本地镜像发布到阿里云

此次用cnetos作用演示

[root@weiyiji ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                                                  NAMES
b03341731fdd   redis          "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
905508446f0a   mysql          "docker-entrypoint.s…"   14 minutes ago      Up 14 minutes      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
f83ed6816f49   centos         "/bin/bash"              About an hour ago   Up About an hour                                                          reverent_dijkstra
1d726150b212   7c34bafd1150   "/bin/sh -c /opt/tom…"   About an hour ago   Up About an hour   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 8778/tcp    tomcat

构建新的镜像

[root@weiyiji ~]# docker commit -a weiyiji -m "new mycentos1.1" f83ed6816f49 mycentos:1.1
sha256:75047c98a74ad40be2a5545a43ffc7cf99df688bf4913ad77f3e367ae5d3ee11
[root@weiyiji ~]# docker images
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
mycentos            1.1       75047c98a74a   6 seconds ago       209MB
weiyiji/tomcat      latest    f5acbc242145   About an hour ago   601MB
redis               latest    ccee4cdf984f   2 days ago          105MB
mysql               latest    0627ec6901db   2 weeks ago         556MB
centos              latest    300e315adb2f   4 months ago        209MB
consol/tomcat-7.0   latest    7c34bafd1150   5 years ago         601MB

登录阿里云开发者平台

创建仓库镜像
在这里插入图片描述
选择本地仓库
在这里插入图片描述
根据阿里云中的提示命令进行镜像推送
在这里插入图片描述
检查是否成功上传自己的镜像

[root@weiyiji ~]# docker pull registry.cn-zhangjiakou.aliyuncs.com/weiyijibuy/mycentos:1.1
1.1: Pulling from weiyijibuy/mycentos
Digest: sha256:aaa788df384180c69425ded08771b42685d5ba326dfb9cb40ec1945614a879cd
Status: Downloaded newer image for registry.cn-zhangjiakou.aliyuncs.com/weiyijibuy/mycentos:1.1
registry.cn-zhangjiakou.aliyuncs.com/weiyijibuy/mycentos:1.1
[root@weiyiji ~]# docker images
REPOSITORY                                                 TAG       IMAGE ID       CREATED          SIZE
mycentos                                                   1.1       75047c98a74a   50 minutes ago   209MB
registry.cn-zhangjiakou.aliyuncs.com/weiyijibuy/mycentos   1.1       75047c98a74a   50 minutes ago   209MB

如上图所示,我们自定义的镜像已经上传到阿里云的镜像服务器中了,其实也可以上传到共有的gitHub网站,但是由于是国外的网站上传速度很慢,所以本次选择上传阿里云服务器。

八、小结

Docker其实很重要的,很多人都没有放到心上,希望大家可以好好学习下,本次文章是根据我自己学习后的一个记录,便于以后可以快速查询相关内容,其中有些地方由于时间和篇幅的原因没有进行详细解释,但是大部分应该还是提到了。Docker搭配Jenkins快速的开发部署已经成为了趋势,因为我们作为开发人员也是需要掌握的,至于Docker搭配Jenkins的快速开发部署后面我也会有相应的文章,敬请期待哟!!!不说了,不说了,我要准备溜溜球了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐