建议把Docker安装在linux系统上学习使用,如果使用 Windows 可以使用虚拟机安装 Ubuntu 进行学习。
补充一点,如果在windows上安装,官方推荐使用 windows 10 专业版,因为这个版本才包含Hyper-V的虚拟化服务,能让docker具有像linux一样的底层兼容性,如果没有使用这个版本,官方建议下载docker tool进行安装。当然还是建议Windows用户装linux虚拟机进行学习。
Docker 版本说明
Docker在apt源仓库里面注册了很多名称,比如docker.io,比如docker-engine,这些都不是我们需要的旧版本,新版的Docker就只有两个,一个是社区版本的docker-ce,一个是收费的企业版docker-ee。
不过,目前(2017年4月7日 17:01:37),ubuntu官方源还没有新版的docker,所以我们可以按照官方的说明,一步一步来安装docker。
使用官方脚本+中国镜像安装
下方命令适用于 Ubuntu 并且软件包源是阿里云的。
1
| curl -fsSL https://get.docker.com | sudo sh -s -- --mirror Aliyun
|
设置当前用户到docker组
如果当前用户不是 docker 组,那么是无法直接运行docker命令的,所以在安装完成之后,建议设置当前用户到docker组中。
sudo usermod -aG docker $USER
这样做之后,直接可以运行docker images
等命令再也不需要root权限了。
配置国内镜像加速
使用阿里云 Docker 镜像源
1 2 3 4 5 6 7 8
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://t9ab0rkd.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
成功之后,运行docker pull ubuntu
可以试一试速度。
docker-compose
1 2 3 4 5 6 7 8
| ## install sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
## update docker-compose migrate-to-labels ## uninstall sudo rm /usr/local/bin/docker-compose
|
注意:上述命令行安装 1.23.2 版本的,最新版本需要查看
1
| curl -H 'Accept: application/json' -L https://github.com/docker/compose/releases/latest | jq .
|
找到 tag_name 字段
1 2 3 4 5 6 7 8 9
| { "id": 14244264, "tag_name": "1.23.2", "update_url": "/docker/compose/releases/tag/1.23.2", "update_authenticity_token": "ruuFEJbQZIdnDBjFGghteL2H6UG6BmliYI18SDLOgnO5hlJlRZB2dDs+qOjkHMamP9bp2ymKrr9Ytao0DtEEiQ==", "delete_url": "/docker/compose/releases/tag/1.23.2", "delete_authenticity_token": "C3JVkok9yjBOrFiNId+amBceStAPLfxm0P1IlXvNLOsdE2gxaZLhR12WsZYYpfMNiZsmHrNmVpf/Z0B2ddUKVw==", "edit_url": "/docker/compose/releases/edit/1.23.2" }
|
Docker tips
权限不足错误
zsh 错误
修复方式:
sudo chown -R [username]:staff "$ZSH_CACHE_DIR"
详细:https://github.com/robbyrussell/oh-my-zsh/issues/3700
unix socket 错误
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。
建立 docker 组:
$ sudo groupadd docker
将当前用户加入 docker 组:
$ sudo usermod -aG docker $USER
退出当前终端并重新登录,进行如下测试。
国内使用 apt 速度很慢
通常在 Dockerfile 内会使用 apt 进行安装软件,但是 apt update
会因为网络原因很慢很慢,这个时候可以加上镜像源。
解决方式:
1
| RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.163\.com\/ubuntu\//g' /etc/apt/sources.list
|
使用前台命令运行容器
例如在 nginx 的官方版本中有设置
1
| CMD ["nginx", "-g", "daemon off;", ]
|
所以不要在 Dockerfile 中使用 service xx start
或者 systemctl start xx.service
.
对于JS而言,npm run 就是使用的后台命令。比如说在 npm start
的命令是 node index.js
的话,而 index.js
是一个服务器应用,那么在 Docker 中不会成功运行,而且运行之后会自动退出容器。