Docker命令整理:本地开发环境的快捷配置方式

写在前面

服务器中快速部署项目环境避免不了docker的使用,所以专门在这里整理一下常用的docker命令。

优质视频链接

关于docker

Docker 就像一个盒子,里面可以装很多物件,如果需要某些物件,可以直接将该盒子拿走,而不需要从该盒子中一件一件的取。
可以简单地把docker理解为轻量级的VM虚拟机,但它和虚拟机是有区别的,具体区别请大家自行学习。

三个基本概念

  • 镜像(Image)

    Docker的镜像概念类似于虚拟机里的镜像(比如.ISO文件),是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

    例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了MySQL或用户需要的其它应用程序。

    这里的镜像就如下方虚拟机创建时候使用的镜像类似。这个镜像便于移动,并且这个镜像我们可以交给任何人使用,其他人使用的时候也很方便,只需要将其实例化即可,这也是docker迁移项目的便捷之处。

    关于创建镜像,就要讲到Dockerfile文件,镜像就是靠Dockerfile文件这个自动化脚本创建出来的。

  • 容器(Container)

    Docker容器是由Docker镜像创建的运行实例,类似VM虚拟机,支持启动,停止,删除等。

    每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

    容器就类似与虚拟机中我们创建好的虚拟机系统,之后我们所有的操作都是在容器中进行的,我们的程序也是运行在容器中。

  • 仓库(Repository/Hub)

    镜像便于传播,而仓库就是专门用来传播这些镜像的地方,他有点类似与Github,或者你可以把他看成一个存放各种镜像的镜像商店

    Docker官方的仓库:他的服务器处于国外,所以下载速度较慢,不过我们可以通过换源解决。

    daocloud国内仓库:国内也有一些优秀的商店,他和Docker官方的仓库的区别类似与Github和Gitee的区别。

    网易云镜像中心

安装和基础配置

安装

因为之后要在服务器上使用,所以这篇文章使用Linux的Ubuntu20.04发行版为例进行演示。

参考教程

Ubuntu一般自带docker,只是docker的旧版本不一定被称为docker,docker.io 或 docker-engine也有可能,所以需要先卸载:

1
sudo apt-get remove docker docker-engine docker.io containerd runc

如果不能正常卸载也没事,可以跳过上面的步骤,直接启用 Docker 软件源,更新软件包即可。具体操作如下:

1
2
3
4
5
6
7
8
//更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
//导入源仓库的 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
//将 Docker APT 软件源添加到你的系统
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
//Docker 软件源被启用了,你可以安装软件源中任何可用的 Docker 版本

安装 Docker 最新版本:

1
2
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

安装完成,Docker 服务将会自动启动。输入下面的命令进行验证:

1
sudo systemctl status docker

出现类似下面内容说明安装成功:

1
2
3
4
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 14:47:34 UTC; 42s ago
......

当一个新的 Docker 发布时,你可以使用标准的sudo apt update && sudo apt upgrade流程来升级 Docker 软件包。

如果你想阻止 Docker 自动更新,锁住它的版本:

1
sudo apt-mark hold docker-ce

以非 Root 用户身份执行 Docker

默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。

想要以非 root 用户执行 Docker 命令,你需要将你的用户添加到 Docker 用户组,该用户组在 Docker CE 软件包安装过程中被创建。想要这么做,输入:

1
sudo usermod -aG docker $USER

$USER是一个环境变量,代表当前用户名。登出,并且重新登录,以便用户组会员信息刷新。

卸载

在卸载 Docker 之前,你最好移除所有的容器,镜像,卷和网络。

运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象:

1
2
docker container stop $(docker container ls -aq)
docker system prune -a --volumes

可以使用apt像卸载其他软件包一样来卸载 Docker:

1
2
sudo apt purge docker-ce
sudo apt autoremove

docker命令使用

镜像(Image)

创建镜像需要自行编写Dockerfile文件,然后使用命令docker build即可。目前现有的镜像够我用了,Dockerfile以后再学。

  • docker images:查看已有镜像
  • docker images -q:查看已有镜像id

去dockerhub网站搜索镜像,然后拉取镜像

  • docker search xxx #xxx指你要搜索的镜像,例如mysql
  • docker search xxx –filter=STARS=3000 #搜索收藏量大于3000的xxx镜像
  • docker pull xxx #下载xxx镜像最新版,这里搜索比较慢的话需要换加速镜像
  • docker pull xxx:5.7 #下载xxx镜像5.7版本

删除镜像

  • docker rmi -f ID:根据id删除指定镜像

容器(Container)

创建容器

  • docker run [参数] 镜像名
    #参数说明
    –name=”name” #容器名字
    -d #后台方式运行
    -it #交互方式运行(进入容器)
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口
    -p 容器端口
    -p 随机指定端口

查看容器

  • docker ps #列出正在运行的容器
  • docker ps -a #列出所有容器(常用查看id)

删除容器

  • docker rm 容器id 不能删除正在运行的容器

启动/停止容器

  • docker start 容器id #启动容器
  • docker restart 容器id #重启容器
  • docker stop 容器id #停止当前正在运行的容器
  • docker kill 容器id #强制停止容器

日志/进程/元数据信息

  • docker logs -tf –tail 10 容器id #–tail 10表示显示10条日志
  • docker top 容器id #查看容器中进程信息
  • docker inspect 容器id #显示容器的所有信息

当容器正在运行时

  • docker exec -it 容器id /bin/bash #进入正在运行的容器,并开启一个新的终端
  • docker attach 容器id #进入正在运行的终端
  • dockr cp 容器id:/xxx/aaa.txt /xxx #将容器中/xxx文件夹下的aaa.txt文件拷贝到主机的/xxx文件夹下

数据挂载——数据卷技术

  • docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 –name mysql01 mysql:5.7
    #参数说明
    -d 后台运行
    -p 主机端口:容器端口 #端口映射
    -v 主机地址:容器地址 #卷挂载
    -e MYSQL_ROOT_PASSWORD=123456 #配置密码为123456
    –name 容器名字

Docker compose

常用的就是创建yaml文件,然后运行即可,关键在于yaml文件的编写。

  1. 创建并编写yaml文件
  2. 使用命令运行
    1
    docker compose up -d
    至于如何编写yaml文件建议自学,可以参考这些部署教程:Nginx Proxy Manager自建Picsur