Mark's blog 这是 Mark 的个人博客,记录些东西。

Docker 记录

🤓记录下常用的 Docker 命令,大多内容来自 这里

🔧这次是折腾博客的 Waline 评论系统,想自己独立部署,发现好久不用 Docker 给忘了一些命令。

🌚最后部署上了,不过还是弃用了。vps 在纽约的水牛城,速度实在太拉了。

😅部署 Waline 评论系统还是推荐直接官网的 Vercel 部署,数据库就用 ElephantSQL 提供的免费 20M 的 PostgreSQL 就行。

🤕独立部署 Waline 内容要参考的话,可以安装完 Docker 和 Docker compose 后,直接目录树跳到 Docker compose 部分

一键安装 Docker:

推荐使用 get.daocloud.io 来安装

官方:

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

国内:

curl -sSL https://get.daocloud.io/docker | sh

安装 Docker compose

国外:

curl -L "https://github.com/docker/compose/releases/download/2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

国内:

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

容器

hub.docker.com 搜索需要的镜像,右边找到 Docker Pull Command

获取镜像:

docker pull xxx

启动容器:

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

查看所有的容器命令如下:

docker ps -a

可以看到 container id, image, status, ports

停止和重启一个容器:

docker stop <container id>
docker restart <container id>

进入容器:

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker attach <container id>
docker exec <container id>

推荐大家使用 docker exec 命令,因为此方法,exit退出容器终端,不会导致容器的停止。

导出容器:

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 7b916fb13267 > /root/xxxx.tar

7b916fb13267 为 container id

导入容器快照:

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 xxxx.tar 导入到镜像 example/imagerepo

cat /root/xxxx.tar | docker import - example/imagerepo

此外,也可以通过指定 URL 或者某个目录来导入,例如:

docker import http://example.com/exampleimage.tgz example/imagerepo

删除容器:

删除容器使用 docker rm 命令:

docker rm -f 7b916fb13267

例子:运行一个 web 应用

前面我们运行的容器并没有一些什么特别的用处。 接下来让我们尝试使用 docker 构建一个 web 应用程序。

我们将在 docker 容器中运行一个 Python Flask 应用,来运行一个 web 应用。

docker pull training/webapp
docker run -d -P training/webapp python app.py

参数说明: -d:让容器在后台运行。 -P:将容器内部使用的网络端口随机映射到我们使用的主机上。

使用 docker ps 来查看我们正在运行的容器。 注意 ports 信息:

PORTS
0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。

这时我们可以通过浏览器访问WEB应用:

我们也可以通过 -p 参数来设置不一样的端口:

docker run -d -p 5000:5000 training/webapp python app.py

docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

docker port 7b916fb13267

接下来 docker stop 和 docker rm 停止和删除容器。

镜像

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 hub.docker.com 公共镜像源下载。

下面我们来学习: 1、管理和使用本地 Docker 主机镜像 2、创建镜像

列出镜像列表:

使用 docker images 来列出本地主机上的镜像。

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。 所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

docker run -t -i ubuntu:15.10 /bin/bash 

hub.docker.com 搜索需要的镜像,右边找到 Docker Pull Command

docker pull xxx

删除镜像:

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world

Docker compose

以安装 waline 为例子:

检查是否安装成功:

docker -v
docker-compose --version

创建一个测试目录:

cd /root
mkdir composetest
cd composetest

获取镜像:

docker pull lizheming/waline

在 composetest 目录下创建 docker-compose.yml 文件,示例:

version: '3'

services:
  waline:
    container_name: waline
    image: lizheming/waline:latest
    restart: always
    ports:
      - 8360:8360
    volumes:
      - ${PWD}/data:/app/data
    environment:
      TZ: 'Asia/Shanghai'
      SQLITE_PATH: '/app/data'
      JWT_TOKEN: 'Your token'
      SITE_NAME: 'Your site name'
      SITE_URL: 'https://example.com'
      SECURE_DOMAINS: 'example.com'
      AUTHOR_EMAIL: 'mail@example.com'

在 composetest 目录下创建 data 目录,下载 waline.sqlite 这个数据库文件:

cd /root/composetest
mkdir data
cd data
wget https://raw.githubusercontent.com/walinejs/waline/main/assets/waline.sqlite

使用 Compose 命令构建和运行:

cd /root/composetest
docker-compose up -d

列出所有运行容器:

docker-compose ps

访问 ip:端口

Docker Compose 其它: 更新容器: 当服务的配置 .yml 发生更改时,可使用 docker-compose up -d 命令更新配置 此时,Compose 会删除旧容器并创建新容器,新容器会以不同的 IP 地址加入网络,名称保持不变,任何指向旧容起的连接都会被关闭,重新找到新容器并连接上去。

启动指定服务已存在的容器:

docker-compose start xxx

停止已运行的服务的容器:

docker-compose stop xxx

删除指定服务的容器:

docker-compose rm xxx

其他命令

  1. 查看容器运行的各种数据,其中IPAddress就是容器IP

    docker inspect 容器id
By Mark On