🤓记录下常用的 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
其他命令
查看容器运行的各种数据,其中IPAddress就是容器IP
docker inspect 容器id