docker

基本用法

1
2
3
docker run -it xxx /bin/bash
docker run --rm xxx
docker rmi xxx --force

自动重启

1
docker run --restart=always xxxx

环境变量

1
docker run xxxx -e TZ=Asia/Shanghai

以某个用户名启动

1
docker run -u root

指定用户进入 shell

1
docker exec -it -u root xxx bash

默认是 root, 有时候希望不是

1
docker run -it --user $(id -u ${USER}):$(id -g ${USER}) xxx

默认 root 有些权限用不了

1
docker run -it --privileged xxx

清理

1
truncate -s 0 /var/lib/docker/containers/*/*.log

查看资源

查看 cpu,内存等等

1
docker stats

构建

1
docker build -t xxx ./ --no-cache

构建时使用变量

多阶段构建,需要在每个阶段都写一遍

1
2
ARG MIX_ENV
ENV MIX_ENV=${MIX_ENV}

例子

Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 构建阶段
FROM debian:12.5 as builder

ARG MIX_ENV
ENV MIX_ENV=${MIX_ENV}

WORKDIR /build
COPY . .

ADD ./deploy/ustc.list /etc/apt/sources.list


# 运行阶段
FROM debian:12.5 as runner

WORKDIR /app

ARG MIX_ENV
ENV MIX_ENV=${MIX_ENV}

构建

1
docker build --build-arg MIX_ENV=test -t demo ../ --no-cache

同步时区

构建时

DockerFile

1
2
3
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone

运行时

1
docker run xxx -v /etc/localtime:/etc/localtime -e TZ=Asia/Shanghai

或者

1
docker run xxx -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime -e TZ=Asia/Shanghai

自定义存储路径

ntfs 分区不支持

1
/etc/docker/daemon.json
1
2
3
{
"data-root": "/mnt/vdb/docker"
}

导入导出

容器保存为 tar,比 save 保存的文件小很多

1
docker export ${CONTAINER_ID} > xxx.tar

从容器 tar 还原为 image

1
docker import xxx.tar image_name:tag

当前容器直接保存为 image

1
docker commit ${CONTAINER_ID} image_name:tag

保存 image 为 tar 包,使用 tag 保存,不然 load 的时候,会显示 <none>

1
docker save -o xxx.tar redis:5.0.0

tar 包还原为 image,不可以重命名,这里的 tar 是指docker images保存出的 tar

1
docker load -i xxx.tar