当前位置: 首页 > news >正文

Docker在Linux中安装与使用教程

文章目录

  • 1. 前言
  • 2. Docker安装
    • 2.1 方法 1:使用 Ubuntu 的仓库安装 Docker
    • 2.2:在 Ubuntu 中安装最新稳定版本的 Docker
  • 3. Docker镜像
    • 3.1 拉取镜像
    • 3.2 查看镜像
    • 3.3 镜像删除
  • 4. Docker 常用命令
    • 4.1 `docker run`启动容器
    • 4.2 `docker ps`查看容器进程
    • 4.3 `docker run -d`后台运行
    • 4.4 `docker run -p` 配置网络断开
    • 4.5 `docker run -v` 挂载目录
    • 4.6 `docker run -e`设置环境变量
    • 4.7 `docker run --name` 给容器取名
    • 4.8 `docker run -it --rm` 交互与容器自销毁
    • 4.9 `docker run --restart` 容器自重启
    • 4.11 容器启停
    • 4.12 `docker inspect` 查看容器信息
    • 4.13 `docker create`容器创建
    • 4.14 `docker log`查看容器日志
    • 4.15 `docker rm -f` 删除容器
    • 4.16 `docker exec` 使用容器内的linux命令
    • 4.17 `docker exec -it -d` 可进入容器
    • 4.18 `docker run --network`容器网络管理
    • 4.19 `docker compose`

1. 前言

什么是Docker
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序从基础设施中分离出来,以便快速交付软件。使用Docker,您可以像管理应用程序一样管理基础架构。通过利用Docker的方法来交付、测试和部署代码,您可以显著减少编写代码和在生产环境中运行代码之间的延迟。
什么是Docker镜像
镜像是一种轻量级、可执行的独立软件包。它包含运行某个软件所需的所有内容,包含代码、运行时库、环境变量和配置文件。将所有的应用和环境直接打包到docker镜像里,并且可以直接运行。
点击可进入docker 官方文档

2. Docker安装

docker的安装首先需要机器安装了kvm驱动,用户可以通过检查是否有/dev/kvm或者使用lsmod来查看

ls -al /dev/kvm
#或者
lsmod | grep kvm

在 Ubuntu 上安装 Docker 有两种推荐的方法:

  • 从 Ubuntu 的仓库安装 Docker:简单的单行命令,但提供旧版本
  • 使用 Docker 的官方仓库:工作量稍多,但提供了最新的稳定版本

2.1 方法 1:使用 Ubuntu 的仓库安装 Docker

安装指令如下:

sudo apt update
sudo apt install docker.io docker-compose

安装完成后,可以使用docker -v来查看安装是否成功:
在这里插入图片描述

2.2:在 Ubuntu 中安装最新稳定版本的 Docker

1. 删除任何现有的 Docker 包
使用以下命令删除就的Docker:

sudo apt remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc

2. 安装依赖项

sudo apt install ca-certificates curl gnupg lsb-release

3. 添加 Docker 仓库的 GPG 密钥并将其添加到 sources.list

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. 安装 Docker 和 Docker Compose

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

5. 验证
上面我们讲了使用docker -v可以用来验证安装是否成功;其实docker官方还提供了一个Hello World镜像用以测试安装是否成功

sudo docker run hello-world

出现下面日志,说明docker安装成功

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
17eec7bbc9d7: Pull complete
Digest: sha256:a0dfb02aac212703bfcb339d77d47ec32c8706ff250850ecc0e19c8737b18567
Status: Downloaded newer image for hello-world:latestHello 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 theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare 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/

我们也可以通过docker ps来看出Hello World镜像
在这里插入图片描述

3. Docker镜像

镜像是一种轻量级、 可执行的独立软件包,来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

3.1 拉取镜像

可以使用docker pull来拉起镜像

sudo docker pull docker.io/library/nginx:latest
  • docker.io:是docker官方仓库 Docker Hub 的注册表地址,docker.io表示docker的官方仓库,官方仓库可以省略仓库地址
  • library:命名空间(或作者名),因为docker hub是公共仓库,每个人上传的镜像都需要加上自己的命名空间,官方命名空间library可以省略不写
  • nginx: 镜像名
  • latest:标签(版本号),我们可以指定一个特定版本号,也可以省略不写,省略时表示latest

docker pull还可以通过--platform来指定下载指定平台的镜像, 默认会拉去最匹配宿主机的平台版本

3.2 查看镜像

可以使用以下命令查看当前下载的所有镜像

sudo docker images
#或者
sudo docker image ls

也可以在后面加上镜像名,来只显式当前镜像的下载情况

sudo docker images nginx
#或者
sudo docker image ls nginx

在这里插入图片描述

3.3 镜像删除

可以使用以下命令删除已下载的镜像

sudo docker rmi nginx
#或者
sudo docker image rm nginx

也可以通过镜像ID来镜像删除

sudo docker rmi ad5708199ec7
#或者
sudo docker image rm ad5708199ec7

4. Docker 常用命令

4.1 docker run启动容器

docker可以通过docker run来启动一个容器,这也是最重要的一条,最简单的指令如下:

sudo docker run nginx
#或者
sudo docker run ad5708199ec7

4.2 docker ps查看容器进程

启动后,可以通过docker ps来查看容器状态

sudo docker ps

还可以加上-a来查看所有的容器,包括正在运行的和停止的

sudo docker ps -a

4.3 docker run -d后台运行

但是如果只是这样启动的话,当前创建就会不停地打印日志,如果想后台运行,可以使用-d指令,让docker可以在后台执行

sudo docker run -d nginx

4.4 docker run -p 配置网络断开

容器内部网络和宿主机的网络默认使用桥连接,他们是相互隔离的,如果想通过宿主机直接访问就需要配置端口映射,指令如下:

sudo docker run -p 80:80 nginx

表示将宿主机的80端口转发到容器内的80端口进行处理,这样我们访问宿主机的80端口时,就等于访问到了容器内的80端口

4.5 docker run -v 挂载目录

通过-v参数,可以将宿主机的目录挂载到容器内部来,比如

sudo docker run -v ~/.ssh:~/.ssh nginx

上面指令表示我们将宿主机的~/.ssh目录挂载到了容器中,该能力常常用来做数据的持久化保存,因为当删除掉容器时,容器内的文件会被同时删除掉,但是挂载的文件,即使容器被删除,但文件依然还会保存在宿主机对应的目录里面

4.5.1 命名卷挂载
除了上面讲宿主机已有目录挂载到容器外,还可以创建一个存储空间(命名卷)来进行挂载,这种挂载方式就叫做命名卷挂载,我们可以使用以下命令来创建命名卷:

sudo docker volume create nginx_html
sudo docker run -v nginx_html:/usr/share/nginx/html nginx

我们可以通过下面指令来查看挂载卷在宿主机的具体位置:

sudo docker volume inspect nginx_html

如下图,它的真是目录是在/workspace/docker/volumes/nginx_html/_data在这里插入图片描述
4.5.2 删除卷
使用下面命令即可删除此卷

sudo docker volume inspect nginx_html

使用下面指令,可删除所有容器没有使用的卷

sudo docker volume prune -a

4.6 docker run -e设置环境变量

如下我们可以使用-e来传递mogo数据库的用户名和密码:

sudo docker run -d -p 27017:27017 -e MOGO_INITDB_ROOT_USERNAME=admin -e MOGO_INITDB_ROOT_PASSWORD=123456 mongo

这样启动后的容器内就用了环境变量MOGO_INITDB_ROOT_USERNAMEMOGO_INITDB_ROOT_PASSWORD的定义。

4.7 docker run --name 给容器取名

用户可以通过--name参数给容器取一个自定义名字,这个名字必须是独一无二的,重名就无法启动,比如:

sudo docker run -d --name my_nginx nginx

使用docker ps就可以查看当前启动了一个名叫my_nginx 的宿主机
在这里插入图片描述

4.8 docker run -it --rm 交互与容器自销毁

  • -it: 实现对容器的交互,即启动后,自动进入容器
  • --rm: 当退出容器时,自动删除容器
sudo docker run -it --rm alpine

当两个参数同时使用时,常用来调试一个临时容器

4.9 docker run --restart 容器自重启

sudo docker run -it -d --restart always nginx

上面命令表示当容器停止了总是会自动重启容器,包含容器因为内部原因崩溃或者宿主机断电等场景
也可以使用unless-stopped来控制如果是手动重启的容器就不会被重启

sudo docker run -it -d --restart unless-stopped nginx

4.11 容器启停

  • docker stop:可以停止一个正在运行的容器
  • docker start:可以启动一个停止的容器
  • docker restart:可以重启动一个容器

4.12 docker inspect 查看容器信息

sudo docker inspect my_nginx 

4.13 docker create容器创建

docker create命令与docker run命令非常相似,唯一不同的是docker create只创建容器,不启动,需要手动docker start来启动

sudo docker create -p 80:80 --name my_nginx nginx

4.14 docker log查看容器日志

sudo docker log my_nginx

表示查看my_nginx容器的日志,也可以使用容器id进行操作。
如果想查看实时日志,可以加上-f

sudo docker log my_nginx -f

4.15 docker rm -f 删除容器

当删除正在运行的容器时,需要加-f,如果容器已经停止,可以直接删除

sudo docker rm -f my_nginx

4.16 docker exec 使用容器内的linux命令

比如:

sudo docker exec my_nginx ps -ef

上面命令可以查出容器内的进程情况

4.17 docker exec -it -d 可进入容器

下面命令可以进入容器my_nginx

sudo docker exec -it my_nginx bash

4.18 docker run --network容器网络管理

容器与宿主机默认使用桥连接,需要使用-p参数来进行端口转发,我们也可以使用以下命令来让容器与宿主机共享一个网络:

sudo docker run -d --network host nginx

同时我们也可以使用docker network creat来创建自定义的子网:

docker network creat network1

即创建了一个network1的子网,我们可以让多个容器运行在同一个子网下面,同一个子网的容器可以相互通信,不同子网则不能直接通信,我们可以通过这个命令创建多个子网

sudo docker run -d --network network1 nginx

4.19 docker compose

使用docker-compose.yaml文件来配置多个容器的创建

sudo docker compose up -d

yaml文件的格式

services:name1:image:mongoenvironment:MOGO_INITDB_ROOT_USERNAME:nameMOGO_INITDB_ROOT_PASSWORD:passname2:image:mongoports:- 8081:8081environment:MOGO_INITDB_ROOT_USERNAME:nameMOGO_INITDB_ROOT_PASSWORD:passdepends_on:- name1
http://www.dtcms.com/a/341429.html

相关文章:

  • ubuntu privileged cont 一直在读取硬盘
  • ubuntu24.04 frps服务器端自动启动设置【2025-08-20】
  • JUC之CompletableFuture【下】
  • 内网安全——出网协议端口探测
  • RAG拓展、变体、增强版(一)
  • 【深度学习-Day 43】解密LSTM:深入理解长短期记忆网络如何克服RNN的遗忘症
  • 8.20网络编程——sqlite3数据库
  • 计算机视觉(二):视觉的处理流程
  • Promise.all 速查与扩展实战
  • 基于SpringBoot的蜗牛兼职网平台
  • React框架超详细入门到实战项目演练【前端】【React】
  • Spring Retry实战指南_让你的应用更具韧性
  • PyTorch API 2
  • 漫漫长夜 全DLC(The Long Dark)免安装中文版
  • Docker之MySQL安装
  • Redis(以Django为例,含具体操作步骤)
  • 数字人制作全流程解析:从概念到落地的完整步骤​
  • 实战:本地大模型+function Calling,获取北京天气
  • uniapp学习【上手篇】
  • [激光原理与应用-314]:光学设计 - 光学系统设计与电子电路设计的相似或相同点
  • 1-2前端撸码前的准备,包管理工具和环境搭建
  • 升级Android系统webview
  • Spring事务源码
  • Linux Capability 解析
  • 【81页PPT】智慧方案智能化弱电智能家居系统解决方案(附下载方式)
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘requests-html’问题
  • VPS服务器安全审计方案:从风险评估到防护实施
  • 汇编语言学习3---GDB调试
  • 【StarRocks】TabletChecker逻辑
  • 尝试给每个客户端设置一个标签身份,以此来解决非独立同分布的情况?