在 Ubuntu 18.04 上使用静态可执行文件安装 Docker CE 及后续设置

在 Ubuntu 18.04 上使用静态可执行文件安装 Docker CE 及后续设置

前几天安装了最新的 Ubuntu 18.04 LTS,想在上面安装一个 docker,结果发现 docker 官方的软件源里没有Ubuntu 18.04 的安装包版本,可能是系统太新了,官方还没来得及制作。之前用 Ubuntu 17.04 也是这样,上次我在 17.04 上是在官方的软件源里下载了 16.04 的 .deb 安装包到本地直接安装的,也能正常工作。不过我觉得这种方式有点不靠谱,万一不同版本的安装包有点不兼容怎么办。所以这次我选择使用官方的提供了静态可执行文件安装。这里记录一下,省的下次安装时再去官网看文档,不知道为啥,docker 文档的网页总是被墙。而且官方软件源也访问巨慢,还得寻找国内的镜像源,这里做个笔记,节约下次的安装时间。

如果官方没有为你的目标环境提供安装包,就可以使用这种安装方式。

如果你嫌这种安装方式麻烦,可是直接下载官方为 Ubuntu 17.10 提供的 .deb 包安装。理论上为 17.10 提供的 .deb 包也适用于 18.04。不过本人并没完整测试,只是之前在 17.10 上用过 16.04 的 .deb 安装包。

$ wget http://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/artful/pool/stable/amd64/docker-ce_18.03.1~ce-0~ubuntu_amd64.deb
$ sudo dpkg -i docker-ce_18.03.1~ce-0~ubuntu_amd64.deb

这样可以自动让系统的 systemd 工具来管理 docker 后台进程,省去一些设置上的麻烦。

获取静态的二进制文件存档

从官方源下载

$ wget https://download.docker.com/linux/static/stable/x86_64/docker-18.03.1-ce.tgz

https://download.docker.com/linux/static 目录下面有不同的版本,比如stable、edge、test三个分支版本,以及不同硬件平台的版本。

or 从国内镜像源下载

但是我发现这个下载过程特别慢,所以使用阿里的镜像源更快一些。

$ wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-18.03.1-ce.tgz

提取出二进制文件

$ tar xzvf docker-18.03.1-ce.tgz

这一步会提取出一个 docker 目录,里面包含了使用 Docker 需要的各个可执行文件。

$ ls docker
docker  docker-containerd  docker-containerd-ctr  docker-containerd-shim  dockerd  docker-init  docker-proxy  docker-runc

copy 二进制文件到相应目录

$ sudo cp docker/* /usr/bin/

现在就可以在里的系统上使用 Docker 了。

启动 dockerd

$ sudo dockerd &

可以看到一大堆输出信息。

查看 Docker 版本

$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.37/version: dial unix /var/run/docker.sock: connect: permission denied

可看到版本为目前最新的 18.03.1-ce,但是只输出了 client 的版本信息,server 端的信息只有一个 permission denied 错误。这是因为没有使用 sudo 权限。重新用 sudo 执行一遍:

$ sudo docker version
sudo docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

运行一个 hello-world 容器

~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete 
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

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/engine/userguide/

该命令会从官方的仓库里拉取一个 hello-world 镜像,然后创建容器并运行。如果顺利的话,你会看到以上输出。但是笔者这里由于网络原因,拉取镜像的时候超时了,后面换了国内的镜像源才成功。

设置开机启动

使用官方的提供为特定系统制作的安装包安装 Docker 时,安装过程中会自动设置开机启动。由于我们是自己使用静态的可执行文件,所以每次得自己运行 sudo dockerd &启动 dockerd 进程,为了方便,我们自己设置一下开机启动。Docker 在 Ubuntu 16.04 及以上版本上是利用 Ubuntu 系统的 systemd 初始化系统来管理 dockerd 进程,我们也来模仿一下。本人并不熟悉 systemd,只是依葫芦画瓢。

在进行下面的步骤之前先停掉前面启动的 dockerd 进程。

创建 systemd 单元文件

新建一个 docker.service 文件,在里面填入一下内容:

[Unit]
Description=docker static

[Service]
ExecStart=/usr/bin/dockerd

[Install]
WantedBy=multi-user.target

将其 copy 到/lib/systemd/system/目录下:

$ sudo cp docker.service /lib/systemd/system/

重载 systemd 单元配置文件

$ sudo systemctl daemon-reload

使用 systemd 启动 docker 服务

$ sudo systemctl start docker

验证

使用 docker verisondocker info 验证一下 docker 服务是否启动成功。

~$ sudo docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.2
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:12:25 2018
 OS/Arch:      linux/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:23:03 2018
  OS/Arch:      linux/amd64
  Experimental: false

看起来没啥问题。

允许开机启动

$ sudo systemctl enable docker.service 
[sudo] chao 的密码: 
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.

这样开机的时候 systemd 就会自动启动 dockerd。笔者重启系统发现 dockerd 真的已经启动了。

解决 docker cli 权限问题

前面我们在使用 docker 命令时都是通过 sudo 的方式,这是因为:dockerd 进程启动会绑定到一个 Unix socket,默认情况下,该 Unix socket 被 root 用户所有,其他用户可以通过 sudo 来访问该它。而 dockerd 都是以 root 用户运行,所以 dockerd 可以绑定到该 Unix socket。但普通用户在使用 docker cli 也就是 docker 命令来使用 docker 服务时也需要用的该 Unix socket,docker 命令需要访问该 Unix socket,通过该 Unix socket 将用户的指令发送给 dockerd 进程。所以普通用户在使用执行 docker 命令时需要通过 sudo 的方式。

如果想要避免每次在执行 docker 命令都加一个 sudo,可以创建一个 docker 用户组,并将要使用 docker 的普通用户添加到该组。dockerd 进程启动时会将 Unix socket 的读写权限都赋予给 docker 用户组。这样就不需要使用 sudo 了。

创建 docker 用户组

$ sudo groupadd docker

添加当前用户到 docker 用户组

$ sudo usermod -aG docker $USER

注销当前用户或重启系统

接下来注销当前用户并重新登录,使前面的设置生效。如果是虚拟机环境,你可能需要重启虚拟机系统才行。

测试

重新登录系统,执行一条 docker 命令测试一下:

$ docker run hello-world

使用 docker hub 国内镜像

Docker 默认从官方的 hub.docker.com 拉取镜像,但是由于网络的原因,在国内拉取镜像巨慢,甚至会超时而失败。推荐使用国内的镜像站。国内有好几个镜像站,但是好像只有 ustc 提供的镜像站不需要注册,其他镜像站都要求用户注册一个账号,然后给用户分配一个唯一的加速地址,个人觉得太麻烦了,还是 ustc 的比较良心。

/etc/docker/daemon.json 文件(没有就新建一个)添加以下内容:

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

然后拉取镜像就非常快了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预编译版,总体过程感觉还是挺简单的,但是由于在网上找的参考资料并没有和自己遇到的情况完全一样的,所以把自己的安装过程记录下来,方便和自己一样的后来人进行安装,同时也自己作个记录留作备忘。其实预编译版的CARLA本身几乎不用什么命令行进行安装,主要步骤只有解压缩和拷贝文件,和极少的命令行安装操作。但是相关依赖以及其它的CARLA所使用的一些工具需要一起安装好,下面一起来看看安装步骤吧。_ubuntu22.04安装carla
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载Ubuntu 20 安装包_ubuntu20下载
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装rally, pip3 install -r requirements.txt 时提示如下: 说明openssl 已安装。解决:1. pip3 install --upgrade pip , 结果输出如下 ..._error: command '/usr/bin/gcc' failed with exit code 1
文章浏览阅读1.1k次。自己刚踩坑装好的W11 WSL2 miniconda_wsl2 cuda
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standalone的,会有一点区别(不识别 下面的 -localhost no)上面的命令会在~/.vnc/目录下生成一个 passwd文件。具体端口号,可以查看vncserver -list返回结果中的RFB PROT。作用是vncserver启动的时候运行这些命令,把桌面程序启动起来。如果希望用某个用户比如 demo登录,就用su切换到这个用户。桌面版默认就已安装,服务器版需要手动安装,并启动。关闭某个会话可以用下面的命令。远程地址输入ip:port。查看全部的vnc会话。_ubuntu vncserver
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主要是连接一个远程的code-server服务,code-server服务安装在什么系统,调用的就是什么系统的环境,如这里使用ubuntu进行安装code-server,那使用的就是ubuntu环境,如需要go,python,java开发,需要在Ubuntu安装相关环境,创建的文件夹和项目也是在Ubuntu里面.这种方式其实在访问vscode的时候利于可以随时随地进行连接使用,且不受设备影响。
安装Ubuntu上超好用的终端Terminator。通过添加软件源、更新源、安装Terminator等步骤完成。
文章浏览阅读1.1k次,点赞83次,收藏74次。不要嫌弃Ubuntu的单调的终端界面啦,快来试试这些有意思的命令_ubuntu系统有趣的玩法
文章浏览阅读2.5k次。在ubuntu系统中,swap空间就是虚拟内存,所以考虑在磁盘空间富余的目录下设置虚拟内存swap文件,用来缓解内存不足的问题。通过上面的信息可以看到,/dev/vda2 目录下还剩余45G,那么就可以把swap文件生成在/dev/vda2目录下。在系统监控中发现,当数据库服务程序启动后,占用了大量内存空间,导致系统的剩余的内存往往只有几十MB。# bs 为块的大小,count 创建多少个块。# 执行命令后,删除创建的swap目录即可。#把生成的文件转换成 Swap 文件。2、创建一个swap文件。_ubuntu20修改swap大小
文章浏览阅读2.9k次,点赞2次,收藏10次。记录RV1126的SDK编译错误,以及解决处理_command exited with non-zero status 1
文章浏览阅读1.1w次,点赞22次,收藏101次。【记录】ubuntu20.04安装nvidia显卡驱动_ubuntu20.04安装nvidia显卡驱动
文章浏览阅读727次,点赞6次,收藏27次。在嵌入式Linux开发过程中,可能遇到uboot无法通过nfs服务从Ubuntu下载系统镜像(TTTTTT)的问题。如果你使用的是较新版本的Ubuntu,那么其**默认内核将不支持nfs2**!而**uboot仅支持到nfs2**,因此我们需要修改系统内核以及nfs配置文件,开启nfs2服务。**此问题非常棘手**,因为问题出现的时间太近,并且使用的人少。由于是2023年后才出现的问题,**chatgpt也无法解答**!本文参考网络上多篇博客资料,是解决此问题的最新办法。
ubuntu系统下安装软件的方法有多种,包括使用apt工具、deb软件包安装、源码编译安装以及通过软件中心安装。还有一种以 .run 后缀的软件包也可以在ubuntu系统下安装。具体的安装方法可以通过百度搜索来获取。
文章浏览阅读814次。本篇目的:Xubuntu如何安装pkg-configpkg-config是一个计算机软件包,用于帮助开发人员查找、定位和使用依赖库。它通常用于构建软件时,开发人员需要指定程序所依赖的外部库的位置和版本信息。使用pkg-config,开发人员可以很容易地查找、检索和导出这些依赖库的信息,从而简化了软件的构建过程。_ubuntu中怎么下载pkg-config
文章浏览阅读2k次。ubuntu创建共享文件夹_ubuntu20.04共享文件夹
文章浏览阅读2.9k次,点赞74次,收藏73次。对于有长期远程桌面需求的用户,建议将cpolar套餐升级到专业套餐,支持配置固定的公网TCP端口,且带宽也会相应的增大,支持更高效便捷的远程桌面连接Ubuntu系统。【cpolar内网穿透支持http/https/tcp协议,支持永久免费使用,不限制流量,无需公网IP,也不用进入路由器设置,操作简单。隧道创建成功后,点击左侧仪表盘的状态——在线隧道列表,查看xrdp隧道的所生成的公网TCP端口地址,复制下来。,使用cpolar内网穿透映射3389端口,生成公网TCP端口地址,实现在公网环境下,_ubuntu 局域网桌面
文章浏览阅读3.2k次。而在linux的ubuntu版本中,又多出两类用户:安装ubuntu系统的源用户xxx,其与root具有相同权限,仅在执行命令时,前面加sudo。在ubuntu中,用命令deluser username可以直接删除用户账号及家目录,而用centos7中的命令userdel -r username才能达到同样目的。在ubuntu中,没有moduser命令,centos7中的usermod修改用户信息的命令,同样可以用在ubuntu中。在系统中,创建新的用户或称为账号,一般需要多步操作。_ubuntu创建一个新用户
文章浏览阅读1.6w次,点赞4次,收藏23次。系统的许多日志文件都存储在 /var/log 目录中。你可以使用 ls /var/log 命令来列出可用的日志文件。/var/log/Xorg.0.log:包含 X 服务器的日志信息(图形界面)。打开DASH,搜索日志或者log,打开app,这个是/var/log的界面版。这将显示系统日志的末尾,并提供有关系统崩溃和错误的信息。/var/log/kern.log:包含内核日志信息。/var/log/dmesg:包含开机时的日志信息。/var/log/syslog:包含系统日志信息。_ubuntu查看系统日志
文章浏览阅读857次。首先将source.list复制为source.list.bak备份,然后将source.list内容改为需要的镜像源列表即可。Ubuntu采用apt作为软件安装工具,其镜像源列表记录在/etc/apt/source.list文件中。本节均为 Ubuntu 20.04 的镜像源列表。若为其他版本,将所有focal更改为其他版本代号即可。_apt 国内源