Ubuntu 20.04 安装 docker 详解

您所在的位置:网站首页 ubuntu系统无法安装 Ubuntu 20.04 安装 docker 详解

Ubuntu 20.04 安装 docker 详解

2023-09-06 23:03| 来源: 网络整理| 查看: 265

前言

首先登录官网观摩观摩:docker 安装

本文将详细介绍docker在Ubuntu20.04上的安装,以及docker命令的一些使用。例如一些常见的错误:

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. invoke-rc.d: initscript docker, action "start" failed. 步骤

1. 干净的卸载掉你系统中的 docker,不要问我为什么知道。

1)删除步骤1,官网给出的两条命令,当然为了确保你删的干净点,请看第二条

$ sudo apt-get purge docker-ce docker-ce-cli containerd.io $ sudo rm -rf /var/lib/docker

2)摘抄于:https://blog.csdn.net/xbeethoven/article/details/107883970

1.常归删除操作 sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc 2. 删除docker其他没有没有卸载 dpkg -l | grep docker dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P # 删除无用的相关的配置文件 3.卸载没有删除的docker相关插件(结合自己电脑的实际情况) sudo apt-get autoremove docker-ce-* 4.删除docker的相关配置&目录 sudo rm -rf /etc/systemd/system/docker.service.d sudo rm -rf /var/lib/docker 5.确定docker卸载完毕 docker --version

2.正式开始安装

2.1)跟着官网走,卸载掉你系统中较老版本的docker,不过经过上面的一波猛如虎的操作,基本到这里不会有啥残留了

$ sudo apt-get remove docker docker-engine docker.io containerd runc

2.2)安装相应的apt依赖

先更新一下 $ sudo apt-get update 安装相应的依赖 $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common

2.3)添加 Docker 的官方 GPG 密钥

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

2.4)验证密钥

$ sudo apt-key fingerprint 0EBFCD88

2.5)根据你不同的系统去设置一个稳定的仓库(根据你的系统选一个哦,不要每个都搞)

1.x86_64/amd64 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" 2.armhf $ sudo add-apt-repository \ "deb [arch=armhf] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" 3.arm64 $ sudo add-apt-repository \ "deb [arch=arm64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"

2.6)再更新一次 apt

$ sudo apt-get update

2.7)到目录中设置daemon.json文件(值得注意的是,如果是首次安装,理论上是不会有 cd /etc/docker 这个目录滴,所以如果你真的是第一次安装, 请跳过此步骤,等你下面步骤报错之后,嘿嘿这个目录就会有了,然后从头走一遍你就会发现,这部可以用了)

可以另起一个命令窗口 Ctrl + Alt + T $ cd /etc/docker/ 查看是否有 daemon.json 文件,没有就创建 $ ls 创建 daemon.json 文件 $ touch daemon.json 编辑文件 $ sudo gedit /etc/docker/daemon.json 在弹出来的文本框中收入下面这段,保存 { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }

2.8)安装最新的 docker

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

注意:这里会有两种情况----》》》》》》》》》》》》》》》》》》》

2.8.1)一波顺利滴成功安装,下面的 hello-world 也是非常滴顺利敲出来,感觉一切良好

然而运行一波重启docker命令:$ sudo systemctl restart docker 发现报了下面这该死滴错误

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. invoke-rc.d: initscript docker, action "start" failed.

这错误出来后,就完了,重启系统之后docker再也没能启动,恭喜你!!你还是没能逃脱2.7的命运,请从这里跳到文章最上面,再来一次,记得要看2.7了,嘿嘿。

2.8.2)执行安装步骤直接报错,错误提示:

正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 containerd.io 已经是最新版 (1.4.3-1)。 将会同时安装下列软件: docker-ce-rootless-extras pigz slirp4netns 建议安装: aufs-tools cgroupfs-mount | cgroup-lite 下列【新】软件包将被安装: docker-ce docker-ce-cli docker-ce-rootless-extras pigz slirp4netns 升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 4 个软件包未被升级。 需要下载 0 B/75.2 MB 的归档。 解压缩后会消耗 321 MB 的额外空间。 您希望继续执行吗? [Y/n] Y 正在选中未选择的软件包 pigz。 (正在读取数据库 ... 系统当前共安装有 227693 个文件和目录。) 准备解压 .../archives/pigz_2.4-1_amd64.deb ... 正在解压 pigz (2.4-1) ... 正在选中未选择的软件包 docker-ce-cli。 准备解压 .../docker-ce-cli_5%3a20.10.3~3-0~ubuntu-focal_amd64.deb ... 正在解压 docker-ce-cli (5:20.10.3~3-0~ubuntu-focal) ... 正在选中未选择的软件包 docker-ce。 准备解压 .../docker-ce_5%3a20.10.3~3-0~ubuntu-focal_amd64.deb ... 正在解压 docker-ce (5:20.10.3~3-0~ubuntu-focal) ... 正在选中未选择的软件包 docker-ce-rootless-extras。 准备解压 .../docker-ce-rootless-extras_5%3a20.10.3~3-0~ubuntu-focal_amd64.deb ... 正在解压 docker-ce-rootless-extras (5:20.10.3~3-0~ubuntu-focal) ... 正在选中未选择的软件包 slirp4netns。 准备解压 .../slirp4netns_0.4.3-1_amd64.deb ... 正在解压 slirp4netns (0.4.3-1) ... 正在设置 slirp4netns (0.4.3-1) ... 正在设置 docker-ce-cli (5:20.10.3~3-0~ubuntu-focal) ... 正在设置 pigz (2.4-1) ... 正在设置 docker-ce (5:20.10.3~3-0~ubuntu-focal) ... Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. invoke-rc.d: initscript docker, action "start" failed. ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Thu 2021-02-25 15:11:03 CST; 4ms ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Process: 26894 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock (code=exited, status=1/FAILURE) Main PID: 26894 (code=exited, status=1/FAILURE) dpkg: 处理软件包 docker-ce (--configure)时出错: 已安装 docker-ce 软件包 post-installation 脚本 子进程返回错误状态 1 dpkg: 依赖关系问题使得 docker-ce-rootless-extras 的配置工作不能继续: docker-ce-rootless-extras 依赖于 docker-ce;然而: 软件包 docker-ce 尚未配置。 dpkg: 处理软件包 docker-ce-rootless-extras (--configure)时出错: 依赖关系问题 - 仍未被配置 因为错误消息指示这是由于上一个问题导致的错误,没有写入 apport 报告。 正在处理用于 man-db (2.9.1-1) 的触发器 ... 正在处理用于 systemd (245.4-4ubuntu3.4) 的触发器 ... 在处理时有错误发生: docker-ce docker-ce-rootless-extras E: Sub-process /usr/bin/dpkg returned an error code (1)

恭喜你!!你依然是没能逃脱2.7的命运,请从这里跳到文章最上面,再来一次,记得要看2.7了,嘿嘿。

2.9)运行 hello-world

sudo docker run hello-world

3.后续的操作

3.1)以非 Root 用户身份执行 Docker,摘抄于:https://zhuanlan.zhihu.com/p/143156163

默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。 想要以非 root 用户执行 Docker 命令,你需要将你的用户添加到 Docker 用户组,该用户组在 Docker CE 软件包安装过程中被创建。想要这么做,输入: $ sudo usermod -aG docker $USER $USER是一个环境变量,代表当前用户名。 登出,并且重新登录,以便用户组会员信息刷新。

3.2)服务的一些命令

systemctl enable docker # 开机自动启动docker systemctl start docker # 启动docker systemctl restart docker # 重启dokcer systemctl stop docker # 关闭dokcer

3.3)docker命令大全网络摘录:查看

# 查看信息 docker info # 查看运行中的进程 docker ps # 查看全部 docker ps -a docker ps -all # 显示最后运行 docker ps -l # 查看该容器的详细信息 docker inspect 44fc0f0582d9 # 由其该信息非常多,只截取了其中一部分进行展示。如果要显示该容器第一个进行的PID可以使用如下方式 docker inspect -f {{.State.Pid}} 44fc0f0582d9

使用docker exec进入Docker容器

# 使用该命令进入一个已经在运行的容器 docker ps docker exec -it 775c7c9ee1e1 /bin/bash # 完整版 docker exec -it 镜像ID /bin/bash # 最小版(alpine) docker exec -it 镜像ID sh

镜像

# 查看docker镜像 docker images # 删除镜像 docker images rmi # 构建一个镜像 docker build -t holiday /usr/local/docker/holiday #Re-build docker container # 打包提交拉取 docker tag kafka-monitor:0.2 10.0.23.11:5000/kafka-monitor:0.2 docker push xxx.xxx.xxx.xxx:5000/kafka-monitor:0.1 docker pull xxx.xxx.xxx.xxx:5000/kafka-monitor:0.1 # 停止所有容器 docker ps |grep holiday |awk '{print $1}' |xargs -i docker stop {} # 提交一个镜像 docker commit 1a442630f4a9 test/javaweb:0.0

日志

# docker日志查询 docker logs 2f2de065fd05

停止与删除

# 杀死所有正在运行的容器 docker kill $(docker ps -a -q) # 删除所有已经停止的容器 docker rm $(docker ps -a -q) # 删除所有未打 dangling 标签的镜像 docker rmi $(docker images -q -f dangling=true) # 删除所有镜像 docker rmi $(docker images -q) # 根据 IMAGE ID 来删除 docker rmi ee7cbd482336

从容器中复制文件

docker cp 371f3ff1f43b:/usr/local/bin/etcdctl /usr/local/bin/etcdctl

为这些命令创建别名

# 杀死所有正在运行的容器. alias dockerkill='docker kill $(docker ps -a -q)' # 删除所有已经停止的容器. alias dockercleanc='docker rm $(docker ps -a -q)' # 删除所有未打标签的镜像. alias dockercleani='docker rmi $(docker images -q -f dangling=true)' # 删除所有已经停止的容器和未打标签的镜像. alias dockerclean='dockercleanc || true && dockercleani' 另附上docker常用命令 docker version #查看版本 docker search tutorial#搜索可用docker镜像 docker pull learn/tutorial #下载镜像 docker run learn/tutorial echo "hello word"#在docker容器中运行hello world! docker run learn/tutorial apt-get install -y ping#在容器中安装新的程序

运行

# 运行docker镜像 docker run -i -t -v /root/software/:/mnt/software/ --privileged=true index.alauda.cn/alauda/ubuntu /bin/bash # 运行一个jenkins镜像的例子命令 sudo docker run \ -d -p 8088:8080 -p 50000:50000 \ -v /home/docker/jenkins_home/:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ -v $(which git):/usr/bin/git \ -v ~/.ssh:/var/jenkins_home/.ssh \ --name=jenkins jenkinsci/jenkins

一个完整的运行步骤

# 第一次运行 sudo docker run --name myjenkins -p 8088:8080 -p 50000:50000 -d docker.io/jenkinsci/jenkins # 停止 docker stop myjenkins # 启动(是没有问题的) docker start myjenkins # 重新commit一个新的 docker ps -a 获取到ff2d09d0ddd8 # 提交一个成为新镜像 docker commit ff2d09d0ddd8 test/jenkins:0.2

查看docker运行容器的ip

# 第一次运行 sudo docker run --name myjenkins -p 8088:8080 -p 50000:50000 -d docker.io/jenkinsci/jenkins # 1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP # 2.使用命令 docker inspect --format '{{ .NetworkSettings.IPAddress }}' 或 docker inspect 或 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id # 3. 可以考虑在 ~/.bashrc 中写一个 bash 函数: function docker_ip() { sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $1 } source ~/.bashrc 然后: $ docker_ip 172.11.0.6 # 4.要获取所有容器名称及其IP地址只需一个命令。 docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq) 如果使用docker-compose命令将是: docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) # 5.显示所有容器IP地址: docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3