作者 Ivan Chien

Docker

Docker CLI

sudo pacman -S docker

在 Arch Linux 上测试,其他发行版应该均可使用包管理进行在线安装。

Docker Desktop

https://docs.docker.com/engine/install/

macOS 和 Windows 可以直接安装 Docker Desktop,Linux 各发行版参考官方 docs 安装 Docker CE。

换源

https://mirrors.ustc.edu.cn/help/dockerhub.html

这里只介绍使用 systemd 的系统。

编辑 /etc/docker/daemon.json,没有则创建。

添加内容:

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

重启 daemon 和 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

检查 Docker 服务状态和配置是否生效:

# 服务状态
sudo systemctl status docker

# 是否生效看 Registry Mirrors
sudo docker info

其他系统参考上面的 USTC 源 help。

其他相关内容参考:

Docker CE 源使用帮助

Cheatsheet

查看正在运行的容器

docker ps
# -a:all(不加这个选项不会显示已经停止的容器)
# -q:仅显示每行的 ID 列

运行镜像

docker run ubuntu
# -i:交互模式
# -t:终端模式
# -d:默认 detached
# --name NAME:改名
# -p HPORT:CPORT:将容器的 CPORT 端口映射到本机的 HPORT 端口
# -v HPATH:CPATH:将本地的 HPATH 路径映射到容器的 CPATH 路径

# 如果没有下载则会下载,下载过的会直接从本地加载

docker run yescafe/gitpage:1.0-beta

docker run yescafe/gitpage:1.0-beta echo hello

启动/停止容器

docker start $container-id
docker stop $container-id

连接已启动容器(attach)

docker attach $container-id

断开当前连接容器连接(detach)

C-p, C-q

删除容器

docker rm $container-id

# 比如
docker rm `docker ps -aq`

查看本地镜像

docker image ls
# -a:未知
# -q:仅显示 ID

删除本地镜像

docker rmi $image-repository

Diff & Commit(自打包镜像)

想了想这个标题还是直接叫这个,这样比较好理解。这组功能类似于 git。

与原镜像对比,可以在容器运行时操作:

docker diff $container-id

提交更改,将容器打包成镜像:

docker commit $container-id $new-image-name
# 这个 $new-image-name 一般为 user_name/repo_name:tag 构成,如 yescafe/gitpage:1.0-beta

Dockefile

https://www.bilibili.com/video/BV1v5411G7xc

hello-world.js:

console.log('Hello World)

Dockerfile:

FROM ubuntu

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean

RUN apt update && apt install nodejs -y

WORKDIR /app

COPY . .

CMD ["node", "/app/hello-world.js"]

打包为镜像

docker build -t $new-image-name $path-to-dockerfile-workdir

# 比如 
docker build -t yescafe/gitpage:1.0-beta .