Files
article/centos 安装 docker.md
2025-09-19 16:59:31 +08:00

9.9 KiB
Raw Blame History

centos 安装 docker

Linux 安装 Docker

安装脚本

一键安装脚本Linux系统都支持

curl  -sSL https://get.docker.com/ | sh

oracle linxu

  1. 执行以下命令以安装Docker依赖项
sudo yum -y install yum-utils device-mapper-persistent-data lvm2
  1. 执行以下命令以添加Docker官方GPG key
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 执行以下命令以安装Docker CE
sudo yum install docker-ce
  1. 启动并设置Docker服务为开机自启
sudo systemctl start docker
sudo systemctl enable docker

通过docker --version命令您可以检查Docker是否已经安装。如果命令输出了版本信息说明已经成功安装Docker CE。

希望这次能给您提供一个更简洁的方法。

启动服务

    
    # 启动docker服务
    systemctl start docker.service

    # 停止docker服务
    systemctl stop docker.service

    # 重启docker服务
    systemctl restart docker.service

    # 查看docker服务当前状态
    systemctl status docker.service

    # 设置 docker 服务开机自启动
    systemctl enable docker.service

    # 停止 docker 服务开机自启动
    systemctl disable docker.service

镜像加速

国内镜像

为了加速下载镜像文件,国内服务器可以指定国内的镜像!

阿里云:https://registry.cn-hangzhou.aliyuncs.com/

华为云:https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com/

Docker中国https://registry.docker-cn.com

网易:http://hub-mirror.c.163.com

中科大:https://docker.mirrors.ustc.edu.cn

腾讯云 https://mirror.ccs.tencentyun.com

写入配置文件 重启服务

sudo mkdir -p /etc/docker

#注意EOF前不能有空格  
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

docker代理

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

重启 服务

sudo systemctl daemon-reload
sudo systemctl restart docker

迁移目录

主要是为了不让Docker镜像容器占用系统盘的容量

如果就一块盘或者系统盘容量大,这部分内容可忽略!


    # 给Docker廋身一下
    #docker system prune

    #停止Docker服务
    systemctl stop docker

    #创建目标目录
    mkdir -p /data/docker/

    #同步源目录文件 -> 目标目录
    rsync -avz /var/lib/docker/ /data/docker

    #修改Docker配置文件
    vim /etc/docker/daemon.json

    #修改或者新增内容如下
    {
        "data-root": "/data/docker"
    }

    #启动Docker服务 
    systemctl start docker

    # 查看是否修改成功
    docker info | grep "Docker Root Dir"

    #输出Docker Root Dir: /data/docker  就OK了

常用命令

    #下载镜像
    docker pull nginx
    #启动容器
    #下面命令为启动一个nginx将服务器的8080 端口 映射到 容器的80端口且容器命名为nginx-test
    docker run -d -p 8080:80 nginx --name="nginx-test"

    #停止容器
    docker stop xxxx

    删除容器
    docker rm id


    -f, --force=false 是否强行终止并删除一个运行中的容器
    -l, --link=false :删除容器的连接 ,但保留容器
    -v, --volumes=false :删除容器挂载的数据卷



    删除所有镜像
    docker rmi $(docker images -q)
    #停止所有容器
    docker stop $(docker ps -a -q)
    #删除所有容器
    docker rm $(docker ps -a -q)
    #启动所有容器
    docker start $(docker ps -a -q)


    #进入容器
    docker exec -it jd /bin/bash  
    docker exec -it jd /bin/sh
    docker exec -it jd /bash
    docker exec -it jd /sh


    #宿主往容器中复制文件
    docker cp /etc/apt/sources.list ubuntu:/etc/apt/


    #容器中往宿主机复制
    docker cp testtomcat/usr/local/tomcat/webapps/test/js/test.js /opt


    #不进入容器 在容器中执行命令 
    docker exec ID 命令

    #查看容器信息
    docker inspect ID


    #查询部分信息
    docker inspect -f {{.Config.Hostname}} id

#构建建启动nignx容器
docker-compose up -d nginx   

#登录到nginx容器中                
docker-compose exec nginx bash   
     
#删除所有nginx容器,镜像
docker-compose down  
                          
#显示所有容器
docker-compose ps                                 

#重新启动nginx容器
docker-compose restart nginx       

#在php-fpm中不启动关联容器并容器执行php -v 执行完成后删除容器          
docker-compose run --no-deps --rm php-fpm php -v  

#构建镜像 。
docker-compose build nginx                        


#不带缓存的构建。
docker-compose build --no-cache nginx   

#查看nginx的日志
docker-compose logs  nginx                   

# 查看nginx的实时日志
docker-compose logs -f nginx                
 
#验证docker-compose.yml文件配置当配置正确时不输出任何内容当文件配置错误输出错误信息。
docker-compose config  -q   
                   
#以json的形式输出nginx的docker日志
docker-compose events --json nginx     

#暂停nignx容器
docker-compose pause nginx               

#恢复ningx容器
docker-compose unpause nginx           

#删除容器(删除前必须关闭容器)
docker-compose rm nginx                     

#停止nignx容器
docker-compose stop nginx                  

# 启动nignx容器
docker-compose start nginx                 

开发调试

Build Dockerfile


  
  #比如我们要写一个Dockerfile 该怎么调试呢?
    docker build -t [命名] [编译的目录]

    #比如AList目录中有Dockerfile重新编译镜像且命名成alist
    docker build -t alist ./AList/

    #启动 alist
    docker run alist --name="alist"

容器目录映射

以docker hub的centos:8为研究对象

1、宿主机和容器映射目录都不存在

宿主机和容器映射目录都会自动创建,且在一边操作等同于在另一边操作。

2、宿主机目录不存在容器映射目录为空。容器中/usr/lib/games目录为空

宿主机映射目录会自动创建,且在一边操作等同于在另一边操作。

3、宿主机目录不存在容器映射目录不为空。容器中/usr/lib/locale/C.utf8目录不为空

宿主机映射目录会自动创建,容器映射目录中原来的文件都消失了,在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。

4、宿主机映射目录为空容器映射目录不存在

容器映射目录会自动创建,且在一边操作等同于在另一边操作。

5、宿主机和容器映射目录都为空。

在一边操作等同于在另一边操作。

6、宿主机映射目录为空容器映射目录不为空

容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。

7、宿主机映射目录不为空容器映射目录不存在

容器映射目录会自动创建,一进去该目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。

8、宿主机映射目录不为空容器映射目录为空

一进容器映射目录就能看见宿主机映射目录中的文件,且在一边操作等同于在另一边操作。

9、宿主机和容器映射目录都不为空。

容器映射目录中原来的文件都消失了。在一边操作等同于在另一边操作,且操作的是宿主机目录中的文件。

规则总表

下表总结了宿主机目录和容器目录在不同存在性与内容状态下的映射结果:

宿主机目录状态 容器目录状态 Docker 行为 最终效果(容器内视角)
不存在 不存在 自动创建宿主机和容器目录 一个空的、双向同步的目录
不存在 自动创建宿主机目录 一个空的、双向同步的目录
不存在 不为空 自动创建宿主机目录(空),并覆盖容器目录 容器原内容消失,变成一个空的、双向同步的目录
不存在 自动创建容器目录 一个空的、双向同步的目录
直接挂载 一个空的、双向同步的目录
不为空 用空目录覆盖容器目录 容器原内容消失,变成一个空的、双向同步的目录
不为空 不存在 自动创建容器目录 直接显示宿主机目录的内容,并双向同步
不为空 直接挂载 直接显示宿主机目录的内容,并双向同步
不为空 不为空 用宿主机目录覆盖容器目录 容器原内容消失被替换为宿主机目录的内容,并双向同步

常见问题

容器内没有网 不能解析dns

创建时添加以下参数

--network=host