Docker 快速入门Ubuntu版(1h速通)

Docker 快速入门Ubuntu版(1h速通)

写在前面,本教程主要参考Docker get startedChatGPT-4o的回答,以及网络上查找到的其他资料,这里主要是记录了笔者的学习过程,难免会有批漏,还烦请请各位指出。

另外,我使用的系统为ubuntu20.04,请大家注意区别。

如果您在查看的时候遇到了问题,请在其他问题进行查找。

1. 基本概念及安装

Docker是一种用于创建、部署和运行应用程序的开源平台。它使得开发者可以将应用程序及其依赖项打包到一个名为“容器”的轻量级、可移植单元中,从而保证应用程序在不同环境中的一致运行。容器包含了应用程序的代码、运行时、系统工具、库等,确保在任何支持Docker的系统上都能运行。

简单来说Docker就是一个能跨平台(比如,windowslinuxmac等)运行的虚拟机,它只虚拟软件运行的基本环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。

Docker和普通的虚拟机virutalboxvmware的对比如下

Image

1.1 Docker镜像(Image)

镜像是一个静态的、只读的模板,它包含了容器运行所需的所有内容。Docker镜像类似于虚拟机的快照,提供了一种便捷的方式来创建容器。镜像可以从公共或私有的Docker注册表(如Docker Hub)中拉取。

1.2 Docker容器(Container)

容器是镜像的运行实例。它包含了应用程序及其依赖项,可以独立运行。容器是轻量的、可移植的,并且可以在开发、测试和生产环境中一致地运行。

1.3 打包、分发、部署

打包(Packaging)

打包是指将应用程序及其所有依赖项打包成一个Docker镜像的过程。这个过程通常使用Dockerfile来定义。

分发(Distribution)

分发是指将Docker镜像上传到一个镜像注册表(如Docker Hub),以便其他人可以下载和使用。

部署(Deployment)

部署是指在目标环境中运行Docker容器的过程。Docker容器可以在任何安装了Docker的机器上运行,这使得部署变得非常简单和高效。

1.3 安装Docker

如果你是初学者,建议安装带UI的桌面版本,如果你是高手,可以直接使用命令行来进行安装。因为笔者使用的是ubuntu20.04服务器版,所以我将ubuntu的服务器版的链接也放在下面,方便笔者以后查找

需要注意的是在Linux上Docker Desktop的工作方式有所不同:

  • Docker Desktop在Linux上会启动一个虚拟机(VM)。
  • 这个虚拟机中运行一个自定义的Docker上下文,称为desktop-linux

因此这个虚拟机中的Docker引擎不会自动访问到本地系统中之前创建的镜像和容器。这就意味着本地系统上的Docker引擎(安装Docker Desktop之前运行的引擎)与虚拟机中的Docker引擎(Docker Desktop启动后运行的引擎)是分离的。

这里我们讲解一下在ubuntu中是如何安装docker服务器版本的,其实很简单,只要按照官网上的要求进行即可

根据之前的解释,首先我们需要先安装docker engine,网址如下:Install Docker Engine on Ubuntu

设置仓库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装docker engine

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

测试

sudo docker run hello-world

如果出现打印的文字则表示安装成功

Image

如果你想使用桌面版,那么在安装完docker engine之后,我们可以开始安装docker desktop,网址如下:Install Docker Desktop on Ubuntu

开启cpu虚拟化

modprobe kvm

根据你的cpu属于intel还是amd来选择语句

modprobe kvm_intel  # Intel processors

modprobe kvm_amd    # AMD processors
kvm-ok
ls -al /dev/kvm
sudo usermod -aG kvm $USER

然后下载ubuntu下的.deb安装文件,下载地址:docker for ubuntu.deb

然后安装

 sudo apt-get install ./docker-desktop-<version>-<arch>.deb

安装完毕后,可以在搜索框中搜到,如下所示

Image

注:你安装了桌面版和服务器版之后你可能需要

  • 将docker的上下文设置为服务器版
docker context use default
  • 将docker的上下文设置为桌面版
docker context use desktop-linux

2. 制作自己的镜像和运行容器

下载docker官网上提供的示例:https://github.com/docker/getting-started-app,这个示例是基于Javascript开发的一个web项目,如果你不熟悉Javascript的话也没有关系,我们只是用这个项目来熟悉Docker的制作镜像的流程。

git clone https://github.com/docker/getting-started-app.git

我们可以自己制作一个docker镜像并运行,进入这个文件,它应该具有如下的结构

├── getting-started-app/
│ ├── package.json
│ ├── README.md
│ ├── spec/
│ ├── src/
│ └── yarn.lock

这些内容是什么我们并不关系,我们只关心如何将其打包成一个image

我们进入这个文件的存放路径

cd /path/to/getting-started-app

然后创建一个Dockerfile,docker会查找这个文件,这个文件用于定义如何构建一个Docker镜像。它包含了一系列指令,每一条指令都描述了如何构建镜像的一个步骤。我们的构建规则都写在Dockerfile中,我们可以这样创建一个Dockerfile

touch Dockerfile
gedit Dockerfile

然后向其中写入以下的内容,保存

# syntax=docker/dockerfile:1

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

接着,我们就可以构建镜像了

docker build -t getting-started .
  • -t--tag的缩写,用于给新构建的镜像打标签。标签为镜像提供了一个可读的名称和版本号
  • . 表示当前目录是构建上下文。Docker会查找当前目录中的Dockerfile,并根据其中的指令构建镜像。

构建过程如下所示

Image

构建完毕后,我们可以启动构建的image看看效果

docker run -dp 127.0.0.1:3000:3000 getting-started
  • -d这个选项表示“分离模式”(detached mode)。它告诉Docker在后台运行容器,这样你可以继续使用你的终端而不被容器的输出阻塞。
  • p选项用于端口映射,它将主机的端口与容器的端口绑定在一起。具体来说:
    • 127.0.0.1:这是主机的回环地址(localhost),表示端口只在本地主机上可用,不会暴露在外部网络中。
    • 第一个3000:这是主机上的端口号,你可以通过访问127.0.0.1:3000来访问容器服务。
    • 第二个3000:这是容器内部的端口号,应用程序在容器内监听的端口。
  • getting-started,这是你要运行的Docker镜像的名称。在这个例子中,getting-started是一个已经构建好的Docker镜像的名称。

我们访问端口http://localhost:3000/,即可看到

Image

3. 停止容器运行和移除容器

查看当前正在运行的容器的信息

docker ps
  • -a--all:显示所有容器(包括停止的容器)。
  • -q--quiet:只显示容器ID。
  • --format:自定义输出格式。
  • --filter:根据条件过滤显示的容器。
    通过查找显示的ID,我们可以停止该容器的运行
docker stop <the-container-id>	# 停止容器运行

对已经停止了的容器,我们可以对其进行重启

docker start <container_id_or_name>

一旦容器重启了,容器内部的状态会恢复到上次停止时的状态。运行在容器内的应用程序也会从头开始运行。

一旦容器停止了,我们就可以对其进行删除

docker rm <the-container-id>	# 删除容器

比如,我这里就删除了之前已经结束运行的一个容器

Image

…后面还有内容待补充,暂时写到这里…

常用CLI

更多相关命令请参考CLI Reference

  • docker ps 查看当前运行中的容器
  • docker images 查看镜像列表
  • docker rm container-id 删除指定 id 的容器
  • docker stop/start container-id 停止/启动指定 id 的容器
  • docker rmi image-id 删除指定 id 的镜像
  • docker volume ls 查看 volume 列表
  • docker network ls 查看网络列表

其他问题

1. Ubuntu运行docker 权限问题Got permission denied

如果使用docker命令行的时候遇到了问题

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json": dial unix /var/run/docker.sock: connect: permission denied
See 'docker run --help'.

这是因为docker进程使用的是Unix socket而不是tcp端口,而默认情况下Unix socket需要root用户权限使用。

所以我们有两种解决方式,第一种是每次使用docker命令的时候都手动添加sudo赋给root权限,第二种把用户加入到docker用户组,这里推荐使用第二种方式

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用
Image

还有一些别的解决方式

  • 更改Docker守护进程的组所有权
sudo chown root:docker /var/run/docker.sock
  • 更改Docker守护进程的访问权限
sudo chmod 666 /var/run/docker.sock

2. 添加Docker Hub镜像加速

镜像加速器镜像加速器地址
Docker 中国官方镜像https://registry.docker-cn.com
DaoCloud 镜像站http://f1361db2.m.daocloud.io
Azure 中国镜像https://dockerhub.azk8s.cn
科大镜像站https://docker.mirrors.ustc.edu.cn
阿里云https://ud6340vz.mirror.aliyuncs.com
七牛云https://reg-mirror.qiniu.com
网易云https://hub-mirror.c.163.com
腾讯云https://mirror.ccs.tencentyun.com

创建或者修改/etc/docker/daemon.json

sudo gedit /etc/docker/daemon.json

选择你想使用的镜像源

{
    "registry-mirrors": [
        "https://ustc-edu-cn.mirror.aliyuncs.com",
    ]
}

然后重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

查看配置是否正确

docker info

3. Docker的卸载

# 卸载 Docker Engine、CLI、Containerd 和 Docker Compose 软件包
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 删除所有镜像、容器和卷
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
# 删除docker配置文件
sudo rm -rf ~/.docker

Reference

[1]Docker get started
[2]Docker 快速入门
[3]Install Docker Engine on Ubuntu
[4]Install Docker Desktop on Ubuntu
[5]Ubuntu运行docker 权限问题Got permission denied

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值