学习Docker内容之前必备内容:Linux服务器,阿里云账号(可以是虚拟机也可以是云服务器,若要将本地镜像推送到阿里云则需要云服务器),若您还不是很了解Linux的常用命令,请先学习Linux内容哟!!! OK,不废话了直接进入主题,本次讲解的Docker内容为基础内容,至于高级内容敬请期待哈,我也还在学习中。
提示:
Docker是基于Go语言实现的云开源项目,Docker的主要目标是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
即:可以快速的利用镜像给服务器安装相关组件,如MySQL、Redis、Tomcat等等
仓库:用于存放镜像和容器的地方,有远程仓库和本地仓库之分(和git很相似)
镜像:可以从远程下载到本地,类似于Java中的类,根据镜像可以创建多个容器
容器:镜像的实例,类似于Java中的对象,可以利用commit命令根据容器创建新的镜像
查看当前系统的版本号,确定是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
yum -y install gcc gcc+
参考地址:https://blog.csdn.net/qq_39999478/article/details/102809167
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令即可:
yum -y install docker-ce
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为示例进行演示以上相关命令:
[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 //
[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镜像都是只读的当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”,镜像就像千层饼一样一层包着一层,比如我们的Tomcat镜像里面就包含了其他的镜像。
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
[root@weiyiji ~]# docker commit -a="weiyiji" -m="test commit function" 1d726150b212 weiyiji/tomcat
sha256:f5acbc24214516317310a897012b438e3cb9a95914058026d4aa63f1365ff469
数据持久化文件,有点类似我们Redis里面的rdb和aof文件,通俗一点的说法就是,容器和物理宿主机之间文件的共享
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker build -f [文件的全路径] -t 镜像的新名称 // 构建新镜像语句
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
此次用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的快速开发部署后面我也会有相应的文章,敬请期待哟!!!不说了,不说了,我要准备溜溜球了。