目录

Docker 的基本操作及迁移

最近一直在捣鼓 VPS ,发现用 Docker 来部署应用很简便,并且迁移起来也方便。因此在这里记录下 Docker 的一些基本操作以及迁移和卸载的方法。

Docker 及 Docker compose 的安装与配置

Docker的安装

  • 升级 packages

    1
    
    apt update -y
    
  • 安装一些必要软件(Debian 系统比较干净)

    1
    
    apt install wget curl sudo vim git -y
    
  • Docker 安装(这里及下面所指都是大陆外的 vps)

    1
    
    wget -qO- get.docker.com | bash
    
  • 使 Docker 开机自启动

    1
    
    systemctl enable docker
    
    注意

    如要卸载 Docker ,则只需执行下面的代码

    1
    2
    3
    4
    
    apt-get purge docker-ce docker-ce-cli containerd.io
    
    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    
  • 这里我们还要修改一下 Docker 的配置

    以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘。——来自烧饼博客

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    cat > /etc/docker/daemon.json <<EOF
    {
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "20m",
            "max-file": "3"
        },
        "ipv6": true,
        "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
        "experimental":true,
        "ip6tables":true
    }
    EOF
    
  • 然后重启 Docker 便可生效

    1
    
    systemctl restart docker
    

Docker compose 的安装

  • 命令安装:

    1
    2
    3
    
    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    
    chmod +x /usr/local/bin/docker-compose
    
    注意

    如要卸载 Docker compose ,则只需执行下面的代码

    1
    2
    3
    
    cd /usr/local/bin/
    
    rm -rf docker-compose
    
  • 为了管理及迁移的方便,我们一般把所有的 Docker 数据统一放在一处,所以这里我们新建一个路径为/root/data/docker_data的文件:

    1
    2
    
    cd ~
    mkdir -p /root/data/docker_data
    

Docker 的迁移

当我们要换服务器时,Docker 的优势便体现了出来。这里我们以将原服务器 A 的 Docker 项目 doc 迁移至新服务器 B 为例:

doc 项目的传输

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 来到 A 服务器放 doc 项目的 Docker 数据的地方
cd /root/data/docker_data

# 创建 doc 的压缩文件 doc.tar.gz 
tar -czvf doc.tar.gz doc

# 将 A 服务器的 doc.tar.gz 文件通过 SSH 方式传输至 B 服务器的 /root/data/docker_data 路径下
scp -P 22 -r doc.tar.gz root@YourIP:/root/data/docker_data
# 其中22指 SSH 的端口,若不是则改为其他
# 其中 root 指 B 服务器的 root 用户
# 其中 YourIP 指 B 服务器的 IP 地址,而 YourIP: 后的路径可以自定义
注意
输入上面的代码后,会要求输入 B 服务器的 root 用户的密码,直接输入即可(以我的观察,输入密码时屏幕没啥变化)

开启 B 服务器上的 doc 项目

1
2
3
4
5
6
7
8
# 然后我们来到 B 服务器的对应路径下
cd /root/data/docker_data/

# 将 doc.tar.gz 解压为 doc
tar -zxvf doc.tar.gz

# 删除 doc.tar.gz
rm -rf /root/data/docker_data/doc.tar.gz
  • 若 doc 是以 Docker 命令形式部署的项目: 只需把之前部署的命令再敲一次就行(但是注意路径的映射)
  • 若 doc 是以 Docker compose 部署的项目:
    1
    2
    
    cd /root/data/docker_data/doc
    docker-compose up -d
    

停止 A 服务器上的 doc 项目并删除

这一步,可见 Docker 项目的停止及删除


Docker 项目的停止及删除

以 Docker 命令部署的项目的停止及删除

以 Docker compose 部署的项目也适用

我们要停止一个正在运行的 Docker 容器,首先要知道容器的名字或 ID ,所以可以通过下面命令,列出所有在运行的容器信息:

1
docker ps

注意

如果我们要列出所有容器的信息(包括已停止的容器),那么我们可以用下面的命令:

1
docker ps -a

当然还有关于docker ps的其他命令,但是最实用的就这两个,更详细的可见这里

记住要删除的容器名或 ID 以及其所对应的镜像。

  • 容器的停止

    1
    2
    
    docker stop <name_or_id>
    # <name_or_id> 为容器名或 ID
    

    如果我们只是想把项目停下,但保留数据,以便下次打开的话,到那么到这一步就可以了。但如果我们要将整个项目删除,则可以继续下面的步骤。

  • 容器的删除

    1
    
    docker rm -f <name_or_id>
    
  • 镜像的删除

    虽然我们删除了容器,但最占空间的镜像我们并没有删除。

    注意
    这里我们就算我们使用docker ps -a,也无法查看已删除容器的信息,但这并不意味着这个项目已经删干净了。
    我们可以通过下面的命令来查看所有的镜像名或 ID:

    1
    
    docker image ls -a
    

    找到与删除容器所对应的镜像,执行下面的命令便可删除镜像:

    1
    2
    
    docker rmi -f <image_name_or_id>
    # 这里 <image_name_or_id> 为镜像名或 ID
    
  • 删除本地映射文件

    我们在运行 Docker 项目时常常会将本地文件与容器中文件做一个映射,然后容器的数据便会在映射的本地文件中储存,这也是我们要删除的一部分,我们可以执行下面的命令:

    1
    2
    3
    
    rm -rf <your_path>
    # <your_path>为本地映射文件的路径
    # 如果按照之前的规范,该路径一般为 /root/data/docker_data/doc ,把 doc 换为你的项目名即可
    
    提示
    其实一般来说,我们只要留着映射文件,就能重新部署出一模一样的 Docker 项目,这正如我们在项目迁移的过程中所做的。所以尽量不要删除比较好。
  • 其他

    还有网络配置等的数据需要删除,但一般而言,它们占空间并不大,如要细究可见这里

  • 总结

    总体而言,这种删除方法比较复杂,如果没啥要保留的镜像,我们可以直接使用Docker 数据的清理介绍的方法来清除这些数据(但是映射文件无法通过该方法清除)。

以 Docker compose 部署的容器的停止及删除

以 Docker 命令部署的项目并不适用

这里仍以上面的 doc 项目为例

1
2
3
4
# 来到本地映射文件目录下
cd /root/data/docker_data/doc
# 停止并删除容器
docker-compose down 

这里我们只能停止并删除容器,而其他操作参考以 Docker 命令部署的项目的停止及删除的镜像删除及其之后的操作。


Docker 数据的清理

使用 Docker 就不得不面对一个问题,那就是磁盘空间的清理,因为我们有时会忘记删除不用的 Docker 容器及镜像。

我们一般可以通过下面的代码来查看 Docker 镜像与容器的占用情况:

1
docker system df

我们可能会看到一个很可怕的数据,因此我们应当定期地删除一些已停止的容器,未使用的网络和悬挂的镜像,即执行下面的命令:

1
docker system prune

或者,更激进一点,直接删除所有与正在运行的容器无关的镜像:

1
docker system prune -a

参考文章:

  1. Docker容器如何更新?如何迁移应用?如何卸载?
  2. Docker ps 命令
  3. How to clean your Docker data
警告
本文最后更新于 June 14, 2023,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系删除。
若文章帮助到了您,就不妨点一下👇广告,支持博主吧!