问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker基础10分钟急救包:镜像/容器/挂载核心用法记录

创作时间:
作者:
@小白创作中心

Docker基础10分钟急救包:镜像/容器/挂载核心用法记录

引用
CSDN
1.
https://m.blog.csdn.net/weixin_44970102/article/details/146181031

Docker是现代软件开发中不可或缺的工具,它可以帮助开发者快速搭建和部署运行环境。本文从Docker的基础概念出发,详细介绍了Docker的安装、基本使用、数据卷挂载、网络配置等核心功能,适合Docker初学者快速上手。

前言

之前也用过一些docker,但是镜像都是其他部门做好打包了,我一直都是拿来主义,只会简单的启动,关闭容器,并没有过多的深究,导致一年之后再去使用Docker时,发现很多命令和使用手法出现混乱,以致于使用起来不是很顺手,借此机会系统性的记录下docker的常用命令用法和作用。

为什么用Docker

软件算法开发中,很多重复且技术含量不是很高的工作中其中必有“搭环境”,有的复杂的项目,环境搭建和调试可能需要一天。运气不好,在系统崩溃或者更换机器的情况下就需要重新搭建环境,要是有一个工具可以帮助我们解决环境只需要搭建一次,然后打包成一个文件,下次使用直接加载这个文件就好啦,因此Docker它来啦!

Docker 基础概念

在使用 Docker 之前,需要了解以下几个核心概念:

镜像(Image)

Docker 镜像类似于软件安装包,它包含了运行某个程序所需的环境和依赖。你可以从 Docker Hub 下载公共镜像,也可以自己构建镜像。

容器(Container)

容器是基于镜像运行的实例,类似于安装并运行的应用。容器是独立的,它不会影响宿主机和其他容器的运行。

仓库(Repository)

Docker 镜像存储在远程仓库,如 Docker Hub(官方公共仓库)或者私有仓库。你可以拉取(pull)或推送(push)镜像。

Docker安装(以ubutnu20.04为例子)

step1 检查本地是否存在docker

docker --version  # 查看版本号 简单粗暴的了解本地是否安装docker

step2 更新安装工具并安装依赖

这一步确保系统的软件包是最新的,并安装 curl 等必要的工具。

sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release

step3 添加Docker官方GPG密钥

这样可以确保下载的 Docker 软件包是官方认证的。

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc

step4 添加Docker软件源

这样可以让 apt 从 Docker 官方源获取最新版本的软件包。

echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

step5 安装Docker

安装完毕后,Docker 及其相关组件都会准备好。

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

step6 启动并设置 Docker 开机自启

sudo systemctl start docker
sudo systemctl enable docker

step7 验证 Docker 是否安装成功

docker --version # 有类似 Docker version 24.0.7, build 1234567 输出,表示安装成功

step8 允许非 root 用户使用 Docker(可选)

默认情况下,Docker 需要 sudo 才能运行。如果想让普通用户也能运行 Docker:

sudo usermod -aG docker $USER
newgrp docker

这样,你就可以不使用 sudo 直接运行 docker 命令了。

🚀至此,docker安装已经完成!

Docker使用

1、拉取镜像

获取一个基础镜像

docker pull ubuntu:20.04

2、 查看本地镜像

docker images # 输出本地存在镜像文件

3、 运行docker容器

docker run -it ubuntu:20.04 /bin/bash
  • -it:交互模式运行容器
  • ubuntu:20.04:基于这个镜像运行容器
  • /bin/bash:进入容器的 bash 终端
docker run --rm -it ubuntu /bin/bash

该命令加上–rm 表明该方法启动的容器再停止退出后,容器随机删除,里面的任何修改都不会保存,不建议使用。

4、 退出并停止容器

exit

或者 ctrl + D

5、 查看运行中的容器

docker ps

6、查看所有容器(包括已停止的)

docker ps -a

7、 重新启动已经停止的容器

docker start 默认不会附加终端。如果你希望启动容器并附加到容器的标准输入和输出(进入容器的交互式模式),你可以使用 -i 参数,类似于 docker run -i。

docker start -i 容器ID/容器名

8、停止容器

docker stop 容器ID/容器名

9、进入已经开启的容器中

docker exec -it my_container /bin/bash

10、删除容器

docker rm 容器ID/容器名
  • 删除容器后,对于容器的修改不会保存

11、删除镜像

docker rmi 镜像ID/镜像名

Docker容器如何能和宿主机文件数据共享呢?

docker容器是独立的,如果不指定共享文件夹,那么容器内部是无法获取宿主机的文件数据的,这样是不能和外接进行数据交互的,那么容器的作用也就不大了。

docker run -it -v /宿主机目录:/容器目录 ubuntu:20.04 /bin/bash

示例:

docker run -it -v ~/mydata:/data ubuntu:20.04 /bin/bash

这样,宿主机 ~/mydata 目录中的数据会体现到容器的 /data 目录中。

Docker容器的修改如何保存?

在启动命令中加入–rm命令,会使得在停止退出时删除容器,因此容器的修改会消失。下述方法可以保证容器的修改能够永久保存。

step1 启动容器并进行修改

首先,你需要启动一个容器并在容器中进行修改。例如,进入容器并安装一些新的软件包或编辑文件。

docker run -it --name my_container ubuntu:20.04

当在容器中进行一些环境依赖安装后,执行下述保存容器内容为一个新的镜像

step2 保存新的镜像

docker commit my_container my_new_image:latest

step3 查看新的镜像

docker images

step4 使用新的镜像创建新的容器

之后,使用这个新的镜像来启动新的容器:

docker run -it my_new_image:latest

这将启动一个新的容器,并且包含你在原始容器中所做的所有修改。

Docker私有镜像如何部署到另一台机器上?

上述所有的工作都是为了这一步!我们使用Docker的目的就是不想重复搭建环境,因此当上述我们完成适配自己算法环境的docker镜像后,于是就可以保存镜像文件到本地,后续移植到任何需要部署的。

docker save -o my_new_image.tar my_new_image:latest
  • -o 选项指定输出的 .tar 文件的名称(例如:my_new_image.tar)。
  • my_new_image:latest 是你要保存的镜像的名称和标签。

在目标机器上加载镜像文件

docker load -i /path/to/destination/my_new_image.tar

启动镜像

docker run -it my_new_image:latest

Docker容器如何能和宿主机共享网络ip?

docker容器是独立的,如果不指定共享宿主机网络,那么容器外部是无法通过远程获取容器内部数据的,解决不同容器之间的通讯问题,尤其针对ros系统的使用,如果不同容器不在同一个网段下是不可以通讯的。

docker run -it --network host ubuntu:20.04 /bin/bash

通过 --network host 实现容器网络共享宿主机器网络

至此,完成镜像的制作和部署🚀

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号