Kika's
Blog
图片简介 | CC BY 4.0 | 换一张

Docker 速查

2023-12-07

常用速查,不太适合新手入门,入门可以看这个

安装

参考

直接通过脚本安装

# $ curl -fsSL test.docker.com -o get-docker.sh
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud

或者键入以下命令安装:

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加软件源的 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 向 sources.list 中添加 Docker 软件源
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

启动docker

sudo systemctl enable docker
sudo systemctl start docker
# 设置权限
sudo chmod 666 /var/run/docker.sock

镜像

# 拉取镜像
docker pull ubuntu:20.04
# 列出镜像
docker image ls

Dockerfile

Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。

启动容器

# -d 守护态运行,让Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下
docker run -dit ubuntu:20.04

返回CONTAINER ID,每次只需要键入这个哈希的前几位就行了

查看所有容器

docker container ls

进入容器并且分配伪终端,运行bash(如果没bash,可以试试sh)

docker exec -it <CONTAINER ID> bash

exit命令退出伪终端,但容器保持运行

删除容器

docker container rm <CONTAINER ID>

清理所有处于终止状态的容器

docker container prune

数据管理

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UnionFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用

  • 对 数据卷 的修改会立马生效

  • 对 数据卷 的更新,不会影响镜像

  • 数据卷 默认会一直存在,即使容器被删除

创建数据卷

docker volume create my-vol

查看所有数据卷

docker volume ls

挂载到容器

$ docker run -d -P \
    --name web \
    # -v my-vol:/usr/share/nginx/html \
    --mount source=my-vol,target=/usr/share/nginx/html \
    nginx:alpine

删除数据卷

docker volume rm my-vol

挂载主机目录

加载主机的/src/webapp目录到容器的/usr/share/nginx/html目录

$ docker run -d -P \
    --name web \
        # -v: 如果本地目录不存在`Docker`会自动为你创建一个文件夹
    # -v /src/webapp:/usr/share/nginx/html \
        # --mount: 如果本地目录不存在,Docker 会报错
    --mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \
    nginx:alpine

Docker Compose

安装

sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

模板文件

参考

运行

# 启动
docker-compose up
# 启动并转入后台
docker-compose up -t
# 删除容器
docker-compose down
# 进入caddy容器中运行sh(因为没有bash)
docker-compose exec caddy sh
# 查看最近的20条log
docker-compose logs -f --tail 20 <service>

参考