docker安装及详解
前言学习Docker内容之前必备内容:Linux服务器,阿里云账号(可以是虚拟机也可以是云服务器,若要将本地镜像推送到阿里云则需要云服务器),若您还不是很了解Linux的常用命令,请先学习Linux内容哟!!!OK,不废话了直接进入主题,本次讲解的Docker内容为基础内容,至于高级内容敬请期待哈,我也还在学习中。提示:本文中我使用的是Centos7系统,若是其他版本系统可能会存在差异,请自行百度
前言
学习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
以上属性介绍:
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|---|---|---|---|
镜像名称 | 镜像描述 | 镜像下载次数 | 是否为官方镜像 | - |
- 下载该指定的镜像:
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
以上属性介绍:
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
镜像名称 | 镜像的版本号,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的快速开发部署后面我也会有相应的文章,敬请期待哟!!!不说了,不说了,我要准备溜溜球了。
更多推荐
所有评论(0)