avatar Akirava's Blog

在 Debian 12 中使用 Docker 与 Docker Compose

1 安装 Docker

$ wget -qO- get.docker.com | bash
$ systemctl enable docker

2 安装 Docker Compose(在步骤 1 中应该已经装好了,可以跳过)

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

3 开启 IPv6

编辑 /etc/docker/daemon.json 文件,加入下面的内容

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64",
  "experimental": true,
  "ip6tables": true
}

可以省略 fixed-cidr-v6 字段

{
  "ipv6": true,
  "experimental": true,
  "ip6tables": true
}

重启 Docker 服务,并创建 IPv6 网络(同时也支持 IPv4)

$ systemctl restart docker

可以将 share-net 改成其他名称

$ docker network create --ipv6 share-net

4 在 docker-compose.yml 中使用共享网络的方法

services:
  service-name:
    image: 'xxxx'
    ports:
      - 'xxxx:xxxx'
    networks:
      - <my-shared-network>

networks:
  <my-shared-network>:
    external: true

使用同一个网络的服务可以通过 service-name 相互访问。

5 启动、停止和更新容器

创建

$ docker-compose up -d

重启服务

$ docker-compose restart

关闭服务

$ docker-compose down

更新镜像

$ docker-compose pull
$ docker-compose up -d --remove-orphans

删除旧的镜像

$ docker image prune

6 删除某个 Docker 服务

停止容器

$ docker-compose down

查看容器的ID和运行状态

$ docker ps -a

删除容器

$ docker rm <container_id>

查看镜像的ID

$ docker images

删除镜像

$ docker rmi <image_id>

7 在容器内执行命令

使用 docker run 执行命令

基本语法

$ docker run [OPTIONS] IMAGE_NAME COMMAND [ARG...]

执行一次性命令,执行完毕后容器删除

$ docker run --rm ubuntu echo "Hello from Ubuntu"

进入交互式 shell

$ docker run -it ubuntu /bin/bash

使用 docker exec 在正在运行的容器中执行命令

进入正在运行的容器的交互式 shell

$ docker exec -it <容器ID或名称> /bin/bash

使用 docker exec 在现有容器中执行命令而非进入 shell

$ docker exec <容器ID或名称> <命令>

8 更改 docker 数据目录

默认情况下数据目录是 /var/lib/docker,修改或新建 /etc/docker/daemon.json

{
  "data-root": "/your/path"
}

然后重启 docker 服务。

9 导出/加载本地镜像文件

$ docker save -o myimage.tar <镜像名称>:<标签>
$ docker load -i myimage.tar