Centos7 官方网址

https://docs.docker.com/engine/install/centos/

有的话先卸载

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装软件包

yum install -y yum-utils

添加镜像源

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo           #默认是外国官网的

#更换为阿里云的
yum-config-manager \
    --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

小插曲

安装错误的源

https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found

解决办法:

cd /etc/yum.repos.d

ls

CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo docker-ce.repo
CentOS-Debuginfo.repo CentOS-Sources.repo mirrors.ustc.edu.cn_docker-ce_linux_centos_docker-ce.repo

国内无法连接docker默认的境外地址,删除docker相关的repo文件即可

rm -rf docker-ce.repo

rm -rf mirrors.ustc.edu.cn_docker-ce_linux_centos_docker-ce.repo

如果想安装docker-ce可以使用国内yum源

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

安装最新版的docker引擎 ce是社区版本

更新yum
yum makecache fast
安装docker 默认最新的
yum install docker-ce docker-ce-cli containerd.io
#更换版本的
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 

选择y一路安装
在这里插入图片描述

启动docker
systemctl start docker
查看版本
docker version

在这里插入图片描述

运行hello world
docker run hello-world

发现不存在就是拉取 pull

在这里插入图片描述

查看下载的镜像
docker images
[root@iZwz99z6ggy4qg0wakux9nZ /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

在这里插入图片描述

卸载docker
yum remove docker-ce docker-ce-cli containerd.io #卸载依赖
rm -rf /var/lib/docker  #删除资源 docker的默认工作路径

阿里云镜像加速

登录阿里云,找容器服务

在这里插入图片描述

找到镜像加速位置

在这里插入图片描述

寻找centos配置使用
1.sudo mkdir -p /etc/docker

2. sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://tx6sz1tl.mirror.aliyuncs.com"]
}
EOF

3.sudo systemctl daemon-reload 

4.sudo systemctl restart docker #重启
截图如下
[root@iZwz99z6ggy4qg0wakux9nZ /]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB
[root@iZwz99z6ggy4qg0wakux9nZ /]# sudo mkdir -p /etc/docker
[root@iZwz99z6ggy4qg0wakux9nZ /]# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://tx6sz1tl.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://tx6sz1tl.mirror.aliyuncs.com"]
}
[root@iZwz99z6ggy4qg0wakux9nZ /]# sudo systemctl daemon-reload
[root@iZwz99z6ggy4qg0wakux9nZ /]# sudo systemctl restart docker

回顾helloworld流程

开始run ->在本机寻找判断是否有镜像

底层原理

Docker的常用命令

帮助命令
docker version  #版本

docker info    #基本信息

docker --help  #帮助文档

帮助文档的地址[https://docs.docker.com/reference/]

镜像的命令

docker images #查看所有的镜像 https://docs.docker.com/engine/reference/commandline/images/

docker images --help
[root@iZwz99z6ggy4qg0wakux9nZ /]# docker images --help

Usage:    docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs  # 只显示id

docker search 搜索镜像
docker search mysql

[root@iZwz99z6ggy4qg0wakux9nZ /]# docker search mysql
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9735                [OK]                
mariadb                           MariaDB is a community-developed fork of MyS…   3552                [OK]                
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   713                                     [OK]
percona                           Percona Server is a fork of the MySQL relati…   496                 [OK]                
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   77                                      
mysql/mysql-cluster               Experimental MySQL Cluster Docker images. Cr…   73                  
通过收藏来过滤
docker search  --filter =STARS=3000  #收藏数不少于3000的
下载镜像 默认最新 镜像名[:tag]
docker pull mysql     

指定版本
docker pull mysql:5.7  仓库中要有
#mysql:

下载镜像的原理是分层下载可以重复利用,占用空间小

在这里插入图片描述

删除镜像 docker rmi 使用docker images 查看根据 IMAGE ID来删除
docker rmi -f  d05c76dbbfcf


docker rmi -f $(docker images -aq) #递归删除  删除所有的镜像

在这里插入图片描述

容器命令

有镜像才有容器,下载一个centos镜像来学习

docker pull centos
新建容器的启动
docker run [可选参数] image
--name="Name" #命名的方式来区分容器
-d
-it            # 交互模式运行
-p          #  指定容器端口
-p          #  ip:主机端口:容器端口
-P            #  随机指定端口
启动并进入容器
[root@iZwz99z6ggy4qg0wakux9nZ ~]# docker run -it centos /bin/bash
[root@5d5357892508 /]# 

exit退出来 (容器停止退出 ) ctrl+p+q(容器退出来不停止)

[root@5d5357892508 /]# exit
exit
[root@iZwz99z6ggy4qg0wakux9nZ ~]# 
查看容器
docker ps       # 列出当前正在运行的容器

docker ps  -a   # 当前运行的+历史运行的

显示最后被创建的 n 个容器
docker ps -n 3
docker ps -n ?  # 最近创建的容器
删除容器
docker rm     容器id                    #容器id  前强制删除正在运行的 -f

docker rm -f $(docker ps -aq)   #删除所有的容器

启动和停止容器的操作
docker start  容器id    #启动

docker restart 容器id     #重启容器

docker stop 容器id    #停止当前容器

docker kill 容器id   #强制停止当前容器

常用的其他命令

后台启动命令
docker run -d centos
# 问题docker ps 发现centos停止了
# 常见的坑,docker容器使用后台运行,就必须要有一个进程,docker发现没有应用就会自动停止
# 例如 nginx 容器启动后,发现自己 没有提供服务,就会立刻停止,就是没有程序了

查看日志命令
docker logs  -tf 

docker logs -tf --tails  10 #显示最近10条日志
查看容器中的进程信息
docker top  容器id
查看镜像的元数据
docker  inspect 容器id
进入当前正在运行的镜像
#通常容器是是使用后台  需要进入容器,修改一些配置
方式一
docker exec -it 容器id   /bin/bash  #进入容器开启一个新的终端

方式二

docker attach 容器id        #进入正在执行的终端,执行代码的终端,不会启动新进程

将容器内文件拷贝到主机上
docker cp  容器id:容器内的路径 目的主机的路径

#执行效果
[root@ad54c64d03ab home]# touch test.java
[root@ad54c64d03ab home]# ls
test.java
[root@ad54c64d03ab home]# cd /
[root@ad54c64d03ab /]# exit
exit
[root@iZwz99z6ggy4qg0wakux9nZ ~]# docker cp ad54c64d03ab:/home/test.java /home
[root@iZwz99z6ggy4qg0wakux9nZ ~]# cd /
[root@iZwz99z6ggy4qg0wakux9nZ /]# cd home
[root@iZwz99z6ggy4qg0wakux9nZ home]# ls
test.java