Docker 的一些操作说明

这篇文档是介绍 Docker 的一些基本的操作命令。
也可以参照这篇文章

基本命令

  • 列出所有容器

    docker ps -a

  • 列出所有本地镜像

    docker images -a

  • 查看某个容器/镜像的元数据

    docker inspect [容器/镜像的名称或ID]

  • 查看所有的网桥

    docker network ls

  • 查看某个网桥的配置信息

    docker network inspect [网桥id或者名称]

  • 删除自定义的网桥(docker 默认的网桥不可以被删除!)

    docker network rm [网桥id或者名称]

  • 搜索镜像

    docker search [镜像名称]

  • 拉取镜像

    docker pull [镜像名称]

  • 删除某个镜像 或 删除所有镜像

    docker rmi [镜像名称/镜像ID]

    docker rmi docker rmi $(docker images -q)

  • 停止某个容器 或 停止所有容器

    docker stop [容器名称/容器ID]

    docker stop $(docker ps -aq)

  • 删除某个容器 或 删除所有容器

    docker rm [容器名称/容器ID]

    docker rm $(docker ps -aq)

  • 删除某个 或 所有的卷
    docker volume rm [卷名称/卷ID]
    docker volume rm $(docker volume ls -q)

  • 进入某个容器

    docker exec -it [容器ID] /bin/bash

  • 退出容器

    键盘: ctrl + p + q ,不要使用 exit 退出!

  • 使用 docker-compose 配置文件创建容器

    这个命令需要当前文件夹有 compose 的配置文件

    docker-compose up -d

  • 查找容器长 ID

    docker inspect -f '{{.ID}}' [容器名称]

  • 拷贝文件到容器

    docker cp -r [宿主机文件路径] [容器长ID]:[容器内目标路径]

    如:

    docker cp -r ./chevereto 329473294236987129378:/var/www/html

  • 查看某个docker容器内的日志

    docker logs -f container-name | sed 's/\\n/\n/g'


进阶知识

创建网桥 或 修改已经运行容器的网桥

网桥可以粗略的认为是局域网,网桥内的容器可以互相通信。并且可以很好的和外界隔离运行环境。

初始创建容器的时候,如果不指定网桥,那么会使用默认的网桥。

而后期,我们可能需要自定义一个或多个网桥,将不同的容器加入到某个网桥中。

  • 创建网桥

    docker network create --driver bridge [网桥名称]

其中 --driver bridge 可以不写。

  • 连接网桥

连接网桥有 2 种方式:
一种是: 在创建容器的时候链接网桥.
另外一种是: 后期在容器运行的时候,将容器加入到已经存在的网桥中.

  • 在创建时连接网桥:

docker create --name [容器名称] --network [网桥名称] [镜像名称]

  • 在容器运行的时候,将容器加入到已经存在的网桥中:

docker network connect [网桥名称] [容器名称]

我们可以通过 docker network inspect [网桥id或者名称] 来查看某个网桥的具体信息,比如这个网桥内都是有哪些容器。

有关网桥的简介可以看这篇文章


容器通信

Docker 容器通信

可以看这篇文章

备份docker文件:

  1. tar -czvPf ghostBackup20201230.tar ./DockerComposeFiles/ ./DockerVolumes/ 生成一个名为 ghostBackup20201230.tar 包 ( du -h ./ghostBackup20201230.tar 查看大小)
  2. zip 压缩上面合并2个文件之后的 tar 包 zip -rvjy ghostBackup30201230.tar.zip ./ghostBackup20201230.tar (V 可加可不加)
docker run -d -p 80:80 --name nginx-test -v ~/Desktop/Test/nginxTest/www:/usr/share/nginx/html -v ~/Desktop/Test/nginxTest/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/Desktop/Test/nginxTest/logs:/var/log/nginx nginx
  • 知识点 tar 以及 zip

    • 打包
#tar默认使用相对路径,-P 是指可以使用绝对路径,但是 -P不能在参数的最后, -C 临时切换到指定的工作目录,然后带上需要打包的文件或文件夹
tar -czvPf ${BACK_UP_NAME}.tar  -C ${SERVER_CONTENT_DIR}  ${SERVER_CONTENT_NAME}   StartShell.sh 

    • 压缩
#参数 -j 说明忽略目录,否则的话,压缩进去的可能会有目录路径
zip -rjvy ${SERVER_CONTENT_DIR}${BACK_UP_NAME}.tar.zip  ${SERVER_CONTENT_DIR}${BACK_UP_NAME}.tar

关于 Ghost blog 转储

  1. 原来没有使用 mysql 而是使用的 sqlite ,所以需要转储数据库。【不必迁移数据库,直接导出建网站内容,然后倒入到新的站点,用户名一致就可以。然后拷贝图片资源】
  2. 原来用的是 3.42.8 版本的 ghost ,而 mysql 5.7.36 能与 ghost 相连
  3. 解压 unzip -C ./ghostBackup20201230.tar.zip
  4. 解包 tar -xvf ./ghostBackup20201230.tar
  5. 新的命令行工具 tabby

关于命令行访问私有 docker hub 库的问题

命令行访问私有的 docker hub 库,如果不想明文传输密码,可以在 bash_profile 或者自定义的 profile 中,加入以下变量:

export docker_pwd="xxxxxx"

关于删除图片后,外部存储实际上并没有删除文件的问题

这是由于 chevereto 在后台使用 cron处理任务。 目前看下来是需要手动执行:

docker exec -it --user www-data 容器ID php /var/www/html/cli.php -C cron

具体参见文档