香橙派4lts Ubuntu系统安装docker
注:本教程同样适合其他环境下的Ubuntu系统安装docker,如:云服务器等
注:以下命令基于普通Linux用户,如果你是处于root用户下,请手动删除命令中的sudo
一、卸载Docker,清除旧环境残余文件
# 卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 删除安装时自动安装的所有包
sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc
sudo apt-get purge docker-ce
# 删除相关目录和配置文件
# 卸载Docker CE
sudo apt-get purge docker-ce
# 卸载Docker EE
sudo apt-get purge docker-ee
# 删除Docker镜像、容器、数据卷等文件
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/systemd/system/docker.service.d
sudo rm -rf /etc/docker
sudo rm /etc/apparmor.d/docker
sudo groupdel docker
sudo rm -rf /var/run/docker.sock
# 使用dpkg查询已安装包,逐个卸载
dpkg -l | grep docker
sudo apt-get autoremove docker-ce-*
# 检查系统中是否还存在docker文件
sudo find / -name '*docker*'
# 验证是否卸载成功
# 如果是下面的输出,说明已经卸载成功
# sh: /usr/bin/docker: 没有那个文件或目录
docker --version
二、安装Docker
# 更新软件列表
sudo apt-get update
# 允许apt命令可以使用HTTPS访问Docker repository
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方的GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 安装稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新软件列表
sudo apt-get update
# 列出可用版本的Docker-ce
sudo apt-cache madison docker-ce
# # 安装指定版本的Docker CE和containerd
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
# 安装最新版本的Docker CE和containerd
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
(注意:指定版本和最新版本选择一种方式安装即可)
# 查看docker版本
docker --version
# 重载docker配置
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker
三、安装bash-completion
通过bash_complete脚本,docker提供自动补全功能,在执行该命令时,敲tab即可自动补全参数,大大提高命令输入效率。
# 安装bash-completion
apt install bash-completion
# 加载bash-completion
source /etc/bash_completion
# 修改docker-compose二进制文件的权限
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose --version
四、docker换源加速
参考资料
中科大 docker
腾讯云 docker
七牛云 docker
# 腾讯云
https://mirror.ccs.tencentyun.com
# 中科大
https://docker.mirrors.ustc.edu.cn/
# 七牛云
https://reg-mirror.qiniu.com
# 修改 /etc/docker/daemon.json 文件
vim /etc/docker/daemon.json
#添加下面的配置
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
(注意:文件里的镜像地址选择上面三个中的一个填进去即可)
# 重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看加速配置是否生效
docker info
# 如果出现下面的提示,说明加速配置生效
Registry Mirrors:
https://reg-mirror.qiniu.com
Docker镜像加速
五、运行Docker镜像
1. 运行hello-world
# 运行hello-world镜像
sudo docker run hello-world
运行成功的结果
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
2. 运行apache服务
# 运行apache容器
docker run -d -p 80:80 httpd
# 访问apache
0.0.0.0:8080
六、可能出现的问题
权限问题
示例:
docker run -d -p 80:80 httpd
```
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
- 解决方法:
错误原因:
Docker 需要用户具有 sudo 权限,为了避免每次命令都输入sudo,可以把用户加入 Docker 用户组。
方法一(推荐)
# 执行以下指令,重启系统后生效
sudo usermod -aG docker $USER
方法二
sudo chmod 777 /var/run/docker.sock
方法三
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $XXX docker #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,yichao
sudo gpasswd -a $USER docker #将当前用户添加至docker用户组
newgrp docker #更新docker用户组
检查是否更新成功
再次执行"docker version"命令,发现不再出现"Got permission denied"权限报错
docker卸载的问题
bash: /usr/bin/docker: 没有那个文件或目录
```
错误原因:
手动删除了 /usr/bin/docker 目录,重新安装docker失效
解决办法:
卸载docker,删除docker相关的包,重新安装
七、将 Docker 配置为开机启动
大多数当前的 Linux 发行版(RHEL、CentOS、Fedora、Debian、Ubuntu 16.04 和更高版本)用于systemd
管理系统启动时启动的服务。在 Debian 和 Ubuntu 上,Docker 服务默认配置为在启动时启动。要为其他发行版在启动时自动启动 Docker 和 Containerd,请使用以下命令:
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
要禁用此行为,请disable
改用。
sudo systemctl disable docker.service
sudo systemctl disable containerd.service
八、为 Docker 指定 DNS 服务器
配置文件的默认位置是/etc/docker/daemon.json
. --config-file
您可以使用daemon 标志更改配置文件的位置。下面的文档假定配置文件位于/etc/docker/daemon.json
.
创建或编辑 Docker daemon 配置文件,默认为
/etc/docker/daemon.json
file,控制 Docker daemon 配置。$ sudo nano /etc/docker/daemon.json
添加
dns
具有一个或多个 IP 地址作为值的键。如果文件已有内容,您只需添加或编辑该dns
行。{ "dns": ["8.8.8.8", "8.8.4.4"] }
如果您的内部 DNS 服务器无法解析公共 IP 地址,请至少包含一个可以解析的 DNS 服务器,以便您可以连接到 Docker Hub,以便您的容器可以解析 Internet 域名。
保存并关闭文件。
重新启动 Docker 守护程序。
$ sudo service docker restart
验证 Docker 是否可以通过尝试拉取镜像来解析外部 IP 地址:
$ docker pull hello-world
如有必要,验证 Docker 容器是否可以通过 ping 解析内部主机名。
$ docker run --rm -it alpine ping -c4 <my_internal_host> PING google.com (192.168.1.2): 56 data bytes 64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms 64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms 64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms 64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
九、禁用dnsmasq
Ubuntu
如果您不想更改 Docker 守护程序的配置以使用特定 IP 地址,请按照这些说明dnsmasq
在 NetworkManager 中禁用。
编辑
/etc/NetworkManager/NetworkManager.conf
文件。dns=dnsmasq
通过在行首添加一个#
字符来注释掉该行。# dns=dnsmasq
保存并关闭文件。
重新启动 NetworkManager 和 Docker。作为替代方案,您可以重新启动系统。
$ sudo systemctl restart network-manager $ sudo systemctl restart docker
RHEL、CentOS 或 Fedora
dnsmasq
要在 RHEL、CentOS 或 Fedora 上禁用:
禁用
dnsmasq
服务:$ sudo systemctl stop dnsmasq $ sudo systemctl disable dnsmasq
使用Red Hat 文档手动配置 DNS 服务器 。