docker


1. 什么是Docker

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App , Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

虚拟机:就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

Docker 就是在Linux的基础上发展过来的。将应用运行在Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。





2. Docker安装

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

### 查看自己的内核
[root@lihao ~]# uname -r
3.10.0-1062.12.1.el7.x86_64

2.1 安装gcc相关环境

yum -y install gcc-c++

2.2 安装docker所需软件包

yum install -y yum-utils

2.3 设置镜像仓库

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.4 更新yum软件包索引

yum makecache fast

#如果出现 failure: repodata/repomd.xml from mirrors.aliyun.com_docker-: [Errno 256] No

#请看该网址:https://blog.csdn.net/nyasm/article/details/116704921

2.5 安装Docker CE(CE是免费版)

yum install docker-ce docker-ce-cli containerd.io

2.6 启动Docker

systemctl start docker

2.7 测试Docker

docker version    #查看docker版本

2.8 配置阿里云镜像加速(加速下载镜像)

1、介绍:https://www.aliyun.com/product/acr
2、注册一个属于自己的阿里云账户(可复用淘宝账号)
3、进入管理控制台设置密码,开通
4、查看镜像加速器自己的

2.8 配置镜像加速

# sudo mkdir -p /etc/docker

# cd /etc/docker

# vim daemon.json
{
 "registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
}

# sudo systemctl daemon-reload

# sudo systemctl restart docker



3. Docker必知概念

3.1 什么是镜像(image)

Docker 镜像就是一个只读的模板。

镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 就好似 Java 中的 类和对象,类就是镜像,容器就是对象!

3.2 什么是容器(container)

Docker 利用容器独立运行的一个或一组应用。

容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

3.3 什么是仓库(repository)

仓库 是集中存放镜像文件的场所。





4. Docker常用命令

4.1 帮助命令

docker version  # 显示 Docker 版本信息。
docker info     # 显示 Docker 系统信息,包括镜像和容器数。。
docker --help   # 帮助

4.2 镜像命令

#1. 列出本地主机上的镜像
[root@kuangshen ~]# docker images
REPOSITORY     TAG         IMAGE ID      CREATED                  SIZE
hello-world     latest       bf756fb1ae65     4 months ago        13.3kB

# 上述内容解释:
REPOSITORY  镜像的仓库源
TAG     镜像的标签
IMAGE ID   镜像的ID
CREATED   镜像创建时间
SIZE     镜像大小

# 同一个仓库源可以有多个 TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG 定义不同
的镜像,如果你不定义镜像的标签版本,docker将默认使用 lastest 镜像!

# 可选项
-a:    列出本地所有镜像
-q:    只显示镜像id
--digests: 显示镜像的摘要信息

===================
#2. 搜索镜像
# docker search 某个镜像的名称  对应DockerHub仓库(网址:https://registry.hub.docker.com/)中的镜像
# docker search 某个镜像的名称-----> 相当于就是在DockerHub仓库网址中在搜索栏搜索某个镜像在页面上展示的结果一样

[root@kuangshen ~]# docker search mysql
NAME    DESCRIPTION                                    STARS    OFFICIAL    
mysql   MySQL is a widely used, open-source relation…  9484     [OK]        

# 可选项
--filter=stars=50 : 列出收藏数不小于指定值的镜像。

===================
#3. 下载镜像
# docker pull 镜像名称
# 若不指定tag,默认是latest(最新)
[root@kuangshen ~]# docker pull mysql

# docker pull 镜像名称:版本
[root@kuangshen ~]# docker pull mysql:5.7

===================
#4. 删除镜像
# 删除镜像 -f 表示强制
docker rmi -f 镜像id                     # 删除单个
docker rmi -f 镜像名:tag 镜像名:tag      # 删除多个空格隔开
docker rmi -f $(docker images -qa)      # 删除全部

4.2 容器命令

有镜像才能创建容器,我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !

docker pull centos

#1. 新建容器并启动
docker run [OPTIONS] IMAGE [COMMAND][ARG...]
# OPTIONS常用参数说明
--name="Name"        # 给容器指定一个名字
-d                   # 后台方式运行容器,并返回容器的id!
-i                   # 以交互模式运行容器,通过和 -t 一起使用
-t                   # 给容器重新分配一个终端,通常和 -i 一起使用
-P                   # 随机端口映射(大写)
-p                   # 指定端口映射(小结),一般可以有四种写法

# 测试
[root@kuangshen ~]# docker images
REPOSITORY     TAG         IMAGE ID      CREATED         SIZE
centos       latest       470671670cac     3 months ago  237MB

# 使用centos进行用交互模式启动容器,在容器内执行/bin/bash命令!
[root@kuangshen ~]# docker run -it centos /bin/bash

===================
#2. 退出容器
[root@dc8f24dd06d0 /]# exit # 使用 exit 退出容器

===================
#3. 退出容器[不让其停止运行]
ctrl+P+Q   # 容器不停止退出  注意按键顺序 P按了之后再按Q

===================
#4. 列举出运行的容器
docker ps [OPTIONS]

# 常用参数说明
-a    # 列出当前所有正在运行的容器 + 历史运行过的容器
-l    # 显示最近创建的容器
-n=?   # 显示最近n个创建的容器
-q    # 静默模式,只显示容器编号

===================
#5. 启动停止容器
docker start (容器id or 容器名)     # 启动容器
docker restart (容器id or 容器名)    # 重启容器
docker stop (容器id or 容器名)     # 停止容器
docker kill (容器id or 容器名)     # 强制停止容器

===================
#6. 删除容器
docker rm 容器id                  # 删除指定容器
docker rm -f $(docker ps -a -q)  # 删除所有容器
docker ps -a -q|xargs docker rm  # 删除所有容器

4.3 其他命令

#1. 查看日志
docker logs -f -t --tail 容器id

# -t 显示时间戳 
# -f 打印最新的日志
# --tail 数字 显示多少条!
[root@kuangshen ~]# docker logs -tf --tail 10 c8530dbbe3b4
2020-05-11T08:46:40.656901941Z kuangshen
2020-05-11T08:46:41.658765018Z kuangshen
2020-05-11T08:46:42.661015375Z kuangshen

===================
#2. 查看容器中运行的进程
docker top 容器id

# 测试
[root@kuangshen ~]# docker top c8530dbbe3b4
UID   PID   PPID     C   STIME   TTY  TIME       CMD
root   27437  27421  0   16:43    ?    00:00:00  /bin/sh -c ....

===================
#3. 查看容器/镜像的元数据(详细信息)
docker inspect 容器id

===================
#4. 进入正在运行的容器
docker exec -it 容器id bashShell  #在容器中打开新的终端,并且可以启动新的进程

或者

docker attach 容器id              #直接进入容器启动命令的终端,不会启动新的进程


===================
#5. 文件复制[从容器内拷贝文件到主机上]
docker cp 容器id:容器内路径 目的主机路径

# 测试
# 容器内执行,创建一个文件测试
[root@c8530dbbe3b4 /]# cd /home
[root@c8530dbbe3b4 home]# touch f1
[root@c8530dbbe3b4 home]# ls
f1
[root@c8530dbbe3b4 home]# exit
exit
# linux复制查看,是否复制成功
[root@kuangshen ~]# docker cp c8530dbbe3b4:/home/f1 /home
[root@kuangshen ~]# cd /home
[root@kuangshen home]# ls
f1