Docker笔记

安装 Docker

1
2
3
4
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
# 或者使用阿里云的镜像安装
sh get-docker.sh --mirror Aliyun

清除 none 的 image

1
2
3
docker image prune
# 如果版本低于 v1.25
docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

安装 docker-compose

1
2
3
4
5
6
7
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

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

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose --version

docker-compose build 不留下 none 的 image

1
docker-compose build --force-rm

使用alpine镜像出现not found的原因及解决方法

使用alpine作为基础镜像的时候, 偶尔会出现not found的错误, 但文件却是存在的.

使用其他发行版的镜像的时候, 不会出现这个错误. 就查找资料寻找了下原因.

原因

Go编译默认其实并不是静态编译, 会依赖系统中的一些动态链接库, 比如glibc.

大部分发行版默认都会带glibc, 但alpine并没有自带, 而是自带了musl libc.

所以执行依赖了glibc的二进制文件的时候, 就会出现not found的错误. (这个错误的描述是真的很有迷惑性😂)

解决方法

  1. 编译不依赖glibc的二进制文件, 比如Go编译的时候指定CGO_ENABLED=0.
  2. 编译一个依赖musl libc的二进制文件.